9.2. Matrice de convolution

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

9.2.2. Ouverture du filtre

On accède à ce filtre par FiltresGénériquesMatrice de Convolution….

9.2.3. Options

Figure 17.175. Options du filtre « Matrice de convolution »

Options du filtre « Matrice de convolution »

Presets, « Input Type », Clipping, Blending Options, Preview, Split view
[Note] Note

Ces options sont décrites dans Section 2, « Options communes ».

Matrice

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

Diviseur

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.

Décalage

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.

Canaux

Here you can select which channels the filter should change.

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.

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, None border, Loop border, Clamp border

None

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.

Loop

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

Clamp

Les pixels situés en bordure ne sont pas modifiés mais sont rognés.

Black

Pixels on borders are changed to black.

White

Pixels on borders are changed to white.

9.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 17.176. Augmenter le contraste

Augmenter le contraste
Augmenter le contraste

Figure 17.177. Flou

Flou
Flou

Figure 17.178. Renforcement des bords

Renforcement des bords
Renforcement des bords

Figure 17.179. Détection des bords

Détection des bords
Détection des bords

Figure 17.180. Repoussage

Repoussage
Repoussage