PIF-6003 Sujets spéciaux en informatique I Détection des contours et arêtes Dérivée première (gradient) Dérivée seconde Laplacien Laplacien de la gaussienne Filtre de Canny Détection de régions Lectures: Notes de cours
Détection des contours et arêtes (basée sur les dérivées) 00 FF 00 Image prof il d’une ligne horizontale (dérivée première) (dérivée seconde) (a) ( b) Figure 7.4 [rf. GONZALEZ, p. 417]
Dérivée première (gradient) | Gx | + | Gy | -1 1 -2 2 | Gy | 1 -1 2 -2 | Gx | Figure 7.6 [rf. GONZALEZ, p. 421]
Dérivée seconde (Laplacien) Le calcul du laplacien découle de la forme suivante: La forme digitale est donnée par: -1 4 z3 z9 z2 z8 z1 z7 z6 z5 z4 Cette méthode est sensible au bruit
Dérivée seconde (Laplacien) Le laplacien de la gaussienne permet de corriger les problèmes de sensibilité au bruit de la méthode du laplacien Le laplacien de la gaussienne prend la forme:
Dérivée seconde (Laplacien) Nous utilisons la forme:
Dérivée seconde (Laplacien de la gaussienne) Figure 7.8 [rf. GONZALEZ, p. 423]
Dérivée seconde (Laplacien) Le résultat de la convolution f *g’’ est la dérivée seconde de l’image Il faut alors localiser les passages par zéro de la dérivée de l’image pour permettre la localisation des contours dans l’image Pour localiser les passages par zéros nous utilisons une petite fenêtre de 1 X 2 pour localiser les passa-ges par zéros verticaux et une de 2 X 1 pour ceux horizontaux
Dérivée seconde (Laplacien) Par la suite nous parcourons l’image des dérivées secondes et effectuons les tests suivants: j j+1 SI ((((f*g’’)(i,j) > 0) ET ((f*g’’)(i,j+1) < 0)) OU (((f*g’’)(i,j) < 0) ET ((f*g’’)(i,j+1) > 0))) ALORS Passage par zéro (contour vertical) i j SI ((((f*g’’)(i,j) > 0) ET ((f*g’’)(i+1,j) < 0)) OU (((f*g’’)(i,j) < 0) ET ((f*g’’)(i+1,j) > 0))) ALORS Passage par zéro (contour horizontal) i i+1
Laplacien de la gaussienne (exemples) Image originale (320 X 320 pixels) Convolution de l’image avec {Laplacien de G} où w2-D = 8 (montre seulement les passages par 0 en noir) Convolution de l’image avec {Laplacien de G} où w2-D = 8 (valeurs positives en blanc et négatives en noir) Convolution de l’image avec {Laplacien de G} où w2-D = 8 (0 apparaissant en gris) Figure 2-12 [rf. MARR, p. 58]
Exemple de détection de contours /u/dmatensr/meunier/images/riviere.rast
Filtre de Canny Étape 1: Calcul des dérivées Horizontale et Verticale d I(x,y)/dx d I(x,y)/dy
Filtre de Canny Étape 2: Calcul de l’amplitude du gradient et l’orientation mag(I(x,y)) = ((d I(x,y)/dx)2 + (d I(x,y)/dy)2)1/2 = tg-1(d I(x,y)/dy / d I(x,y)/dx) est l’orientation de la normale au contour: Significatif seulement quand I(x,y) est non nul (proche du contour) Amplitude du Gradient
Filtre de Canny Étape 3: Éliminer les pixels ne correspondant pas à des maximas: Un pixel a une réponse maximale si ces deux voisins selon l’axe de la normale ont une réponse inférieure Étape 4: Seuillage par hystérésis a) Si mag(I(x,y)) > Seuil 1 1 pixel de contour b) Suivre le contour TTQ mag(I(x,y)) > Seuil 2 Produit des contours assez continus Seuil 1 est souvent fixé à 2 * Seuil 2 Les pixel non-max sont mis à 0
Filtre de Canny Exemple d’utilisation du filtre de Canny (Utilisation de la fonction cvCanny() dans OpenCV)
Filtre de Canny Exemple: edge.c dans le dossier C:\Program Files\OpenCV\samples\c de OpenCV Seuil 1 Seuil 2 Dim Sobel
Filtre de Canny Résultats
Détection de régions Une région est un ensemble de pixels connexes, qui possèdent les mêmes caractéristiques. Connexe : entre n’importe quelle paire de pixels de cette région il existe un chemin formé de pixels appartenant à cette région. Mêmes caractéristiques comme par exemple, même couleur, même texture, même niveaux de gris, couleurs semblables, textures semblables, niveaux de gris semblables, etc.
Détection de régions (approche de Zucker) Une segmentation est une partition de l’image en régions (R1, R2, … Rn) vérifiant un critère d’homogénéité 1. i : Ri est connexe => fusion des pixels voisins. 2. i, j tells que i ≠ j : Ri ∩ Rj = 3. Ri = I 4. i : P(Ri ) = VRAI où P est un prédicat (homogénéité). 5. i, j tels que i ≠ j et Ri et Rj sont connexes : P(Ri Rj ) = FAUX
Détection de régions (approche de Zucker) La condition suivante a été rajoutée à celles initiales utilisées par Zucker : 6. Choisir la partition S minimisant le coût Q Exemple : P = NgMax – NgMin < 10 et Q = NgMax – NgMin. Prédicat d’homogénéité : Soient Ri et Rj deux régions adjacentes et soit Rk = Ri Rj. Pour pouvoir fusionner Ri avec Rj au sein de Rk, il faut que le prédicat P(Rk) soit vérifié.
Détection de régions (approche de Zucker) Différents prédicats peuvent être utilisés comme : P1(Rk ) : max(Rk ) - min (Rk) < S1 P2(Rk ) : | Moyenne(Ri ) - Moyenne(Rj ) | < S2 P3(Rk ) : Variance(Rk ) < S3 P4(Rk ) : Gradient_moyen (Ri , Rj ) < S4 Rappelons que le gradient moyen de la frontière entre Ri et Rj = moyenne des différences des pixels de part et d’autre de la frontière
Détection de régions (partition => split) On commence par une grande région correspondant à l’image au complet. On continue à partitionner jusqu’à ce que la condition 4 soit vérifiée (toutes les régions sont homogènes)
Détection de régions (fusion => merge) On commence par des régions atomiques : comme des pixels, des carrés de 4 pixels, etc. On fusionne jusqu’à ce que la condition 5 soit vérifiée (on ne peut plus regrouper de paires de régions).
Détection de régions (fusion => merge) Algorithme de fusion : Initialisation : partitionner l’image en petites régions calculer les attributs de chaque région calculer les attributs des couples de régions construire la liste ordonnée des régions à fusionner Tant qu’il y a des régions à fusionner sélectionner le meilleur couple fusionner les 2 régions et mettre à jour les attributs mettre à jour la liste des régions à fusionner
Résumé Segmentation des images par détection de contours et d’arêtes Dérivée première (gradient) Dérivée seconde Laplacien Laplacien de la gaussienne Filtre de Canny Détection de régions