Nous sommes là dans le coin des mathématiciens. La plupart des filtres de traitement des images utilisent des matrices de convolution. Avec le filtre Matrice de convolution, vous pouvez, si le cœur vous en dit, vous concocter un petit filtre sur mesure.
Mais qu’est-ce que c’est qu’une matrice de convolution? On peut s’en faire une idée approximative sans utiliser les outils mathématiques que bien peu connaissent. Une convolution est un traitement d’une matrice par une autre appelée matrice de convolution ou « noyau » (kernel).
Notre filtre « Matrice de convolution » utilise une première matrice qui est l’image, c.-à-d une collection de pixels en coordonnées rectangulaires 2D (il y a des matrices 3D…), et un noyau variable selon l’effet souhaité.
GIMP utilise des matrices de convolution 5x5 ou 3x3. Nous nous limiterons aux matrices 3x3, les plus utilisées. Elles suffisent à tous les effets recherchés. Si toutes les cases des bords du noyau sont à 0, le système considère qu’il s’agit d’une matrice 3x3.
Le filtre étudie successivement chacun des pixels de l’image. Pour chaque pixel, que nous appellerons « pixel initial », il multiplie la valeur de ce pixel et de chacun des 8 pixels qui l’entourent par la valeur correspondante dans le noyau. Il additionne l’ensemble des résultats et le pixel initial prend alors la valeur du résultat final.
Vite un exemple, simple :
À gauche se trouve la matrice de l’image: chaque pixel est indiqué par sa valeur. Le pixel initial est encadré de rouge. La zone d’action du noyau est encadrée de vert. Au centre, se trouve le noyau et, à droite, le résultat de la convolution.
Voici ce qui s’est passé: le filtre a lu successivement, de gauche à droite et de haut en bas, les pixels de la zone d’action du noyau et il a multiplié chacun d’eux par la valeur correspondante du noyau et additionné les résultats. Le pixel initial a pris la valeur 42 : (40*0)+(42*1)+(46*0) + (46*0)+(50*0)+(55*0) + (52*0)+(56*0)+(58*0) = 42 (le filtre dépose ses résultats sur une copie de l’image et pas directement dans l’image). Le résultat graphique est un décalage du pixel initial d’un pixel vers le bas.
Note | |
---|---|
Ces options sont décrites dans Section 2, « Options communes ». |
C’est la matrice 5x5 du noyau que vous voulez créer : vous entrez les valeurs voulues directement dans les cases.
The result of previous calculation will be divided by this divisor. You will hardly use anything else than 1, which leaves results unchanged, and 9 or 25 according to matrix size, which gives the average of pixel values. The divisor can only be changed when Normalize is unchecked.
This value is added to the division result. This is useful if result may be negative. This offset may be negative. It can only be changed when Normalize is unchecked.
Here you can select which channels the filter should change.
Quand cette option est cochée, le Diviseur prend la valeur du résultat du calcul de convolution. Si ce résultat est égal à 0 (on ne peut pas diviser par 0), un Décalage de 128 est appliqué. S’il est négatif (on ne peut pas avoir de couleur négative), c’est un décalage de 255 qui est appliqué (ce qui inverse le résultat).
Si cette option n’est pas cochée, le calcul ne tient pas compte du degré de transparence des couleurs, ce qui peut être cause d’artéfacts lors de l’application d’un flou.
Quand le pixel initial est sur un bord, une partie du noyau porte en dehors des limites de l’image. Vous devez décider de ce que doit faire le filtre. Dans les exemples ci-dessous, le noyau simple de déplacement décrit plus haut a été appliqué plusieurs fois, grâce à Ctrl-F, à l’image:
From left: source image, None border, Loop border, Clamp border
Cette partie du noyau n’est pas prise en compte. Des pixels disparaissent. La ligne libérée est remplacée par une extension de la ligne suivante.
Cette partie du noyau étudiera les pixels du bord opposé, ce qui équivaut à faire réapparaître de l’autre côté les pixels qui disparaissent d’un côté.
Les pixels situés en bordure ne sont pas modifiés mais sont rognés.
Pixels on borders are changed to black.
Pixels on borders are changed to white.
La création de noyaux nécessite des connaissances mathématiques de haut niveau. Mais vous en trouverez de tout faits sur la Toile. En voici quelques exemples: