Date de mise à jour : 07 mai 2012

Filtrage d'images par convolution spatiale

1. Comment ça marche ?

Note importante : Ces filtres modifient les valeurs des pixels, il est donc recommandé de toujours travailler sur une copie.

Aud'ACE propose des fonctions évoluées de filtrage par convolution spatiale dans le menu Images/Filtrer. Une autre solution est proposée dans Images/Convoluer. Cette page explique le principe de leur fonctionnement.

Deux outils sont proposés :

Les références ci-dessous permettent de comprendre ce qu'est la convolution spatiale d'une image sans (trop) de formules mathématiques.

Pour faire simple, un filtre remplace la valeur d'un pixel par la combinaison linéaire de la valeur du pixel et des pixels adjacents. L'action du filtre est locale à la différence d'un filtre global (modification d'un pixel en fonction de caractéristiques globales de l'image).

Le poids accordé à chaque pixel est donné dans un tableau qui représente le noyau (ou masque ou matrice ou kernel) du filtre. Il est caractérisé par ses dimensions : Nombre de lignes x nombre de colonnes, souvent égaux. Par exemple, le filtre 3x3 ci-dessous remplace la valeur du pixel par lui-même en accordant un poids nul à ses voisins, il ne fait strictement rien mais n'est pas inutile pour autant, car il constitue le filtre unitaire 3x3 invariant.

0 0 0
0 1 0
0 0 0

La somme des coefficients du noyau étant égale à 1 on ne modifie pas la dynamique de l'image. Si la somme n'est pas nulle, il faut diviser le résultat par cette somme pour retrouver la dynamique initiale de l'image. Les exemples proposés plus bas résultent de l'application du filtre normalisé (chaque coefficient est divisé pas la somme des coefficients). Eviter de diviser par 0.

Suivant la taille du noyau le nombre de calculs peut devenir très important de même que le temps de traitement. Des astuces permettent d'optimiser ces opérations.

2. Effets et applications de quelques filtres

  1. Filtres gaussiens et moyens (flou)

    Les filtres, dits gaussiens car les valeurs simulent, plus ou moins approximativement, une distribution gaussienne à deux dimensions, provoquent un effet de flou car ils remplacent la valeur d'un pixel (en gras dans les tableaux) par la valeur pondérée du pixel et des pixels adjacents.

    Une distribution gaussienne peut être caractérisée par sa FWHM (largeur à mi-hauteur) et son sigma σ (écart-type). Il faut donc définir la taille du noyau et les valeurs des coefficients de manière à ce qu'il ait le σ souhaité. Idéalement la taille des filtres devrait être de 6 σ+1, soit un rayon de 3 σ, de manière à contenir 99% des valeurs. La taille du noyau augmente :

    original conique 5x5 gaussien 3x3 gaussien 5x5

    0 0 1 0 0
    0 2 2 2 0
    1 2 5 2 1
    0 2 2 2 0
    0 0 1 0 0
    1 2 1
    2 4 2
    1 2 1
    1 4 6 4 1
    4 18 30 18 4
    6 30 48 30 6
    4 18 30 18 4
    1 4 6 4 1

    σ = 0.7 σ = 0.8 σ = 1.0

    Les filtres de flou réduisent ou suppriment les détails fortement contrastés : Ce sont des filtres passe-bas (cf. les fonctions Aud'ACE Images/Filtrer/Filtre passe bas ... et Images/Filtrer/Filtre gaussien ...). Les filtres passe-bas adoucissent l'image. Ils sont utiles pour lisser le bruit (σ < 1) et dans la technique du masque flou (σ > 1).

    gaussien binomial 5x5 gaussien 5x5 gaussien 5x5
    1 4 6 4 1
    4 16 24 16 4
    6 24 36 24 6
    4 16 24 16 4
    1 4 6 4 1
    1 2 3 2 1
    2 4 6 4 2
    3 6 9 6 3
    2 4 6 4 2
    1 2 3 2 1
    1 2 3 2 1
    2 3 3 3 2
    2 3 4 3 2
    2 3 3 3 2
    1 2 2 2 1
    σ = 1.1 σ = 1.3 σ = 1.7

    Les filtres moyens sont en quelque sorte des filtres gaussiens dénaturés où tous les coefficients seraient égaux (pas de sigma) (cf. la fonction Aud'ACE Images/Filtrer/Filtre moyen ...). Ils sont très simples mais préservent aussi un peu moins bien les détails.

    moyen 3x3 hexagonal 5x5
    1 1 1
    1 1 1
    1 1 1
    0 0 0 0 0
    0 1 0 1 0
    1 0 1 0 1
    0 1 0 1 0
    0 0 0 0 0

    Il faut parfois faire des comparaisons détaillées pour distinguer les différences.

    La technique du masque flou consiste à :

    La fonction Images/Filtrer/Masque Flou ... d'Aud'ACE fait cela automatiquement.

  2. Filtres laplaciens (rehaussement des contours)

    Ces filtres ont une action inverse des précédents, ils améliorent le contraste local. Leur caractéristique est que la somme des coefficients est nulle (donc pas question de normaliser). On peut cependant rajouter 1 à l'élément central et c'est alors un filtre normalisé qui constitue un filtre passe-haut (cf. la netteté 3x3 et Images/Filtrer/Filtre passe haut ...). Ils ont tendance à accentuer le bruit (thermique ou de photon).

    original laplacien 1 3x3 netteté 3x3 accentuation 3x3

    -1 -1 -1
    -1 8 -1
    -1 -1 -1
    -1 -1 -1
    -1 9 -1
    -1 -1 -1
    -1 -1 -1
    -1 16 -1
    -1 -1 -1

    L'effet est d'autant moins prononcé que le coefficient central est important.

    Les filtres laplacien 1, netteté et accentuation sont non directionnels au sens où tous les éléments entourant le pixel central sont traités de manière identique. Ils ne privilégient aucune direction (Nord-Sud, Est-Ouest, diagonale). La permutation des éléments entourant l'élément central ne produit pas un noyau différent.

    Les pixels des coins, qui ne sont pas exactement à la même distance que les pixels directement adjacents, peuvent être traités différemment, ce qui génère d'autres noyaux de base et d'autres effets. Le tableau ci-dessous regroupe le noyau et l'effet obtenu après addition de l'image filtrée avec l'image originale :

    laplacien 1 3x3 laplacien 2 3x3 laplacien de Robinson 3x3 laplacien 3 3x3 laplacien hexagonal 5x5
    -1 -1 -1
    -1 8 -1
    -1 -1 -1
    -1 -2 -1
    -2 12 -2
    -1 -2 -1
    1 -2 1
    -2 4 -2
    1 -2 1
    0 -1 0
    -1 4 -1
    0 -1 0
    0 0 0 0 0
    0 -1 0 -1 0
    -1 0 6 0 -1
    0 -1 0 -1 0
    0 0 0 0 0

    Ces filtres produisent un halo noir et augmentent le bruit. Il est préférable d'appliquer un filtre flou pour diminuer le bruit avant d'appliquer un filtre d'accentuation des détails, c'est la combinaison LoG (Laplacien of Gaussian) ou chapeau mexicain (cf. Images/Filtrer/Ondelettes de type chapeau mexicain...).

  3. Filtres gradients (variation de luminosité)

    Les filtres directionnels ne sont pas symétriques. Tel est le cas du filtre de Sobel qui permet de mettre en évidence les différences (le gradient) de luminosité entre zones dans une direction donnée. Ils servent à enlever des composantes continues et à mettre en valeur de faibles détails et à leur donner du relief. Ils ont donc également tendance à accentuer le bruit (thermique ou de photon).

    Sobel Ouest->Est 3x3 Sobel Nord-Sud 3x3 Sobel Est->Ouest 3x3 Sobel Sud-Nord 3x3
    -1 0 1
    -2 0 2
    -1 0 1
    -1 -2 -1
    0 0 0
    1 2 1
    1 0 -1
    2 0 -2
    1 0 -1
    1 2 1
    0 0 0
    -1 -2 -1

    L'effet de relief et d'estampage varie selon la direction du filtre, l'ombre est toujours du côté des valeurs négatives du noyau et les contours et les détails sont plus ou moins accentués. Il est donc recommandé de procéder à des essais pour sélectionner le filtre adapté.

    Les 4 noyaux ci-dessus peuvent être obtenus par rotation d'un angle de 90° des valeurs périphériques de la matrice. On pourrait compléter la gamme avec des rotations à 45° ou avec des permutations entre les lignes ou entre les colonnes.

    Voici un comparatif de quelques noyaux :

    Sobel Ouest->Est 3x3 Prewitt Ouest->Est 3x3 Kirsch Ouest->Est 3x3
    -1 0 1
    -2 0 2
    -1 0 1
    -1 0 1
    -1 0 1
    -1 0 1
    -3 0 5
    -3 0 5
    -3 0 5
    Roberts Ouest->Est 3x3 croix Ouest->Est 3x3 Frei-Chen Ouest->Est 3x3
    -1 1 0
    -1 0 1
    √2 0 √2
    -1 0 1
    √2 0 √2

    Les filtres directionnels sont regroupées dans le menu Images/Filtrer/Eclairement ... d'Aud'ACE.

  4. Simplification des noyaux

    Du fait que ces noyaux ont les caractéristiques de matrices, ceux-ci peuvent bénéficier éventuellement de simplifications permettant de réduire le nombre de calculs et le temps de traitement.

    1. Inversion

      Le filtre complémentaire du filtre invariant signalé au premier paragraphe peut s'écrire simplement :

      -1

      Il produit l'inversion des valeurs de l'image qui devient le négatif de l'original.

    2. Addition avec l'original

      Le filtre netteté 3x3 peut être utilisé tel quel. On peut aussi remarquer que la différence entre le filtre netteté 3x3 et le filtre laplacien 1 3x3 est une augmentation de 1 (9 au lieu de 8) sur le pixel central. Compte tenu de la remarque sur le noyau unité le filtre netteté 3x3 peut s'écrire simplement : netteté 3x3= laplacien 1 3x3+ original, ce qui signifie qu'il suffit d'additionner les deux images.

      De même le filtre accentuation 3x3 peut aussi être obtenu en faisant laplacien 1 3x3 + 8 * original = accentuation 3x3 / 8 (pour garder la dynamique initiale).

      La multiplication de l'original revient à diluer l'effet du filtre. Ces filtres sont donc fréquemment accompagnés d'un réglage permettant d'obtenir la force souhaitée.

    3. Séparation des filtres

      Les filtres gaussien 3x3, gaussien binomial, gaussien 5x5 (premier), moyen 3x3, laplacien Robinson 3x3 et le filtre de Sobel peuvent être séparés en deux filtres directionnels plus simples. Par exemple le filtre gaussien 3x3 peut être écrit :

      1 2 1
      x
      1
      2
      1
      =
      1 2 1
      2 4 2
      1 2 1

      Il faut alors exécuter un balayage horizontal avec l'un et un balayage vertical avec l'autre. Même si deux balayages sont nécessaires, au total ils nécessitent bien moins de calculs et diminuent les temps de traitement.

      Pour qu'un filtre soit séparable il faut et il suffit que les coefficients des lignes et des colonnes soient proportionnels, ce qui est le cas des filtres cités.

  5. Combinaisons de filtres (non exhaustif)

    Le filtre LoG (Laplacien of Gaussian) ou filtre de Marr, connu sous le nom de chapeau mexicain, combine un filtre gaussien et un filtre laplacien. Exemple : Application d'un filtre laplacien (noyau =3) à une image ayant préalablement été traitée par un filtre gaussien de sigma= 0.45.

    Le filtre DoG (Difference of Gaussian) effectue la différence entre deux filtres gaussiens de sigma différents. Exemple : Différence entre une image traitée avec un filtre gaussien (noyau =5, sigma 1) avec celle traitée par un filtre gaussien (noyau =7, sigma =1.6).

    Le filtre DoB (Difference of Boxes) fait la différence entre deux filtres moyens de tailles différentes du noyau. Exemple : Différence entre une image traitée avec un filtre moyen (noyau =4) avec celle traitée avec un filtre moyen (noyau=20).

    Les filtres ci-dessus font partie de la famille des filtres linéaires car ils remplacent une valeur par une combinaison des valeurs des pixels du noyau.

  6. Autres filtres

    Le filtre moyen remplace la valeur du pixel central du noyau par la valeur moyenne des valeurs (cf. Images/Filtrer/Filtre moyen ...). Une fonction telle que Images/Filtrer/Filtre médian ... remplace la valeur du pixel central par la médiane des valeurs du noyau choisi. Ce noyau n'est pas configurable comme celui d'un noyau de filtre linéaire car il n'est pas possible de déterminer à l'avance quelle sera la position du pixel porteur de cette valeur. Il en va de même pour les fonctions Images/Filtrer/Filtre minimum ... et Images/Filtrer/Filtre maximum .... Les filtres de Harris, Kuwahara, Symetric Nearest Neighbor et Déparasitage ont un mode d'action analogue.

    Il en existe encore d'autres qui agissent différemment mais qui ne relèvent pas d'une convolution spatiale (cf. Images/Filtrer/Gradient rotationnel ... et Images/Filtrer/Filtre radial ...).

  7. Déconvolution

    La déconvolution est l'action inverse de la convolution et vise à restaurer une image. Ce n'est pas une action simple dès lors que le filtre appliqué est inconnu, ce qui est le cas le plus fréquent.

3. Editeur de noyaux

Cette application permet de construire des filtres personnels de taille 1 x n (une seule ligne), n x n ou n x 1 (une seule colonne), avec n au maximum égal à 9.

  1. Interface

    L'éditeur comprend (de haut en bas) :


  2. Gestion des images de convolution


  3. Bon à savoir

4. Mise en œuvre d'un filtre

La fonction Images/Convoluer/Convolution permet d'appliquer un filtre sur une image FITS non-RGB (Image d'entrée n° 1). Le non du filtre doit être saisi dans la fenêtre Image d'entrée n° 2.

Il est aussi possible d'utiliser l'interface très simple Images/Convoluer/Convolution spatiale qui peut prendre en charge une image FITS ou non, RGB ou non, affichée dans la visu. Selon la nature de l'image soumise au filtre, le script convertit les images non-FITS en FITS, décompose les images RGB en plans couleurs, applique le filtre à chaque plan puis recompose l'image RGB et, enfin, reconvertit l'image au format de l'image à traiter.

L'interface comporte un sélecteur de filtres qui pointe vers le répertoire des filtres ainsi qu'une option Préserver la dynamique et les commandes habituelles.

Le nom de l'image produite est le nom de l'image originale précédée du nom du filtre. Elle est enregistrée dans le répertoire des images et affichée dans la visu.

5. Quelques références