Графические фильтры

В этой теме 0 ответов, 1 участник, последнее обновление  Васильев Владимир Сергеевич 2 мес., 1 неделя назад.

  • Автор
    Сообщения
  • #5096
    @admin

    Возьмем некоторую квадратную матрицу фильтра (ядро) с нечетным числом элементов и наложим, например, на красный канал так, чтобы центр матрицы совпал с обрабатываемым пикселем.

    Вычислим сумму произведений элементов матрицы на соответствующие значения в канале и разделим ее на сумму элементов матрицы, если она не равна нулю. К результату можно также добавить некую константу, особенно если сумма элементов матрицы равна 0. Полученное число и является новым значением красной компоненты обрабатываемого пикселя.

    В некоторых API деление на сумму опускают, предлагая использовать матрицы с уже поделенными элементами. Например, матрица размытия 3х3 будет состоять уже не из 1, а из 1/9. Такие матрицы называют нормализованными. Таким образом, избавляемся от лишнего деления и проверки деления на 0.

    Другим методом ускорения за счет промежуточных изображений является разложение матрицы на множители. То есть, вначале делаем фильтр по первому множителю, затем по второму множителю. Типичным примером является матрица размывания по Гауссу.

    Пиксели на границе либо не обрабатываются (тогда возникает рамка вокруг изображения), либо за значение недостающих пикселей можно взять некий цвет. Можно также расширить изображение и продублировать границу. В зависимости от матрицы фильтра можно получить множество эффектов как выделение краев.

    К недостаткам алгоритма можно отнести малую скорость обработки, особенно для больших изображений.

    Фильтрацию изображения также называют искривлением или сверткой (convolve) изображения. Это на случай, если вы будете искать дополнительную информацию на англ. языке.

    смягчение (известные также как smooth, soften или blur):

    0 0 0 0 0   1 1 1 1 1       0  1  2  1  0
    0 1 3 1 0   1 1 1 1 1       1  3 10  3  1
    0 3 9 3 0   1 1 1 1 1       2 10 90 10  2
    0 1 3 1 0   1 1 1 1 1       1  3 10  3  1 
    0 0 0 0 0   1 1 1 1 1       0  1  2  1  0

    размытие по Гауссу:

    1 2 1   1
    2 4 2 = 2  * 1 2 1
    1 2 1   1

    заострение (sharpen):

    0  0  0  0  0    -1 -1 -1 -1 -1   -1 -1 -1 -1 -1   -1 -1 -1   1  -2  1
    0 -1 -3 -1  0    -1 -1 -1 -1 -1   -1  3  4  3 -1   -1  8 -1   -2  5 -2
    0 -3 41 -3  0    -1 -1 49 -1 -1   -1  4 13  4 -1   -1 -1 -1   1  -2  1
    0 -1 -3 -1  0    -1 -1 -1 -1 -1   -1  3  4  3 -1
    0  0  0  0  0    -1 -1 -1 -1 -1   -1 -1 -1 -1 -1

    выделение краев (edge detection):

    -1/8 -1/8 -1/8     -1 -1 -1     -5 0 0
    -1/8   1  -1/8     0   0  0      0 0 0
    -1/8 -1/8 -1/8     1   1  1      0 0 5

    рельефность (emboss). Для двух последних матриц нужно добавлять константу 128:

    -2 -1 0   -2 0 0    0 0 0     2 0   0
    -1  1 1    0 1 0    0 1 0     0 -1  0
     0  1 2    0 0 2    0 0 -1    0 0  -1 

    Диагональное разбиение (diagonal shatter):

    1 0 0 0 1
    0 0 0 0 0
    0 0 0 0 0
    0 0 0 0 0
    1 0 0 0 1

    Горизонтальное размытие (horizontal motion blur):

    0 0 0 0 0
    0 0 0 0 0
    2 3 4 5 6
    0 0 0 0 0
    0 0 0 0 0

Для ответа в этой теме необходимо авторизоваться.