8.2. Matrice de convolution

8.2.1. Généralités

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.

8.2.2. Ouverture du filtre

On accède à ce filtre par le menu d'image en suivant FiltresGénériquesMatrice de Convolution.

8.2.3. Options

Figure 16.148. Options du filtre « Matrice de convolution »

Options du filtre « Matrice de convolution »

Matrice

C'est la matrice 5x5 du noyau que vous voulez créer: vous entrez les valeurs voulues directement dans les cases.

Diviseur

Le résultat du calcul précédent sera divisé par ce diviseur. Vous n'utiliserez guère que 1 qui laisse le résultat inchangé, et 9 ou 25 selon la taille de la matrice utilisée, ce qui donne la moyenne de la valeur des pixels.

Décalage

Cette valeur est ajoutée au résultat de la division. C'est utile si le résultat risque d'être négatif. Le Décalage peut être négatif.

Bordure

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, Extend border, Wrap border, Crop border

Étendre

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.

Enrouler

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é.

Rogner

Les pixels situés en bordure disparaissent et les parties libérées sont transparentes. Si l'option Poids Alpha n'est pas cochée et si l'image n'a pas de canal alpha, cette option est en grisé.

Canaux

Vous pouvez choisir là le ou les canaux sur lesquels agira le filtre.

Normaliser

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).

Poids alpha

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.

8.2.4. Exemples

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:

Figure 16.149. Augmenter le contraste

Augmenter le contraste
Augmenter le contraste

Figure 16.150. Flou

Flou
Flou

Figure 16.151. Renforcement des bords

Renforcement des bords
Renforcement des bords

Figure 16.152. Détection des bords

Détection des bords
Détection des bords

Figure 16.153. Repoussage

Repoussage
Repoussage