• 10 heures
  • Moyenne

Ce cours est visible gratuitement en ligne.

course.header.alt.is_video

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 17/12/2019

Analysez le filtrage spatial et la convolution par masque

Connectez-vous ou inscrivez-vous gratuitement pour bénéficier de toutes les fonctionnalités de ce cours !

Filtrage spatial et masques de convolution

Principe du filtrage spatial

Le filtrage spatial correspond à des opérations permettant de modifier chaque pixel de l'image en fonction des valeurs des pixels de son voisinage.

Un filtre spatial est donc défini par :

  • Le support du filtre : taille et forme du voisinage considéré : c'est souvent un carré de taille impaire (3x3, 5x5, 7x7, ...) mais cela peut être une croix, un disque, etc. ;

  • La position du pixel central dans le support ;

  • L'algorithme utilisé pour le calcul de la valeur de sortie à partir des valeurs du voisinage.

Principe du filtrage spatial
Principe du filtrage spatial

Filtrage spatial convolutif

Nous avons vu dans un précédent chapitre le théorème de convolution.

 im1im2IM1×IM2

c'est-à-dire que le produit de convolution de deux images a pour transformée de Fourier le produit de leurs transformées de Fourier.

On peut appliquer cette propriété dans le cas du filtrage. Ainsi,

  im(x,y)h(x,y)IM(u,v)×H(u,v)

Cela signifie que le filtrage en fréquence vu au chapitre précédent peut aussi se réaliser par une opération de convolution sur l'image, où :

  • h(x,y) est la réponse impulsionnelle du filtre ;

  • H(u,v) est la fonction de transfert du filtre ;

  • avec hH ;

  • h est la TFD1 de H

On parle alors de filtrage spatial convolutif.

Masque de convolution

En traitement d'image, le filtrage spatial convolutif est généralement défini par un masque de convolution.

On définit le masque de convolution associé au filtre h par :

 m(x,y)=h(x,y) .

L'opération de convolution de l'image im par h s'écrit alors :

~im(x,y)=im(x,y)h(x,y)=Ki=KKj=Kh(i,j) im(xi,yj)=Ki=KKj=Km(i,j) im(x+i,y+j)

K définit la taille du masque : le masque m est de taille 2K+1.

Pour obtenir la valeur du pixel (x,y) dans l'image filtrée ~im, on calcule donc la somme pondérée des pixels du voisinage, avec les poids donnés par les valeurs du masque m.

Par exemple :

  • Considérons le masque de taille 3×3 de la figure ci-dessous, contenant des coefficients de valeur m1 à m9 . La couleur rouge indique le pixel central  :

    Masque de convolution 3x3
    Masque de convolution 3x3
  • et le voisinage 3×3 du pixel (x,y) :

Voisinage 3x3 du pixel (x,y)
Voisinage 3x3 du pixel (x,y)

L'opération réalisée pour calculer la valeur du pixel (x,y) après filtrage sera alors :

 g(x,y)=m1×im(x1,y1)+m2×im(x1,y)+m3×im(x1,y+1)+m4×im(x,y1)+m5×im(x,y)+m6×im(x,y+1)+m7×im(x+1,y1)+m8×im(x+1,y)+m9×im(x+1,y+1)

Par exemple :

  • Pour obtenir comme résultat la somme des pixels voisins dans un voisinage 3x3, le masque à utiliser sera

Masque : somme du voisinage 3x3
Masque : somme du voisinage 3x3
  • Pour obtenir la moyenne des pixels voisins dans un voisinage 3x3, le masque à utiliser sera 

Masque : moyenne du voisinage 3x3
Masque : moyenne du voisinage 3x3

Algorithme : balayage de l'image par le masque de convolution

Intuitivement :

  • Le masque est superposé sur l'image, en le positionnant sur le voisinage du pixel courant ; 

  • Chaque coefficient du masque est multiplié avec le pixel qu'il recouvre, puis on additionne toutes les valeurs pour obtenir la valeur de sortie du pixel courant ;

  • Cette opération est répétée pour tous les pixels de l'image.

La programmation d'une opération de convolution s'effectue donc par un balayage pixel à pixel de toute l'image (deux boucles imbriquées) et pour chaque pixel, un balayage de chacun des coefficients du masque (deux boucles imbriquées) pour réaliser la somme pondérée. On a donc 4 boucles imbriquées.

Les figures ci-dessous illustrent le processus du balayage de l'image par le masque de convolution, avec un exemple de filtre simple (filtre somme).

Balayage de l'image par le masque de convolution : calcul de la valeur résultat pour le premier pixel à traiter
Balayage de l'image par le masque de convolution : calcul de la valeur résultat pour le premier pixel à traiter

Calcul de la valeur résultat pour le deuxième pixel à traiter
Calcul de la valeur résultat pour le deuxième pixel à traiter
Calcul de la valeur résultat pour le troisième pixel à traiter
Calcul de la valeur résultat pour le troisième pixel à traiter

Le balayage se poursuit ainsi ligne par ligne sur toute l'image.

Gestion des bords

On peut voir que pour les pixels du bord, le masque déborde de l'image. Les valeurs des pixels du bord sont donc indéfinies, comme l'illustre la figure ci-dessous :

Les valeurs résultat des pixels du bord sont indéfinies.
Les valeurs résultat des pixels du bord sont indéfinies

Pour obtenir des valeurs plausibles, différentes solutions peuvent être adoptées :

  • Zero-padding : on suppose que les pixels en dehors de l'image sont de valeur nulle ;

  • Duplication : on duplique les premières et dernières lignes et colonnes au delà des bords ;

  • Miroir : on duplique l'image en miroir au-delà des bords.

Filtre normalisé

Un filtre est dit normalisé lorsque la  somme des coefficients du masque  est égale à 1 :

Ki=KKj=Km(i,j)=1

L'intérêt des filtres normalisés est la conservation de la luminance globale de l’image.

Inversement, un filtre non normalisé éclaircit ou assombrit globalement l'image.

Filtre convolutif filtre linéaire

Important : l'opération de filtrage par convolution est une somme pondérée, et donc c'est une opération linéaire : les valeurs des pixels de l'image filtrée sont des combinaisons linéaires des valeurs des pixels de l'image d'origine. C'est pourquoi les filtres réalisés par convolution sont appelés filtres linéaires.

Filtre convolutif / filtre fréquentiel

Pour connaître l'impact d'un filtre de convolution sur les fréquences de l'image, il suffit de calculer la TF2D de sa réponse impulsionnelle h (obtenue par retournement du masque m), afin de calculer sa fonction de transfert H(u,v). L'allure de H détermine si le filtre est passe-bas, passe-haut, passe-bande, etc.

Lissage et débruitage d'image : filtres passe-bas, médian, bilatéral

Pour réaliser le lissage d'une image, plusieurs filtres spatiaux sont disponibles :

  • des filtres linéaires de convolution passe-bas, qui vont supprimer les hautes fréquences de l'image, comme leurs équivalents fréquentiels. Les principaux filtres de convolution passe-bas sont le filtre moyenneur et le filtre gaussien.

  • des filtres non linéaires et qui ne sont donc pas définis par un masque de convolution. On verra dans cette section le filtre médian et le filtre bilatéral qui sont des filtres non linéaires. Vous verrez, dans la prochaine partie, les filtres morphologiques qui sont très utiles pour le débruitage des images, et qui sont aussi des filtres non linéaires.

Filtre moyenneur

Exemples de masque de convolution pour le filtre moyenneur :

Filre moyenneur 3x3
Filtre moyenneur 3x3
Filtre moyenneur 5x5
Filtre moyenneur 5x5

Illustration sur une image couleur : le filtre a été appliqué sur chaque composante couleur R-G-B de l'image d'origine, puis les 3 composantes R-G-B filtrées ont été combinées pour former l'image résultat filtrée.

Exemple : filtre moyenneur (image : Annick Leroy)
Exemple : filtre moyenneur (image : Annick Leroy)

On retrouve l'effet du filtrage passe-bas : un lissage global de l'image, avec floutage des contours, suppression des détails et lissage des textures.

Filtre gaussien

L'équivalent du filtre gaussien fréquentiel est le filtre gaussien spatial, dont le masque correspond à une gaussienne discrétisée.

Des filtres gaussiens de différents écarts types produisent des masques de convolution de différentes tailles. Le masque du filtre gaussien normalisé 3x3 est donné ci-dessous.

Masque filtre gaussien 3x3
Masque filtre gaussien 3x3
Masque gaussien 5x5
Masque filtre gaussien 5x5
Exemple : filtre gaussien (image : Annick Leroy)
Exemple : filtre gaussien (image : Annick Leroy)

Comparaison des filtres moyenneur et gaussien

Le filtre gaussien favorise le centre du voisinage, avec des coefficients plus grands au centre du masque qu'en périphérie. Il permet ainsi de réaliser un lissage/débruitage de l'image, avec une meilleure conservation des contours que le filtre moyenneur.

Ceci est illustré sur la figure ci-dessous.

Comparaison des filtres moyenneur et gaussien (image : Annick Leroy)
Comparaison des filtres moyenneur et gaussien (image : Annick Leroy)

Filtre médian

Définition

Comme son nom l'indique, le filtre médian calcule une médiane : pour chaque pixel, sa valeur après filtrage est la médiane des valeurs de son voisinage.

Rappel : la médiane d'un ensemble de valeurs est la valeur telle que 50 % des valeurs lui sont inférieures et 50 % des valeurs lui sont supérieures.

Le calcul de la médiane demande donc de trier les valeurs puis de prendre celle de rang (N+1)/2

Voici un exemple pour un filtre médian 3x3 :

Example de calcul de la médiane pour un filtre médian 3x3
Exemple de calcul de la médiane pour un filtre médian 3x3

Comme les filtres passe-bas, le filtre médian permet de lisser l'image, mais il conserve mieux la netteté des contours. La figure ci-dessous illustre cette différence :

Effet des filtres moyenneur et médian sur les contours
Effet des filtres moyenneur et médian sur les contours

La figure ci-dessous illustre ces différences sur une image réelle. On peut voir, en particulier sur le détail zoomé, que les filtres médian et moyenneur ont un effet de lissage similaire dans la zone texturée. Par contre, les contours restent beaucoup plus nets avec le filtre médian.

Comparaison des filtres médian et moyenneur (image : Annick Leroy)
Comparaison des filtres médian et moyenneur (image : Annick Leroy)

Le filtre médian est particulièrement efficace pour supprimer le bruit impulsionnel, c'est-à-dire les pixels isolés de valeur très différente des valeurs voisines.

Ceci est illustré sur la figure ci-dessous. En fait, un filtre linéaire tel que le filtre moyenneur ne peut pas supprimer le bruit, car il conserve l'énergie globale de l'image :  le filtre moyenneur étale le bruit sur les pixels voisins. Au contraire, le filtre médian supprime le bruit, dès que les valeurs du bruit sont minoritaires sur le voisinage.

Effet de filtres moyenneur et médian sur un bruit impulsionnel
Effet de filtres moyenneur et médian sur un bruit impulsionnel

Un exemple comparatif est donné sur la figure ci-dessous.

Traitement du bruit impulsionnel : comparaison du filtre moyenneur et du filtre médian
Traitement du bruit impulsionnel : comparaison du filtre moyenneur et du filtre médian 

Filtre bilatéral

Le filtre bilatéral est très efficace pour le lissage avec conservation des contours.

L'idée est de lisser sans prendre en compte les pixels qui sont « de l'autre côté du contour ».

Pour cela, on utilise un masque de convolution b(i,j) avec une pondération supplémentaire, qui dépend du voisinage :

b(i,j)=m(i,j)×w(i,j)

  •  m(i,j) est un masque de convolution classique, typiquement un filtre passe-bas gaussien ;

  •  w(i,j) est une fonction de pondération de chaque pixel du voisinage, selon sa similarité avec le pixel central (x,y) . Les voisins (i,j) de couleur proche de la couleur du pixel central  (x,y) ont un fort poids. Typiquement, on utilise une fonction gaussienne pour la fonction de similarité  w(i,j) :

  • w(i,j)=e||im(i,j)im(x,y)||22σ

Ainsi le filtre bilatéral s'applique comme un masque de convolution (il ne fait intervenir que des sommes et des produits), mais avec un masque qui varie en chaque pixel de l'image à filtrer.

La figure ci-dessous illustre la forme que prend le masque pour différentes zones de l'image : uniforme, contour ou texture.

Principe du filtre bilatéral (source : Fredo Durand)
Principe du filtre bilatéral (source : Fredo Durand)

L'exemple ci-dessous illustre la possibilité pour le filtre bilatéral de lisser beaucoup, tout en conservant les contours très nets.

Exemple d'application du filtre bilatéral (source : Tomasi et Manduchi)
Exemple d'application du filtre bilatéral (source : Tomasi et Manduchi)

Accentuation du contraste et rehaussement des contours : filtre différence, filtre Min-Max

Pour l'accentuation  du contraste et le réhaussement des contours, il existe également différents types de filtres :

  • Les filtres linéaires passe-haut : on verra le filtre différence ;

  • Les filtres non linéaires : on verra le filtre min-max.

Filtre différence

Le filtre différence est un filtre linéaire permettant d'accentuer les contours et les contrastes dans l'image.

Le principe est le suivant :

  • Calculer la différence entre le pixel central et chacun de ses voisins ;

  • Ajouter la somme des différences au pixel central ;

  • Comme dans le filtrage en fréquence, un facteur multiplicatif peut être appliqué sur la somme pour un effet plus accentué.

Ainsi :

  • Si le pixel est globalement plus sombre que ses voisins, il sera assombri ;

  • Si le pixel est globalement plus clair que ses voisins, il sera éclairci.

Voici 3 exemples de filtres différence :

3 filtres différence : 3x3 , 3x3 avec facteur multiplicatif = 2, 5x5
3 filtres différence : 3x3 , 3x3 avec facteur multiplicatif = 2, 5x5

La figure ci-dessous illustre l'impact de la taille du voisinage (rayon) et du facteur multiplicatif (gain).

Filtre rehausseur : comparaison pour différents rayons et gains
Filtre rehausseur : comparaison pour différents rayons et gains

Filtre Min-Max

Le filtre Min-Max est basé sur le même principe de comparaison de la valeur du pixel avec son voisinage. Cependant, il utilise des tests et des calculs de min et max. C'est donc un filtre non linéaire.

L'algorithme de calcul est le suivant :

si im(x,y)>(MIN+MAX)/2

          alors imfiltrée(x,y)=MAX

          sinon imfiltrée(x,y)=MIN

MIN et MAX sont respectivement la valeur min et la valeur max sur le voisinage du pixel (x,y).

Ainsi les valeurs sombres par rapport à leur voisinage sont assombries et les valeurs claires par rapport à leur voisinage sont éclaircies. On obtient donc une accentuation des contrastes.

La figure ci-dessous donne un exemple d'application du filtre Min-Max et une comparaison avec le filtre différence.

Filtre Min-Max : comparaison avec le filtre différence
Filtre Min-Max : comparaison avec le filtre différence 

Conclusion

Comme en traitement du signal, le filtrage est un outil de base en traitement d'images.

On le retrouve par exemple dans les méthodes avancées de traitement d'image par apprentissage profond (Deep Learning  en anglais) qui sont utilisées typiquement pour des applications dans le domaine de l'intelligence artificielle, telles que la reconnaissance d'objets dans les images. En particulier, les réseaux de neurones convolutionnels s'appuient sur des filtres de convolution, appliqués sur l'image en très grand nombre et en cascade. En toute fin de ces cascades de filtres, on obtient la réponse à la question posée, par exemple  : « Quel est l'âge de cette personne ? » ou « Y a-t-il un ogre vert et un âne gris dans cette image ? ».

Exemple de certificat de réussite
Exemple de certificat de réussite