Signaux & Systèmes II
Atelier 10. Initiation au traitement d’images Qu’est ce qu’une image numérique ?
Le travail est à mener sur l’image test.png disponible sur Moodle.
1. ImportezsousGNUOctavel’imagetest.pngàl’aidedelafonctionimread,puisaffichez-laaveclafonction
imshow1. Que voyez-vous?
2. Déterminez les dimensions de l’object représentant l’image dans l’espace de travail de GNU Octave à
l’aide de la fonction size. À quoi correspondent-elles ?
3. Utilisez les fonctions min et max afin de déterminer les valeurs minimales et maximales des pixels de l’image. Quelles sont ces valeurs ? Essayez de donner à un pixel une valeur inférieure à la valeur minimale ou supérieure à la valeur maximale. Y arrivez-vous ?
Pour pouvoir aller au delà de ses limites, il est nécessaire de convertir les valeurs des pixels du format entier non signé sur 8 bits au format entier sur 32 bits à l’aide de la fonction int32.
4. L’opération inverse, nécessaire pour l’affichage avec la fonction imshow ou la sauvegarde avec la fonction imwrite, est possible grâce à la fonction uint8.
5. Convertissez l’image couleur en image en niveaux de gris en utilisant la relation de luminance équiva- lente :
p = 0,299 r + 0,587 g + 0,114 b, (1) où r, g et b expriment les niveaux de rouge, vert et bleu et p le niveau de gris correspondant, c’est-à-dire
de luminance équivalente.
6. Quellesdifférencesouéquivalencesvoyez-vousentreuneimagenumériqueetlessignauxmono-dimensionnels étudiés et manipulés depuis le début de ce module en terme de dimensions, variables, fenêtrage, échan- tillonnage, quantification ?
La suite de cet atelier est à faire sur une image en niveau de gris.
Correction ponctuelle d’une image Histogramme
7. Proposez un script permettant de calculer le nombre de pixels de valeur 117 dans l’image.
8. Proposezunscriptpermettantd’étendrecettemesureàtouteslesvaleurspossiblesetdetracerlerésultat, à savoir le graphe suivant :
nombre de pixels = f (niveau de gris) (2) Il s’agit de ce que l’on appelle l’histogramme de l’image.
Recadrage de dynamique et seuillage
Lorqu’une image ne possède des pixels qu’entre les valeurs a et b > a, il est possible de recadrer sa dynamique en effectuant la transformation suivante :
b−a ×255 9. Esquissez le graphe donnant p′ en fonction de p.
0
si p < a, s i p > b , sinon.
′ 2 5 5 p =p−a
(3)
10. Déduisezl’effetdesfonctionsdecorrectionreprésentéesfigure1pagesuivanteetvérifiezvoshypothèses sur l’image étudiée et son histogramme.
Attention, pour que la division ait un sens, il est nécessaire de convertir cette fois-ci la valeur des pixels en nombre flottant, à l’aide des fonctions single ou double, avant de repasser après calcul pour l’affichage en entiers non signés sur un octet.
1. Rappelons que vous pouvez obtenir de l’aide sur la fonction machin en tapant dans la fenêtre de commande help machin.
2 Signaux & Systèmes II
Filtrage d’une image
p′ 255
200
55 0
Figure 1
200 255
p
0 55
Fonctions agissant sur la dynamique
Les traitements présentés dans la section précédente modifient la valeur d’un pixel en fonction de sa seule valeur. Le filtrage des images à proprement parlé, étudié dans la suite de cet atelier, modifie les valeurs d’un pixel en fonction de son voisinnage : la valeur après traitement d’un pixel est une somme pondérée des valeurs de ses voisins. Très souvent, il s’agit de ses 8 voisins directs en plus de lui-même si bien qu’un pixel dans l’image traitée a pour valeur :
33
p′(n,m)=m(i,j)×p(n−2+i,m−2+j) (4)
i=1 j=1
où les coefficients m(i,j ) sont les poids attribués aux différents voisins, regroupés dans une matrice 3×3 appelée
masque. Voici quelques exemples de masques usuels :
1 1 1 1 1 1 1 2 1 1 M= 1 2 1 M=0 0 0 M=0 0 0 123
101 1 1 −1 −1 −1 −1 −2 −1
1 1
1
1 1 0 −1 0 −1 0
M = 1 1 456
1 M = 2 0 −2 M =−1 5 −1 91 1 1 1 0 −1 0 −1 0
1 1 0 −1 −1 −1 −1
1 1
M=1 −8 1 M=1 0 −1 M=−1 9 −1
789
1 1 1 1 0 −1 −1 −1 −1
11. Filtrez à l’aide de ces masques :
– sur papier l’imagette proposée figure 2 page suivante ;
– sous GNU Octave l’image en niveau de gris obtenue précédemment
afin de déterminer leurs fonctions respectives. Attention si besoin à recadrer la dynamique à l’aide de la relation (3) pour pouvoir « observer » le résultat.
12. Quelle opération reconnaissez-vous dans ce filtrage à l’aide de masques 3 × 3 ? Comment pourrait-on qualifier ces masques et le système de filtrage ainsi réalisé ?
Détection de lignes droites
La transformée de Hough est une technique de reconnaissance de formes utilisée en traitement d’images in- ventée par Paul Hough en 1962. L’application la plus simple permet de détecter des lignes droites. L’objectif de cet partie est d’implémenter cette technique sous GNU Octave.
Principe de la transformée de Hough
Supposons que l’on suspecte la présence d’une droite D0 passant par un certain nombre de pixels dans une image.
Atelier 10. Initiation au traitement d’images 3
64
63
47
93
198
262
253
243
43
56
47
104
188
255
235
247
44
59
45
82
212
251
248
247
53
36
51
110
206
249
250
256
54
31
57
96
208
243
234
255
62
30
67
112
206
243
256
240
68
53
45
92
212
236
272
255
45
53
39
94
184
234
251
252
Figure 2 Imagette yb
D1
y1 P1 0 x1
Plan image
Figure 3
droite « P1 » point « D1 »
0
x
Plan des paramètres Exemples de droites passant par le point P1
D2
D3
point « D3 »
point « D2 » a
yb
b = −x2 a + y2 y = a0 x + b0 b = −x1 a + y1
y2 P2 b0
a
y1
0 x1 x2
0 a0
P1
x
Plan image
Figure 4 Droite unique pasant passant par les points P1 et P2
Considérons pour commencer le pixel correpondant au point P1 de coordonnées (x1, y1) dans le plan image (xy). Il existe une infinité de droites passant par ce point, toutes d’équation :
y = a x + b, (5) dont les coefficient directeur a et ordonnée à l’origine b vérifient la relation y1 = a x1 + b. La figure 3 en montre
trois. On peut reformuler cette dernière expression de la manière suivante :
b=−x1 a+y1. (6)
ce qui correspond dans le plan des paramètres (ab) à une droite unique de coefficient directeur −x1 et d’ordon- née à l’origine y1.
Il en va de même pour point P2 de coordonnées (x2, y2). Tous les couples de coefficients acceptables a′ et b′ sont situés dans le plan des paramètres par une droite unique de coefficient directeur −x2 et d’ordonnée à l’origine y2.
Comme on le voit figure 4, les deux droites P1 et P2 se coupent dans la plan de Hough en un point dont les coordonnées sont les paramètres a et b correpondant à la droite D0, seule droite du plan image passant par les points P1 et P2.
En théorie, il suffit donc de réitérer ce travail pour tous les pixels de l’image suspectés d’appartenir à une ligne droite. Les intersections des droites correspondantes dans le plan de Hough donnent les paramètres a et b des droites réellement présentes dans l’image.
Plan des paramètres
4 Signaux & Systèmes II
y
ρ
θ
P
M
Notion de gradient
Figure 5
Signification des paramètres ρ et θ de la représentation normale
0
∆
x
La première étape consiste à extraire de l’image originale les pixels susceptibles d’appartenir à une droite. Cela est fait en isolant les contours, ce qui correspond à la recherche de zone à fort gradient.
Dans le domaine continu, le gradient d’une fonction f (x,y) est défini par :
dont le module vaut :
df d y
d f
df 2 df 2
∇⃗ f = d x + d y . ( 8 )
dx
⃗
∇f = , (7)
Dans le domaine discret, les gradients directionnels peuvent être obtenus à l’aide de masques de convo- lution permettant d’extraire les contours horizontaux et verticaux. Les masques de Sobel découverts lors de l’atelier précédent (M3 et M5) font parfaitement l’affaire.
13. Importez et affichez dans GNU Octave l’image test2.png disponible sur Moodle.
14. Déterminez et affichez son gradient. Attention à la conversion de et vers le format uint8.
15. Déterminez et tracez l’histogramme de l’image gradient. Choisissez un seuil permettant de faire le tri entre les pixels appartenant à un contour et les autres et seuillez l’image gradient en conséquence.
Le résultat est normalement une image binaire dont les pixels blancs appartiennent à un contour et peut- être à une ligne droite.
Représentation normale d’une droite
Une droite verticale dans le plan image possède des paramètres a et b infinis, ce qui limite l’exploitation de la méthode précédente. Pour contourner cette limitation, on utilise plutôt la représentation normale des droites :
x cosθ+y sinθ=ρ. (9) Cette équation représente en fait le produit scalaire des vecteurs (cosθ, sinθ) et (x, y), c’est-à-dire la projection
de tous les points M de la droite ∆ sur le point P comme l’illustre la figure 5.
16. Quels sont les paramètres ρ et θ d’une droite horizontale? d’une droite verticale? Les problèmes de la
représentation affine sont-ils résolus ?
17. Pour une image de dimensions N × M , sur quels intervalles peuvent varier les paramètres ρ et θ d’une
droite appartenant à l’image ?
Implémentation de la transformée de Hough
En pratique, les intervalles ρmin,ρmax et θmin,θmax sont discrétisés (par exemple 1 pixel pour ρ et 1 ̊ pour θ) et le plan des paramètres ρθ devient alors la grille 6 page suivante.
La procédure est la suivante. Pour chaque pixel blanc de l’image des contours :
Atelier 10. Initiation au traitement d’images 5
ρmax
ρmin
θmin θmax
Figure 6 Grille des scores (ρθ)
– On balaye l’axe θ de la grille et pour chaque valeur discrète θ[i], on résout l’équation (9);
– Le résulat ρ obtenu est arrondi à la valeur discrète ρ[j ] la plus proche ;
– L’élément de coordonnées (i,j) dans la grille est incrémenté d’une unité.
Il suffit alors de rechercher les scores les plus élevés. Les paramètres ρ et θ sont ceux des droites les plus susceptibles d’appartenir à l’image.
18. Implémentez cet algorithme sous GNU Octave.
19. Pour un point donné de l’image, quelle est la courbe correspondante dans le plan de Hough ?
20. Quelles sont les quatre scores les plus élevés ?
21. Superposez les droites correspondantes sur l’image originale. Il vous faut pour cela trouver la représen- tation affine d’une droite à partir de sa représentation normale.