## GeneralConvolution

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

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

clip | RGB32 клип
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 drakan.ru`