32
Notions de traitement et d'analyse d'image Dans tout ce qui suit, pour simplifier, on considérera, sauf mention contraire, des images matricielles initiales teintées avec 256 niveaux de nuances de gris (0 = noir à 255 = blanc). Pour des niveaux plus nombreux, les algorithmes devront être adaptés, mais sans difficulté majeure. 1 - Affichage d'images Etant en possession d'une image codée sur 256 niveaux de gris, on désire afficher cette image à l'aide d'un périphérique ne permettant pas d'afficher autant de niveaux de gris, mais moins: N niveaux ( N<256). Cela peut être le cas lorsqu'on est en possession d'une image très élaborée et que le dispositif d'affichage utilisé est peu performant. Plusieurs algorithmes permettent cet affichage. 1.1 - Correspondance simple On raisonnera sur le cas N = 4 ce qui signifie un affichage 4 niveaux ( notés 0, 1, 2, 3).La correspondance entre les 256 niveaux et les 4 niveaux d'affichage peut être établie simplement : on partage la plage 0-255 en 4 intervalles de même longueur : 0-63, 64- 127, 128-191, 192-255. Aux niveaux de couleur allant de 0 à 63 inclus, on fera correspondre le niveau 0 d'affichage; aux niveaux 64 à 127 inclus, on fera correspondre le niveau 1 d'affichage ; etc.... On désignera dans ce qui suit par I(x,y) le niveau du pixel (x,y). L'algorithme de correspondance 256 vers 4 couleurs indiqué ci-dessous est relativement simple : algorithme d'affichage 256 vers 4 niveaux : Pour chaque pixel (x,y) de niveau I(x,y) faire : Si (I(x,y)<64 alors afficher avec le niveau 0 sinon Si I(x,y)<128 alors afficher avec le niveau 1 sinon Si I(x,y)<92 alors afficher avec le niveau 2 sinon afficher avec le niveau 3 fin Si fin Si fin Si fin Pour 1.2 - Affichage par seuil aléatoire L'affichage précédent est assez brutal et ne tient pas compte de la densité des points allumés sur l'écran. Il est évident qu'une population importante de points de même niveau doit être discernée à l'affichage. La méthode du seuil aléatoire, basée sur un principe probabiliste, permet de répondre à cette attente. Examinons d'abord une représentation biniveau (N=2). On représente l'image avec 2 niveaux ( par exemple 0 = noir et 1 = blanc). Pour chaque point (x, y) on tire une valeur d'une variable aléatoire uniforme X ( entre 0 et 254) : si I(x,y) < X allumage du point ( x,y) : nouveau niveau =1 si I(x,y) > X extinction du point (x,y) : nouveau niveau =0

Chap5 : traitement d'images partie 1

Embed Size (px)

Citation preview

Page 1: Chap5 : traitement d'images partie 1

Notions de traitement et d'analyse d'image

Dans tout ce qui suit, pour simplifier, on considérera, sauf mention contraire, des images matricielles initiales teintées avec 256 niveaux de nuances de gris (0 = noir à 255 = blanc). Pour des niveaux plus nombreux, les algorithmes devront être adaptés, mais sans difficulté majeure.

1 - Affichage d'images

Etant en possession d'une image codée sur 256 niveaux de gris, on désire afficher cette image à l'aide d'un périphérique ne permettant pas d'afficher autant de niveaux de gris, mais moins: N niveaux ( N<256). Cela peut être le cas lorsqu'on est en possession d'une image très élaborée et que le dispositif d'affichage utilisé est peu performant. Plusieurs algorithmes permettent cet affichage.

1.1 - Correspondance simple

On raisonnera sur le cas N = 4 ce qui signifie un affichage 4 niveaux ( notés 0, 1, 2, 3).La correspondance entre les 256 niveaux et les 4 niveaux d'affichage peut être établie simplement : on partage la plage 0-255 en 4 intervalles de même longueur : 0-63, 64-127, 128-191, 192-255. Aux niveaux de couleur allant de 0 à 63 inclus, on fera correspondre le niveau 0 d'affichage; aux niveaux 64 à 127 inclus, on fera correspondre le niveau 1 d'affichage ; etc.... On désignera dans ce qui suit par I(x,y) le niveau du pixel (x,y). L'algorithme de correspondance 256 vers 4 couleurs indiqué ci-dessous est relativement simple :

algorithme d'affichage 256 vers 4 niveaux :

Pour chaque pixel (x,y) de niveau I(x,y) faire : Si (I(x,y)<64 alors afficher avec le niveau 0 sinon Si I(x,y)<128 alors afficher avec le niveau 1 sinon Si I(x,y)<92 alors afficher avec le niveau 2 sinon afficher avec le niveau 3 fin Si fin Si fin Si fin Pour

1.2 - Affichage par seuil aléatoire

L'affichage précédent est assez brutal et ne tient pas compte de la densité des points allumés sur l'écran. Il est évident qu'une population importante de points de même niveau doit être discernée à l'affichage. La méthode du seuil aléatoire, basée sur un principe probabiliste, permet de répondre à cette attente.

Examinons d'abord une représentation biniveau (N=2). On représente l'image avec 2 niveaux ( par exemple 0 = noir et 1 = blanc). Pour chaque point (x, y) on tire une valeur d'une variable aléatoire uniforme X ( entre 0 et 254) :

● si I(x,y) < X allumage du point ( x,y) : nouveau niveau =1● si I(x,y) > X extinction du point (x,y) : nouveau niveau =0

Page 2: Chap5 : traitement d'images partie 1

L'algorithme est donné ci-dessous :

algorithme du seuil aléatoire (2 niveaux)

Pour chaque pixel (x,y) de niveau I(x,y) Faire : Générer un seuil aléatoire S entre 0 et 254 Si I(x,y)>S alors allumer le pixel fin Sifin Pour

Statistiquement, pour une population de P pixels de niveau de couleur I0, on aura autant de seuils supérieurs à I0 que de seuils

inférieurs à I0 : on verra donc au moins la moitié des points de la population.

Passons maintenant à une représentation sur 4 niveaux (N=4). On divise la plage 0 - 255 en trois zones. Les niveaux accessibles à l'affichage sont notées 0, 1, 2, 3. Dans la première zone, on applique l'algorithme pour une représentation biniveau avec les couleurs 0 et 1: allumer signifie couleur 1 et éteindre signifie couleur 0. Dans la deuxième zone, on applique l'algorithme pour une représentation biniveau avec les couleurs 1 et 2 : allumer signifie couleur 2 et éteindre signifie couleur 1. Et ainsi de suite... L'algorithme correspondant est donné c-dessous :

algorithme du seuil aléatoire (4 niveaux) :

Pour chaque pixel (x,y) de niveau I(x,y) Faire : Si I(x,y)<85 alors Générer un seuil aléatoire S entre 0 et 84 si I(x,y)>S alors Afficher avec niveau 1 sinon Afficher avec niveau 0 fin Si sinon si I(x,y)<170 alors Générer un seuil aléatoire S compris entre 85 et 169 si I(x,y)>S alors afficher avec niveau 2 sinon Afficher avec niveau 1 fin Si sinon Générer un seuil aléatoire S compris entre 170 et 254 si I(x,y)>S alors Afficher avec niveau 3 sinon Afficher avec niveau 2 fin Si fin Si fin Sifin Pour

1.3 - Affichage par matrices de seuil

Rappelons que les matrices de seuil sont définies par les relation suivantes :

Page 3: Chap5 : traitement d'images partie 1

Etant donné le choix d'une matrice de seuil D(2n) ( on verra plus loin comment la choisir), la méthode d'affichage est la suivante : Soit un pixel (x,y) ; on calcule x0 = x mod 2n , y0 = y mod 2n où a mod b exprime le reste de la division entière de a par b; x0 et y0 sont donc compris entre 0 et 2n-1. Dans la matrice de seuil, on prend alors le seuil S = Dx0y0(2n). Si I(x,y) > S : allumage du pixel dans un niveau déterminé, sinon allumage dans un autre niveau également déterminé comme dans le cas de la méthode du seuil aléatoire. Appliquons la méthode au cas N=4: on divise la plage 0-255 en trois zones de 85 couleurs chacune. La matrice de seuil D(8) possède 64 seuils ; D(10) en possède 100. On choisira donc D(8) et on normalisera par le facteur 63/84 = 3/4 = 0,75. Pour chacune des trois zones, on normalise l'intensité lumineuse par le formules suivantes :

● zone 1 : P = 0,75 * I(x,y)● zone 2 : P = 0,75*[I(x,y) - 85]● zone 3 : P = 0,75*[I(x,y) - 170]

L'algorithme est alors assez similaire à celui de la méthode des seuils aléatoires ) :

algorithme pour matrice de seuil (4 niveaux) : Pour chaque pixel (x,y) de niveau I(x,y) Faire : x0=x mod 8 y0=y mod 8 S=Dx0y0(8) Si I(x,y)<85 alors P=0,75*I(x,y) Si P<S alors Afficher avec niveau 1 sinon Afficher avec niveau 0 fin Si sinon si I(x,y)<170 alors P=0,75*(I(x,y)-85) si P>S alors afficher avec niveau 2 sinon afficher avec niveau 1 fin Si sinon P=0,75*(I(x,y)-170) si P>S alors afficher avec niveau 3 sinon afficher avec niveau 2 fin Si fin Si fin Si fin Pour

2 - Outils élémentaires d'analyse d'image

2.1 - Histogramme

Soit une image comportant n lignes et p colonnes, donc n.p pixels. Chacun de ces pixels est codé sur q bits ( si q = 8, on a 256 niveaux). On peut effectuer une statistique sur les niveaux en comptant, pour chaque niveau, combien de pixels possèdent cette niveau. La représentation graphique de cette statistique est un histogramme par niveau .

Si l'image comporte beaucoup de niveaux différents, l'histogramme a tendance à se présenter sous forme d'une courbe; sinon,

Page 4: Chap5 : traitement d'images partie 1

l'histogramme comporte des "bâtons". On peut interpréter cet histogramme en termes de probabilités : si fi est la fréquence d'apparition du niveau i, la probabilité d'apparition de ce niveau dans l'image est donnée par pi = fi / n.p .

L'histogramme permet d'obtenir des renseignements rapides sur une image.

On peut notamment faire la distinction entre une image trop foncée (niveaux en majorité près de 0) et une image trop claire (niveaux en majorité près de 255) comme indiqué ci-contre :

On peut aussi faire la différence entre le fond de l'image (arrière plan) et les objets intéressants de l'image (premier plan).

2.2 - Profil

Un profil est tout simplement une représentation de la variation du niveau I(x,y) des pixels le long d'une ligne ou d'une colonne donnée.

2.3 - Recherche de niveau

Cette opération consiste à afficher tous les pixels qui ont même niveau qu'un pixel donné. Ce procédé permet de mettre en évidence des détails de même nature sur une image.

2.4 - Information contenue dans une image

Etant donné une image codée sur N niveaux de couleur, on appelle quantité d'information apportée par un niveau donné la grandeur suivante :

Qi = - log2(pi)

où pi est la probabilité d'apparition du niveau i . Puisque la probabilité pi est comprise entre 0 et 1, il s'ensuit que la quantité d'information Qi varie de 0 à l'infini:

Page 5: Chap5 : traitement d'images partie 1

On notera que plus le niveau est rare ( pi faible), plus la quantité d'information est grande; en revanche, un niveau omniprésent apporte peu d'information.

Dans la pratique, la probabilité pi est approchée par un comptage statistique, ce qui conduit évidemment à des approximations de la quantité d'information. On peut, sur une image, calculer la quantité d'information moyenne en effectuant une moyenne arithmétique pondérée des quantités d'information apportées par chaque niveau ( avec des coefficients pi ). Le résultat est appelé l'entropie (en fait entropie au premier ordre car la corrélation entre les pixels n'est pas prise ici en compte) de l'image :

La figure ci-dessous explicite le calcul de l'entropie pour une image 16 niveaux dont on connaît l'histogramme.

3 - Traitements de base

Les traitements de base ou prétraitements consistent à améliorer l'image pour une application spécifique. Cette amélioration peut consister à restaurer une image dégradée : on parle alors de restauration d'image, ce qui s'effectue généralement en deux temps :

● 1ère phase : modélisation de la dégradation● 2ème phase : application de la modélisation inverse

Elle peut également consister à donner d'une image initiale une image plus nette ou plus trouble : on parle alors de filtrage ou de bruitage quoique cette notion peut faire référence à des techniques très diverses. On ne s'intéressera ici qu'à cet aspect des traitements de base.

Travailler l'image directement au niveau des pixels s'appelle travailler dans le domaine spatial. Si au contraire, on travaille non pas l'image, mais sa transformée de Fourier ( voir plus loin), on travaille dans le domaine fréquentiel.

Dans ce chapitre, on notera, comme précédemment, par I(x,y) le niveau de gris du point (x,y). On pourra considérer que les valeurs de I(x,y) vont de 0 ( noir) à N-1 (blanc) . On distinguera trois types de traitements de base : méthodes basées sur l'examen de

Page 6: Chap5 : traitement d'images partie 1

l'histogramme, filtrage dans le domaine spatial, filtrage dans le domaine fréquentiel .

3.1 - Transformations d'histogramme

Table de conversion

Encore appelée LUT ( Look Up Table), une table de conversion est une table qui à tout niveau ( de 0 à 255) fait correspondre un autre niveau ( dans la plage 0-255). Il s'agit donc d'une transformation de niveaux :

j = Transfo(i)

Voici deux exemples triviaux de LUT ):

application 1 : recadrage de dynamique. Pour des images trop claires ou trop foncées, ou encore d'images dont les pixels ont des niveaux distribués sur une plage étroite, il s'agit de redistribuer les niveaux sur l'ensemble de la plage 0-255 .

application 2 : mise en évidence de zones de l'histogramme par binarisation.

Tous les pixels ayant des niveaux de gris situés entre a et b seront de niveau Nmax, tous les autres seront de niveau 0 :

Page 7: Chap5 : traitement d'images partie 1

exemple 1 : soit l'image I1 ; on désire mettre en blanc (255) les points dont la nuance de gris est comprise entre 0 et 127 et en noir (0) les points dont la nuance de gris est comprise entre 128 et 255. On obtient l'image I2 avec le LUT ci-dessous. On pourra faire cet exercice avec l'outil à télécharger (partie TP).

I1 I2

exemple 2 : L'image I1 montre des traces grises. On peut les supprimer à l'aide d'une LUT (les nuances de gris pâle sont remplacées par du blanc). On pourra faire cet exercice en utilisant l'outil téléchargeable en TP.

I1 I2

Page 8: Chap5 : traitement d'images partie 1

Modification de la forme de l'histogramme ; égalisation

Il s'agit d'un recadrage d'image vers une forme prédéterminée de l'histogramme. Si la forme est une distribution uniforme( ce qui est fréquemment le cas) il s'agit d'une égalisation d'histogramme. Le but est, à partir d'une image initiale, de fabriquer une nouvelle image dans laquelle tous les niveaux auront la même fréquence de manière exacte ou approchée. Dans le premier cas, on dira que l'histogramme de la nouvelle image est "plat"; dans le second cas, on dira qu'il est égalisé.

a) Histogramme plat

On raisonnera sur un exemple simple. Supposons que l'on ait une image I1 de 8 lignes et 16 colonnes. Pour simplifier encore, on supposera ici que l'on ne dispose que de 8 niveaux de gris. La population moyenne de chaque niveau est donc : p0 = 8x16/8 = 16 pixels . L'histogramme de l'image I1 est supposé être celui de la figure ci-dessous :

Pour obtenir l'histogramme plat, il faut remplir chaque couleur de 0 à 7 avec 16 pixels. Il faut donc opérer une redistribution :

● ancien niveau 0 : identique● ancien niveau 1 : 7 pixels prennent le niveau 0● ancien niveau 2 : 8 pixels prennent le niveau 0, 13 pixels le niveau 1● ancien niveau 3 : 3 pixels prennent le niveau 1, 16 pixels le niveau 2, le reste inchangé● ancien niveau 4 : 16 pixels restent de niveau 4, 16 pixels prennent le niveau 5, 3 pixels le niveau 6● ancien niveau 5 : 13 pixels prennent le niveau 6, 8 pixels le niveau 7 ● ancien niveau 6 : les 7 pixels prennent le niveau 7● ancien niveau 7 : identique

En modifiant les pixels dans l'ordre de lecture gauche-droite, haut-bas, de l'image, on obtient l'image I2 dont l'histogramme est présenté ci-dessous :.

b) Histogramme égalisé

Dans la méthode précédente, il y a un arbitraire : le choix des pixels qui changent de niveau. Il est évidemment plus intéressant de ne pas faire de distinction entre les pixels de même niveau et de changer ce niveau globalement. On procède alors par réduction du nombre de niveaux : on remplace plusieurs niveaux par un seul. Soit donc Nr le nombre de niveaux de regroupement ( Nr < N).On choisira Nr = 4 pour cet exemple. L'histogramme est alors séparé en bandes de largeur N/Nr. Le nombre moyen de pixels par bande est n.p/Nr soit ici 128/4 = 32.

On répartit alors les pixels de la manière suivante :

● pixels de niveaux 0, 1, 2 ----------> 29 pixels de niveau 0● pixels de niveau 3 -----------------> 35 pixels de niveau 1● pixels de niveau 4 -----------------> 35 pixels de niveau 2● pixels de niveaux 5, 6, 7 ----------> 29 pixels de niveau 3

On obtient ainsi l'image I3 dont l'histogramme est présenté ci-dessous :.

Page 9: Chap5 : traitement d'images partie 1

Le choix de Nr est généralement fait par dichotomie : on divise N par 2, puis encore par 2 le cas échéant et ainsi de suite.

L'algorithme employé peut être formalisé comme indiqué ci-dessous :

algorithme d'égalisation d'histogramme :

moyenne = nombre de pixels / N bande= Nr/N centre=bande/2 idébut=0 ifin=0 Tant Que ifin<Nr faire : cumul=0 Tant Que (cumul non proche de moyenne) et (ifin<Nr) faire : cumul=cumul+histogramme(ifin) incrémenter ifin Fin Tant Que Pour i=idébut à ifin-1 faire : Transfo(i)=centre fin Pour idébut=ifin centre=centre+bande fin Tant Que Pour tous les points faire : I(i,j)=Transfo(I(i,j)) fin Pour

3.2 - Soustraction et moyenne d'images

La soustraction d'images est utilisée dans certaines applications pour mettre en évidence certains détails caractéristiques. Ainsi, en radiographie, on peut être intéressé à mettre en évidence certains organes par utilisation de matière colorante: on effectue une prise d'image aux rayons X d'un sujet : I1(x,y), puis après injection de matière colorante, on prend des images TV du même sujet : I2(x,y). On effectue alors la différence g(x,y) = I1(x,y) - I2(x,y) qui permet de donner une visualisation "dynamique" des détails intéressants.

Dans un autre ordre d'idée, on peut effectuer des sommations d'images. Considérons une image I(x,y) entachée d'un bruit b(x,y). Le résultat est une image bruitée g(x,y) = I(x,y) +b(x,y). Imaginons alors que l'on prenne M images du même sujet. Pour chaque image de numéro k, on aura gk(x,y) = I(x,y) + bk (x,y). La valeur moyenne(notée ici <...>) des résultats est

On peut recommencer l'opération un certain nombre de fois et considérer la distribution statistique des valeurs <g(x,y)> obtenues. Elle est caractérisée par son espérance mathématique <<g>> et son écart-type s(<g>). En considérant légitimement que le bruit a une valeur moyenne nulle, on obtient les résultats simples suivants :

Ces résultats indiquent que la moyenne des images bruitées gk(x,y) tend vers l'image "propre" I(x,y) quand M est assez grand.

3.3 - Filtrage dans le domaine spatial

Page 10: Chap5 : traitement d'images partie 1

On distingue 2 classes de filtres : les filtres linéaires et les filtres non-linéaires suivant que l'opérateur appliqué est linéaire ou non.

Filtrage linéaire

Parmi les filtres linéaires, 3 catégories de filtres sont envisagées qui se distinguent par des propriétés dans le domaine fréquentiel; nous verrons donc plus loin la raison des appellations utilisées :

● filtres "passe-bas" : ils sont utilisés pour atténuer les détails de l'image qui "tranchent" nettement avec le reste de l'image : bords, caractéristiques particulières notamment. Le résultat de l'application d'un filtre "passe-bas" sera une image "brouillée" ou "trouble".

● filtres "passe-haut" : contrairement aux précédents, ils sont utilisés pour atténuer les caractéristiques "neutres" et mettre en évidence les détails qui "tranchent".

● filtres "passe-bande" : ils ont peu d'intérêt pour le rehaussement d'image, mais par contre ils sont utilisés dans le cas de la restauration d'image.

Le principe du filtrage linéaire est de remplacer le niveau d'un pixel par une combinaison linéaire des niveaux des pixels environnants. Cette combinaison linéaire est usuellement représentée par un masque.

Considérons par exemple un pixel (x, y) de l'image de niveau I(x,y). On peut remplacer la couleur de ce pixel par une combinaison linéaire des couleurs de tous les points immédiatement voisins ( y compris lui-même) :

g(x,y) = 1/9 [ I(x-1,y-1) + I(x-1,y) + I(x-1,y+1) + I(x,y-1) + I(x,y)+I(x,y+1) + I(x+1,y-1) + I(x+1,y) + I(x+1,y+1) ]

ou encore :

où le masque h1 est défini par la matrice

On peut généraliser le procédé : pour un filtre hp de taille (2n+1)x(2n+1) :

Les matrices ci-dessous donnent des exemples de filtres linéaires où le pixel central est doté d'un poids plus important que les pixels périphériques :

Les coefficients de tous ces filtres sont positifs; ils contribuent à "adoucir" l'image en remplaçant le niveau de chaque pixel par une moyenne arithmétique pondérée des niveaux des pixels voisins. Il s'agit de filtres "passe-bas". On peut imaginer des filtres linéaires dont les masques présentent des coefficients positifs au centre et des coefficients négatifs pour les pixels voisins. Il s'agit alors de filtres "durcissants" qui mettront en valeur des détails qui "tranchent", donc de filtres "passe-haut". Ainsi sera le

Page 11: Chap5 : traitement d'images partie 1

filtre dont le masque est défini ci-dessous :

Pour "durcir" l'image, on peut aussi utiliser des méthodes plus élaborées; par exemple, on peut d'abord utiliser un filtre "passe-bas" ce qui conduit à une image gb(x,y), puis effectuer la soustraction de l'image gb (x,y) de l'image originale I(x,y).

On obtient alors une image filtrée en "passe-haut",gh (x,y) = I(x,y) - gb (x,y). On peut aussi utiliser le filtrage "high boost" en multipliant, dans l'expression précédente, l'image originale I(x,y) par un coefficient d'amplification A :

ghb (x,y) = A.I(x,y) - gb (x,y) = (A-1).I(x,y) + I(x,y) - gb (x,y) = (A-1).I(x,y) + gh (x,y)

Une autre manière de "durcir" l'image est d'utiliser des filtres dérivatifs; ils sont surtout utilisés pour la détection de contour; nous les verrons plus loin.

Produit de convolution

L'opération de filtrage linéaire précédente n'est autre que l'application d'un produit de convolution. Dans le cas discret, un produit de convolution se définit par :

Il s'agit, en fait, de la "composition" de deux images : l'image initiale et le masque.

Dans l'opération de filtrage se pose évidemment le problème des pixels qui sont à la bordure de l'image ( le masque "dépasse à l'extérieur"). On adopte alors, au choix, plusieurs stratégies, dont certaines sont résumées ci-dessous :

● On peut tout d'abord " réduire " l'image : si le masque est de dimension (2n+1)(2n+1), on enlève de l'image finale la bordure de largeur n .

● On peut également extrapoler par des zéros les pixels extérieurs à l'image. Ces pixels reçoivent le niveau arbitraire 0.● On peut enfin extrapoler par un "miroir" : si le masque est de dimension (2n+1)(2n+1), on ajoute une bordure de largeur n

que l'on remplit en considérant que le bord de l'image initiale est un miroir.

Filtrage gaussien

a) courbe de Gauss

La fonction de Gauss

est très employée en statistique ( loi de Laplace-Gauss ou loi normale).

Sa courbe représentative est représentée à la figure ci-dessous :

Page 12: Chap5 : traitement d'images partie 1

.

Le paramètre σ est l'écart-type. Il donne une indication sur la dispersion de la courbe ( σ vaut 1 sur la figure ).

On démontre les résultats utiles suivants :

ce qui montre que l'on peut se restreindre à l'intervalle [-2σ, +2σ] ou [-3σ, +3σ].

b) masque gaussien

Dans le filtrage linéaire classique, on a pu remarquer que les éléments du masque sont des poids statistiques. On prendra ici comme poids statistiques la valeur de la fonction de Gauss "bi-dimensionnelle" :

mais en limitant x et y à la plage [-3 σ, +3 σ] puisque, pratiquement, les valeurs significatives sont dans cette plage. Si on prend une taille 2n + 1 = 5 (σ = 5/6), le masque est donc :

( la somme de tous les coefficients est très proche de 1).

Le filtrage gaussien consistera donc en la convolution :

soit

Pour chaque point, en admettant que les valeurs du masque soient préalablement calculées, il faut effectuer (2n + 1)2 multiplications et (2n + 1)2 -1 additions. Pour une image de 200x200 points, avec un masque de taille 5, il faut donc 1 000 000 multiplications et 960 000 additions ! On remarquera que le temps de calcul est approximativement proportionnel au carré de la taille du masque; on a donc intérêt à choisir une petite taille; toutefois, comme on va le montrer, un filtre gaussien est décomposable en filtres gaussiens de taille moindre.

Page 13: Chap5 : traitement d'images partie 1

Le masque peut s'écrire sous forme séparable :

On peut considérer que G1 correspond à un masque rectangulaire (2n + 1)x1 tandis que G2 correspond à un masque rectangulaire 1x(2n + 1). Le résultat peut donc s'exprimer par des convolutions successives :

g = G2 ⊗ G1 ⊗ I = G1 ⊗ G2 ⊗ I

3.4 - Transformée de Fourier

Cas continu

L'emploi de la transformée de Fourier est bénéfique lorsque l'on manipule des produits de convolution. Rappelons la définition usuelle de la transformée de Fourier d'une fonction f(x) :

où f(x) est une fonction continue. Si f(x) est intégrable et si F(u) est intégrable, la transformation inverse existe :

et on a bien évidemment

La fonction f(x) est réelle mais sa transformée de Fourier F(u) est généralement complexe et elle peut être représentée par sa partie réelle et sa partie imaginaire, ou bien par son module |F(u)| et son argument. Le module est appelé densité spectrale de f(x).

exemple1 :

Soit la fonction f(x) telle que f(x) = a pour 0<x<X et f(x) = 0 ailleurs.

Le calcul de la transformée de Fourier est très simple et conduit à :

exemple 2 :

Page 14: Chap5 : traitement d'images partie 1

Considérons maintenant la fonction de Gauss

.

Sa transformée de Fourier est :

ce qui montre que la transformée de Fourier d'une gaussienne est ( à un coefficient près) une gaussienne.

On peut également définir la transformée de Fourier d'une fonction de deux variables f(x,y) :

ainsi que son inverse :

exemple 3 : la transformée de Fourier de la fonction f(x,y) = a si x∈[0,X] et y∈ [0,Y] et f(x,y) =0 ailleurs est la fonction

La transformation de Fourier possède une propriété capitale qui en fait, d'ailleurs, l'intérêt ici : elle permet de manipuler simplement les produits de convolution. Dans le cas continu, un produit de convolution est défini par :

La transformée de Fourier d'un produit de convolution est le produit ordinaire des transformées de Fourier des facteurs du produit de convolution :

Nous ne démontrerons pas ici cette propriété.

Cas discret

Pour le traitement d'image, il nous faut considérer des fonctions discrètes qui s'appliquent aux pixels d'une image. Etant donné une fonction f prenant ses valeurs sur un ensemble de valeurs discrètes : 0, 1, 2, 3, ......,N-1, on définit la transformée de Fourier de cette fonction par :

Page 15: Chap5 : traitement d'images partie 1

La transformation inverse est définie par :

La définition s'étend au cas de deux dimensions :

On a supposé ici, par commodité, que le domaine de valeurs (x,y) est carré de dimension NxN (ce qui correspond à des images carrées).

La propriété fondamentale de la transformée de Fourier vaut toujours dans le cas discret : la transformée de Fourier d'un produit de convolution est le produit des transformées de Fourier. L'expression du produit de convolution discret a été donnée précédemment.

Transformée de Fourier rapide ( FFT)

Le calcul de la transformée de Fourier discrète à une dimension sur N points nécessite un grand nombre d'opérations numériques : pour chacune des N valeurs de u, il faut effectuer N multiplications complexes de f(x) par exp(-i2πxu/N) et N-1 additions des résultats (les termes exponentiels peuvent être considérés comme ayant été calculés une fois pour toutes et stockés dans une table). Le nombre d'opérations est proportionnel à N2. Pour N= 512, cela correspond à 262 144 opérations ! On peut montrer que l'on peut réduire le nombre d'opérations à Nlog2N (soit 4608 pour N = 512) en employant la méthode de calcul dite "Fast Fourier Transform".

L'idée de base est de poser N = 2M = 2n ( donc de considérer N comme une puissance de 2) et de séparer la sommation globale en deux termes :

avec

Alors, en vérifiant que ω2M2ux = ωM

ux et ω2M2ux+x =ωM ux ω2M

u on a F(u)=Fpair(u) + Fimpair(u) ω2M u

Comme ωMu+M = ωM

u et ω2Mu+M = -ω2M

u on a aussi F(u+M) = Fpair(u) - Fimpair(u) ω2Mu

Le calcul sur les points 0,1,2,.......N/2 - 1 donne Fpair(u) et Fimpair(u), donc F(u) ; pour les points N/2, N/2 + 1, N/2 +2,.......N-1, on utilise F(u+M).

On démontre alors que le nombre d'opérations est le suivant :

pour les multiplications (N/2)log2Npour les additions Nlog2N.

Le calcul effectif nécessite d'ordonner les termes f(xi) pour augmenter la rapidité; plusieurs algorithmes sont proposés dont celui de la "règle des bits inversés". Supposons que l'on calcule F(u) en huit points : {0,1,2,3,4,5,6,7}. La règle des bits inversés s'applique comme suit :

x déc. x bin. renv. nouv. x déc.

Page 16: Chap5 : traitement d'images partie 1

0 000 000 0

1 001 100 4

2 010 010 2

3 011 110 6

4 100 001 1

5 101 101 5

6 110 011 3

7 111 111 7

On renumérotera donc les points suivant l'ordre {0,4,2,6,1,5,3,7}.

L'algorithme FFT est donné ci-dessous :

algorithme FFT

fourniture du vecteur f(x) et de nN=2n

J=1//renumérotationPour I=1 à N-1 faire : Si I < J alors échanger f(J) et f(I) k=N/2 fin Si Tant que k < J faire : J=J-k k=k/2 fin Tant que J=J+kfin Pour//calculPour L=1 à n faire :

ω=exp(-iπ2L-1) u=i // i est le nombre imaginaire Pour J=1 à 2L-1 faire : Pour I=J à N par pas de 2L faire : v=I+2L-1

f(v)=f(I)-f(v)u f(I)=f(I)+f(v)u fin Pour

u=uω fin Pourfin Pour

3.5 - Filtrage dans le domaine fréquentiel

Le principe est simple et s'appuie sur le théorème fondamental de la transformée de Fourier :on applique le filtrage sur les transformées de Fourier de l'image et du masque, puis on utilise la transformation de Fourier inverse :

masque h --------> F [h] = H image I --------> F [I] = JH.J = F [h⊗I] ---------> image filtrée h⊗I = F -1[H.J]

a) filtres "passe-bas"

Ces filtres atténuent les hautes fréquences; le filtre idéal est donné par :

Page 17: Chap5 : traitement d'images partie 1

H(u,v) = 1 si r < R H(u,v) = 0 si r > R avec r2 = u2 + v2

Le filtre de Butterworth ,défini par

avec n, entier supérieur ou égal à 1, est du même type, mais moins brutal .

Un filtre gaussien appartient aussi à cette catégorie; comme la transformée de Fourier d'une gaussienne est une gaussienne, il n'y a rien de spécial à dire ici sauf la propriété intéressante suivante : un filtre gaussien peut être remplacé par une cascade de filtres gaussiens plus simples. Considérons, en effet, un ensemble de K filtres gaussiens :

Appliquons successivement ces filtres :

g = g1Ä g2Ä g3Ä........Ä gK

Il est alors facile de montrer en utilisant la propriété fondamentale de la transformée de Fourier d'un produit de convolution que

ce qui signifie qu'un filtre gaussien G peut s'interpréter comme une cascade de filtres élémentaires gi.

Si on choisit une taille (-3σ,+3σ) pour le masque du filtre gaussien g, on aura , en nombre de pixels, 2n + 1 = 6 σ ou n = 3 σ -1/2. Pour un masque de filtre gaussien élémentaire, on choisit une taille (-3σ0, +3σ0), d'où en nombre de pixels 2n0 + 1 = 6 σ0 ou n0 = 3 σ0 - 1/2. En supposant les filtres élémentaires identiques, on a s = σ0K1/2, donc n = 3 σ -1/2 = 3 σ0K1/2 - 1/2 = (n0 + 1/2)K1/2 - 1/2.

Par exemple si on applique 9 fois un filtre de taille 5 (K = 9, n0 = 2 ), l'opération équivaut à l'application d'un filtre de taille 9.

b) filtres "passe-haut"

Les filtres "passe-haut" atténuent les basses fréquences. Le filtre idéal est défini par :

Page 18: Chap5 : traitement d'images partie 1

H(u,v) = 0 si r < R H(u,v) = 1 si r > R avec r2= u2 + v2

Le filtre de Butterworth est moins brutal :

3.6 - Filtrage non linéaire

Le niveau d'un pixel de l'image filtrée est toujours fonction du niveau des pixels environnants, mais le calcul n'est plus basé sur de combinaisons linéaires. Prenons l'exemple le plus classique du filtre médian : les niveaux du pixel et de pixels environnants sont classés par ordre croissant d'importance; on prend pour niveau du pixel la médiane de cette série.

4 - Images binaires

La binarisation consiste à transformer une image à plusieurs niveaux en une image en noir et blanc ( deux niveaux seulement). C'est le moyen privilégié pour isoler des objets.

Par suite, une image binaire peut être représentée par une matrice booléenne dont chaque élément signifie Vrai (1 = blanc) ou Faux (0 = noir).

4.1 - Opérateurs morphologiques

Page 19: Chap5 : traitement d'images partie 1

Dilatation

Lorsqu'une image est bruitée, sa binarisation fait apparaître des points noirs ou des points blancs parasites et isolés dont il faut se débarrasser par des techniques : la dilatation et l'érosion.

La dilatation consiste à éliminer les points "noirs" isolés : on dilate les parties "blanches" ce qui "mange" les points "noirs". La méthode est le balayage de l'image par une fenêtre (2n+1)x(2n+1) avec utilisation du OU logique. On place le centre de la fenêtre sur le pixel courant et on effectue un OU logique sur les (2n +1)2 - 1 pixels environnants. Si le résultat est 1, le pixel est mis à 1; si le résultat est 0, le pixel est conservé.

Erosion

Il s'agit ici d'éliminer les points "blancs" isolés. La méthode est assez similaire à celle de la dilatation . On balaie l'image avec une fenêtre de taille (2n + 1). On place le centre de la fenêtre sur le pixel courant. On effectue un ET logique sur les pixels environnants. Si le résultat est 1, le pixel est conservé; si le résultat est 0, le pixel est mis à 0.

On pratique en général par succession d'érosion et de dilatation .

Squelettisation

L'objectif est ici de diminuer l'information redondante contenue dans une image, donc la quantité de données à analyser.

La méthode est l' isolement des lignes principales de l'image avec des amincissements successifs jusqu'à ce que l'image résultante ne contienne que des lignes d'épaisseur 1 pixel. La méthode nécessite l'emploi successif de 8 masques . On effectue sur l'image une succession de passes; on arrête lorsque le résultat entre deux passes successives est inchangé.

Une passe consiste en l'application successive, sur toute l'image de chacun des 8 masques ( le point central sur le point courant à traiter). Les 8 masques correspondent aux transformations suivantes : si la situation de gauche est rencontrée, alors on remplace le pixel traité par 0.

La figure ci-dessous présente le résultat d'une squelettisation :

Page 20: Chap5 : traitement d'images partie 1

5 - Segmentation

La segmentation consiste à découper l'image en régions. Il y a deux manières de caractériser une région : par contours et par homogénéité ( par exemple, même couleur).

5.1 - Extraction de contours

On définit un contour comme une brusque variation du niveau de couleur :

Un contour est un cas complexe de discontinuité. Pour détecter une discontinuité, on peut employer des masques linéaires qui après application en un point fournissent un résultat R. Pour un masque d'ordre 3, de forme générale

le résultat est

où zi est le niveau du pixel.

Pour la détection d'un point isolé, on peut employer un seuil S, la condition de détection étant r > S où r désigne la valeur absolue de R.

Pour la détection d'une ligne droite, on peut employer 4 masques :

Page 21: Chap5 : traitement d'images partie 1

La détection d'une ligne droite associée à un masque Ai est déduite de la condition ri > rj ∀j<i.

La détection d'une discontinuité quelconque est plus délicate; d'une manière générale, une discontinuité se manifeste par une variation de niveau, par le comportement de la dérivée première de I(x,y) ou de la dérivée seconde de I(x,y).

Le processus d'extraction de contours comporte plusieurs étapes :

● mise en évidence des contours : on procède par différenciation de l'image

● réduction des contours : obtention de lignes d'épaisseur 1 pixel.

● binarisation des contours● description des contours :

décomposition en éléments simples

On ne s'intéressera ici qu'aux deux premières étapes.

Opérateurs de différenciation

Plusieurs méthodes sont employées ; on passera en revue les principales :

a) méthode du gradient (dérivation première de l'image)

On définit, pour un pixel (x,y) le gradient par

Ax = I(x+1,y) - I(x,y) Ay= I(x,y+1) - I(x,y).

Le gradient peut aussi être caractérisé par son amplitude et sa direction :

● amplitude A0(x,y) = (Ax2 + Ay2)1/2,● direction D(x,y) = Arctan(Ay / Ax).

Pour obtenir le gradient, on convolue l'image avec des masques dans la logique des formules précédentes.

Page 22: Chap5 : traitement d'images partie 1

Roberts

Sobel

Prewitt

Les algorithmes de Prewitt et Sobel apportent une meilleure insensibilité au bruit.

b) méthode du laplacien (dérivation seconde de l'image)

Formellement, la définition du laplacien de la fonction I(x,y) est

Par discrétisation, on obtient la relation approchée ∆I = 4 I(x,y) - I(x,y+1) - I(x-1,y) - I(x+1,y) - I(x,y-1) ce qui conduit au masque :

La présence d'un contour est indiquée par le passage du laplacien par zéro. Toutefois, le laplacien est plus souvent utilisé pour reconnaître à quelle région appartient un pixel.

Réduction des contours

L'application des opérateurs de différenciation permet d'obtenir pour chaque point (x,y) de l'image l'amplitude du gradient A0(x, y) et sa direction. Il s'agit maintenant , pour déterminer avec précision le contour, de choisir les points pour lesquels A(x,y) est maximum. Pour cela, pour chaque point (x,y) (dont on possède l'amplitude et la direction du gradient), on recherche les points adjacents qui se trouvent dans la direction du gradient : (x1,y1) et (x2,y2).

On compare alors A0(x,y) à A0(x1,y1) et A0(x2, y2) : si A0(x,y) > A0(x1, y1) et A0(x,y) > A0(x2, y2) alors le niveau du point (x,y) est conservé, sinon il est mis à " 1 ".

5.2 - Segmentation en régions homogènes

Page 23: Chap5 : traitement d'images partie 1

Il s'agit de considérer une région comme un ensemble de points possédant la même propriété ( homogénéité) . Les critères d'homogénéité peuvent être la couleur ou le niveau de gris, la texture, ....

Méthode par séparation

Elle est basée sur la technique du Quad Tree : l'image est supposée carrée : on la divise en 4 quadrants, puis chaque quadrant en 4 sous-quadrants et ainsi de suite.

L'algorithme de division est simple et récursif :

Separation(zone)Si critere(zone)=VRAI alors classersinon diviser zone en 4 sous-zones Z1,Z2,Z3,Z4 Pour i=1 à 4 faire : Separation(Zi) fin Pourfin Si

et le quad tree est :

Méthodes par fusion

Alors que la méthode précédente consistait à diviser l'image, les méthodes par fusion appliquent le principe inverse : on fait

Page 24: Chap5 : traitement d'images partie 1

croître une région en y incorporant les régions voisines ayant les mêmes critères d'homogénéité ( fusion de région). La règle de fusion est double : les deux régions correspondent au même critère et elles sont adjacentes.

La méthode de la coloration de tâches consiste à promener sur l'image une fenêtre de trois points. En chaque point on applique l'algorithme indiqué ci-dessous où Couleur est un niveau de couleur attribué aux pixels satisfaisant le même critère.

Pour chaque point (x,y) faire : Si critere(x,y)=critere(x-1,y) alors Couleur(x,y)=Couleur(x-1,y) sinon si critere(x,y)=critere(x,y-1) alors Couleur(x,y)=Couleurx,y-1) sinon Couleur(x,y)=Nouvelle_Couleur fin Si fin Sifin Pour

La méthode locale récursive consiste à faire croître au maximum une région avant de passer à la suivante . L'algorithme est décrit ci-dessous :

Pour chaque pixel (x,y) faire : Si I(x,y) <> 0 alors sauvegarder le point de départ x,y croissance(x,y) incrémenter NuméroSegment fin Sifin Pour

croissance(x,y) I(x,y)=0 // pour ne pas réexaminer(x,y) Pour tout pixel adjacent à (x,y) faire : Si I(x,y)<>0 et critere(pixel)=critere de départ alors croissance(pixel) fin Si fin Pour

Travaux pratiques

Le programme Iti2.exe qui peut être téléchargé permet d'expérimenter la plupart des algorithmes décrits dans ce cours.

La majeure partie du programme a été réalisée par deux étudiants de MIAGE, sur cahier des charges fourni par l'auteur du cours, Nicola Boruta et Christine Vergriete. Des compléments ont été, par la suite ajoutés par un étudiant de DESS SIM, A.Bouberak.

Ce programme comporte deux parties :

● Partie 1 : améliorations de l'image (réalisée entièrement en C++)● Partie 2 : segmentation (rélaisée en Visual Basic)

Ce programme correspond à un outil pédagogique et non à un outil professionnel. Les images qui peuvent être traitées sont des images "bmp" de dimensions 128x128, possédant 256 niveaux de gris.

Une petite bibliothèque d'images diverses est proposée. Toutefois, il est possible de créer ses propres images.

Télécharger (le fichier envoyé est compressé avec winzip : iti2.zip).

Bibliographie :

Page 25: Chap5 : traitement d'images partie 1

J-J. THOUMAZET Traitement de l'image sur micro-ordinateur SYBEXS. LELANDAIS Initiation au traitement numérique des images polycopié Univ. Paris VIIIR.C.GONZALES, R.E. WOODS Digital Image Processing ADDISON WESLEYM. COSTER, J.L. CHERMANT Précis d'analyse d'images Presses du CNRS

M. KUNT, G. GRANLUND, M. KOCHER Traitement numérique des images Presses Polytechniques et Universitaires Romandes

Page 26: Chap5 : traitement d'images partie 1

Initiation au traitement et à l'analyse d'image - Exercices

dernière modification : 21/03/2000

Exercice 1

On considère l'image suivante en 4 couleurs 0 (noir), 1, 2, 3 (blanc) :

1) Tracer l'histogramme de cette image.

2) Déterminer son entropie au premier ordre.

3) On considère la LUT définie ci-dessous par j=f(i) où i est la couleur initiale et j la couleur transformé correspondante. Dessiner l'image résultant de cette transformation.

Page 27: Chap5 : traitement d'images partie 1

4) Appliquer à l'image initiale, le filtre linéaire défini par le masque 3x3 suivant :

Exercice 2

On considère l'image suivante en 4 couleurs 0 (noir), 1, 2, 3 (blanc) :

Page 28: Chap5 : traitement d'images partie 1

1) Tracer l'histogramme de cette image

2) Déterminer son entropie au premier ordre

3) On considère la LUT définie ci-dessous par j=f(i) où i est la couleur initiale et j la couleur transformée correspondante.

Dessiner l'image résultant de cette transformation

4) Appliquer à l'image initiale le filtre linéaire défini par le masque 3x3 suivant

Page 29: Chap5 : traitement d'images partie 1

Initiation au traitement et à l'analyse d'image - Solution des Exercices

dernière modification : 21/03/2000

Exercice 1

1) histogramme

2) entropie au premier ordre : 1,74

nuances nb pixels pi qi=-log2(pi) Si=pi.qi

0 48 0,19 2,42 0,451 46 0,18 2,48 0,442 28 0,11 3,19 0,353 134 0,52 0,93 0,49

256 1,00 1,74

3) application d'une LUT

Page 30: Chap5 : traitement d'images partie 1

4) application d'un filtre linéaire

Exercice 2

1) histogramme

Page 31: Chap5 : traitement d'images partie 1

2) entropie au premier ordre

S = -somme(Pilog2(Pi)=somme(PiQi)

i N Pi Qi PiQi

0 57 0,22 2,18 0,48

1 48 0,19 2,40 0,46

2 44 0,17 2,56 0,44

3 107 0,42 1,25 0,53

totaux 256 1,91

entropie au premier ordre : 1,91

3) image résultant de cette transformation

Page 32: Chap5 : traitement d'images partie 1

4) application d'un filtre linéaire