GeneralConvolution

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

Ce filtre applique une convolution avec une matrice.

clip clip RGB32
bias (par défaut à 0) paramètre supplémentaire de décalage pour ajuster l'intensité de la sortie
matrix (par défaut à "0 0 0 0 1 0 0 0 0") une matrice 3x3 ou 5x5 avec 9 ou 25 nombres entiers compris entre -256 et 256
divisor (par défaut à 1.0) divise la sortie de la convolution (calculé avant d'ajouter le bias)
auto (par défaut à true (vrai)) Active la fonction d'échelle automatique. Cela divise le résultat par la somme des éléments de la matrice. La valeur de divisor en appliquée en plus de ce facteur. Si la somme des éléments est zéro, ce paramètre est déactivé

Le divisor (diviseur) est habituellement la somme des éléments de la matrice. Mais quand la somme est égale à zero, vous devez utiliser les paramètres divisor et bias pour corriger la valeur des pixels. Le paramètre bias peut être utile si la valeur des pixels est négative après la convolution. Après avoir appliqué le bias, la valeur des pixels négatifs est simplement ramené à zéro (ou 255 si la valeur des pixel est supérieure à 255).

Sur les bord, les pixels du bord sont répétés pour pouvoir effectuer la convolution.

Quelques exemples:

# Flou:

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)
# Détection de contour horizontale (Sobel):

GeneralConvolution(128, "
1 2 1
0 0 0
-1 -2 -1 ", 8)
# Détection de contour verticale (Sobel):

GeneralConvolution(128, "
1 0 -1
2 0 -2
1 0 -1 ", 8)
# Déplacement (déplace simplement de "1" pixel
# du coté ou le 1 est placé dans la matrice (gauche, droite, haut et bas)

GeneralConvolution(0,"
0 1 0
0 0 0
0 0 0 ")
# Déplacement d'un demi pixel (échelle automatique):

GeneralConvolution(0,"
0 1 0
0 1 0
0 0 0 ")
# Déplacement d'un demi pixel à droite (échelle manuelle):

GeneralConvolution(0,"
0 0 0
0 128 128
0 0 0 ", 256, False)
# Filtre de netteté:

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

Dans ce cas, les nouvelles valeurs d'un pixel y(m,n) sont données par:
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
# Léger filtre de flou avec une suppression des noirs et un éclaircissement de 25%:

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

Dans ce cas, les nouvelles valeurs d'un pixel y(m,n) sont données par:
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

D'autres exemples peuvent être trouvés ici (en anglais).

Changements:

v2 Version initiale
v2.55 Ajout des paramètres divisor et auto

$English date: 2005/05/31 13:57:24 $
French translation date: 2005/11/05 JasonFly macpaille@users.sourceforge.net