GeneralConvolution

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

Questo filtro esegue una matrix convolution.

clip RGB32 clip
bias (default 0) bias aggiuntiva per tarare la total output intensity
matrix (default "0 0 0 0 1 0 0 0 0") può essere una matrice 3x3 o 5x5 con 9 o 25 numeri interi compresi tra -256 e 256
divisor (default 1.0) divide l'output della convolution (calculato prima di aggiungere il bias)
auto (default true) Abilita la funzionalità di auto scaling. Divide il risultato per la somma degli elementi della matrice. Il valore di divisor è applicato in aggiunta a questo fattore di auto scaling. Se la somma degli elementi è zero, auto viene disabilitato.

divisor è normalmente la somma degli elementi della matrice. Se questa somma è zero, si devono usare divisor e le impostazioni di bias per correggere i valori dei pixel. bias potrebbe servire se i valori del pixel fossero negativi a causa di convolution. Dopo aver aggiunto il bias, i pixels vengono tagliati a zero (o a 255 se più grandi di 255).

Alcuni esempi:

# Blur:

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)
# Horizontal (Sobel) edge detection:

GeneralConvolution(128, "
    1  2  1
    0  0  0
   -1 -2 -1 ", 8)
# Vertical (Sobel) Edge Detection:

GeneralConvolution(128, "
   1  0 -1
   2  0 -2
   1  0 -1 ", 8)
# Displacement (simply move the position
# of the "1" for left, right, up, down)

GeneralConvolution(0,"
   0 1 0
   0 0 0
   0 0 0 ")
# Displacement by half pixel up (auto scaling):

GeneralConvolution(0,"
   0 1 0
   0 1 0
   0 0 0 ")
# Displacement by half pixel right (manual scaling):

GeneralConvolution(0,"
   0   0   0
   0 128 128
   0   0   0 ", 256, False)
# Sharpness filter:

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

In this case, the the new pixel values y(m,n) are given by
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
# Slight blur filter with black level clipping and 25% brightening:

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

In this case, the the new pixel values y(m,n) are given by
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

Ulteriori esempi si trovano qui.

Changelog:

v2 Initial Release
v2.55 added divisor, auto

$Date: 2004/09/26 19:49:40 $