GeneralConvolution

GeneralConvolution (clip, int "bias", string "matrix", float "divisor", bool "auto")

Этот фильтр производит матричную свертку.

clipRGB32 клип
bias (default 0)аддитивное смещение для регулировки общей выходной интенсивности
matrix (по умолчанию "0 0 0 0 1 0 0 0 0")может быть 3x3 или 5x5 матрицей с 9 или 25 целыми числами между -256 и 256
divisor (по умолчанию 1.0)делит выход свертки (рассчитывается перед добавлением смещения)
auto (по умолчанию true)включает функцию автомасштабирования. Это делит результат на сумму элементов матрицы. Значение парамтера divisor применяется в дополнение к полученному значению автомасштабирования. Если сумма элементов равна нулю, то auto выключается.

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

Рядом с границами крайние пикселы просто повторяются для подачи в матрицу.

Несколько примеров:

# Размывание (блур):

GeneralConvolution(0, "
   10 10 10 10 10
   10 10 10 10 10
   10 10 16 10 10
   10 10 10 10 10
   10 10 10 10 10 ", 256, False)
# Горизонтальное (Sobel) детектирование границ:

GeneralConvolution(128, "
    1  2  1
    0  0  0
   -1 -2 -1 ", 8)
# Вертикальное (Sobel) детектирование границ:

GeneralConvolution(128, "
   1  0 -1
   2  0 -2
   1  0 -1 ", 8)
# Перемещение (просто сдвигает позицию "1" влево, вправо, вверх, вниз):

GeneralConvolution(0,"
   0 1 0
   0 0 0
   0 0 0 ")
# Перемещение на половину пикселя (автомасштабирование):

GeneralConvolution(0,"
   0 1 0
   0 1 0
   0 0 0 ")
# Перемещение на половину пикселя (ручное масштабирование)::

GeneralConvolution(0,"
   0   0   0
   0 128 128
   0   0   0 ", 256, False)
# Фильтр повышения резкости (шарпнесса):

GeneralConvolution(0,"
   0   -1   0
  -1    5  -1
   0   -1   0 ", 1, True)

В этом случае новые значения пикселов y(m,n) рассчитываются как :
y(m,n) = (-1*x(m-1,n) - 1*x(m,n-1) + 5*x(m,n) - 1*x(m,n+1)
         - 1*x(m+1,n))/(-1-1+5-1-1)/1.0 + 0
# Легкое размывание с ограничением уровня черного и повышением яркости на 25%:

GeneralConvolution(-16,"
   0   12   0
  12  256  12
   0   12   0 ", 0.75 ,True)

В этом случае новые значения пикселов y(m,n) рассчитываются как :
y(m,n) = ( 12*x(m-1,n) + 12*x(m,n-1) + 256*x(m,n) + 12*x(m,n+1)
         + 12*x(m+1,n) )/(12+12+256+12+12)/0.75 - 16

Некоторые другие примеры можно найти здесь.

Лог изменений:

v2Начальный релиз
v2.55добавлены делитель, авто

$English Date: 2005/05/31 13:57:24 $
Русский перевод 10.05.2005 Drakon Rider