0% ont trouvé ce document utile (0 vote)
246 vues73 pages

Détection de contours en imagerie

Le document décrit les méthodes de détection de contours dans les images. Il présente les définitions d'un contour et explique les approches utilisant le gradient et les dérivées première et seconde. Différents filtres dérivatives tels que Roberts, Prewitt, Sobel et Kirch sont également décrits.

Transféré par

KARKAR NORA
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
246 vues73 pages

Détection de contours en imagerie

Le document décrit les méthodes de détection de contours dans les images. Il présente les définitions d'un contour et explique les approches utilisant le gradient et les dérivées première et seconde. Différents filtres dérivatives tels que Roberts, Prewitt, Sobel et Kirch sont également décrits.

Transféré par

KARKAR NORA
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Détection de contours dans les images

Séverine Dubuisson

Détection de contours dans les images – p. 1/7


Caractérisation d’un contour

Discontinuité de la fonction d’intensité des images


Discontinuité de la fonction de réflectance (texture,
ombre, ...)
Discontinuité de profondeur (bords des objets)

Détection de contours dans les images – p. 2/7


Définitions d’un contour

Définition spatiale :
Lieu de variations significatives de l’information de niveaux de gris (il
existe peu de travaux sur les contours dans les images couleurs ou
multi-spectrales) : rupture d’intensité
Définition fréquentielle : haute fréquence du spectre d’amplitude de la
transformée de Fourier de l’image

Détection de contours dans les images – p. 3/7


Détection d’un contour

Détection de contours dans les images – p. 4/7


Les méthodes dérivatives

Dérivée première d’un contour : gradient


Opérateurs dérivatifs du premier ordre
Recherche d’un passage par un maximum, ou
extrama local
Dérivée seconde d’un contour : laplacien
Opérateurs dérivatifs du second ordre
Recherche d’un passage par zéro

Détection de contours dans les images – p. 5/7


Travail sur la dérivée première : principe (1/

Un contour d’orientation ϕ au point de coordonnées (x, y) est détecté par


un maximum de la dérivée première, dans la direction φ du gradient
 
cos φ
# (x, y)#n
g(φ) = ∇f #n =  
sin φ

Détection de contours dans les images – p. 6/7


Travail sur la dérivée première : principe (2/

∂f ∂f
On a donc g(φ) = ∂x cos φ + ∂y sin φ
En dérivant par rapport à φ et en annulant on obtient
% &
∂f
∂y π
φ = arctan ∂f
ϕ=φ+
∂x
2

La norme du gradient est donnée par :


'
( )2 ( )2
$ (x, y" = ∂f ∂f
"∇f +
∂x ∂y

Détection de contours dans les images – p. 7/7


Gradient d’une image : interprétations

Gradient : vecteur des dérivées horizontales et


verticales de l’intensité
La dérivée directionnelle est maximisée dans la
direction du gradient
La dérivée de f (x, y) dans une direction d$ donnée
$ (x, y) · d$
s’écrit ∇f
L’amplitude (i.e module) du gradient est liée à la quantité
de variation locale de l’intensité : plus le module est
grand, plus le contour est fort
Argument du gradient : direction de la plus grand pente

Détection de contours dans les images – p. 8/7


Cas discret (1/3)

On estime le gradient en calculant une variation monodimensionnelle


dans une direction φ donnée

Gφ (x, y) = (I $ Wφ ) (x, y)
*m *n
= I(x + i, y + j) · Wφ (i, j)
i=−m j=−n

La taille de l’opérateur (autour de la position (x, y)) est donnée par le


couple (m, n)
Pour estimer le gradient, on choisit deux directions privilégiées
orthogonales (les lignes et les colonnes) sur lesquelles on le projette
Gx est le gradient vertical
Gy est le gradient horizontal

Détection de contours dans les images – p. 9/7


Cas discret (2/3)

La norme du gradient peut être calculée de trois


manières :
$ (x, y)
G(x, y) = ∇f
+
= (Gx (x, y))2 + (Gy (x, y))2
G(x, y) = max (|Gx (x, y)|, |Gy (x, y)|)
G(x, y) = |Gx (x, y)| + |Gy (x, y)|

La direction du gradient en un point est donnée par :


( )
Gy (x, y)
φ(x, y) = arctan
Gx (x, y)

Détection de contours dans les images – p. 10/7


Cas discret (3/3)

On approche les dérivées directionnelles en utilisant les


opérateurs anisotropes :

Gx (i, j) ≈ $x I(i, j) = I(i + 1, j) − I(i, j)


Gy (i, j) ≈ $y I(i, j) = I(i, j + 1) − I(i, j)

La norme du gradient peut être obtenue de trois


manières :
+
G(i, j) = (I(i + 1, j) − I(i, j))2 + (I(i, j + 1) − I(i, j))2
G(i, j) = max (|I(i + 1, j) − I(i, j)|, |I(i, j + 1) − I(i, j)|)
G(i, j) = |I(i + 1, j) − I(i, j)| + |I(i, j + 1) − I(i, j)|

Détection de contours dans les images – p. 11/7


Filtres dérivatifs du premier ordre

Un filtre est composé de deux masques :


Hx détecte les contours verticaux
Hy détecte les contours horizontaux
Dans le domaine spatial : convolution linéaire de l’image avec les
filtres
Image des contours verticaux, ou gradient vertical : Gx = I $ Hx
Image des contours horizontaux, ou gradient horizontal :
Gy = I $ Hy
+
Module du gradient : G = G2x + G2y ou G = max(|Gx |, |Gy |)
Filtres courants : Roberts, Prewitt, Sobel, Kirch

Détection de contours dans les images – p. 12/7


Opérateurs du premier ordre

Opérateur de Roberts : approche les dérivées


directionnelles suivant les axes orientés à 45◦ (contours
obliques)
% & % &
0 1 −1 0
Filtres : Hx = Hy =
−1 0 0 1
π
Direction ϕ du contour : ϕ = 4 +φ
Opérateurs de Sobel (c = 2) et Prewitt (c = 1)
   
1 0 −1 −1 −c −1
   
Filtres : Hx =  c 0 −c  Hy =  0 0 0 
1 0 −1 1 c 1
π
Direction ϕ du contour : ϕ = 2 +φ

Détection de contours dans les images – p. 13/7


Compléments sur Prewitt et Sobel

Ces masques opèrent tout d’abord un lissage de


l’image, suivi d’une opération de dérivation : ils sont dits
séparables
   
1 . / 1 . /
   
Hx =  c  · 1 0 −1 Hy =  0  · 1 c 1
1 −1
Le lissage permet d’atténuer le bruit dans l’image,
pouvant être interprété comme un contour :
Prewitt : filtre moyenneur
Sobel : filtre gaussien

Détection de contours dans les images – p. 14/7


Exemple de filtrage : Sobel

Détection de contours dans les images – p. 15/7


Résultats comparatifs

Détection de contours dans les images – p. 16/7


Opérateur de Kirch (1/2)

Opérateur à 8 masques, chacun correspondant à une


direction préférentielle obtenue par rotations de π8
successives
   
5 5 5 −3 5 5
   
H0 = 
 −3 0  
−3  H1 =  −3 0 5 

−3 −3 3 −3 −3 −3
   
−3 −3 5 −3 −3 −3
   
H2 = 
 −3 0  
5  H3 =  −3 0 5 
−3 −3 5 −3 5 5
   
−3 −3 −3 −3 −3 −3
   
H4 = 
 −3 0  
−3  H5 =  5 0 −3 
5 5 5 5 5 −3

Détection de contours dans les images – p. 17/7


Opérateur de Kirch (2/2)
   
5 −3 −3 5 5 −3
   
H6 = 
 5 0 −3  H7 = 
 5 0 −3 

5 −3 −3 −3 −3 −3

Le gradient retenu est celui correspondant à la valeur


maximum, donnée par maxi=0,··· ,7 {|I & Hi |}
L’orientation retenue est celle du masque ayant
maximisé le gradient
Cet opérateur est aussi appelé gradient boussole ou
gradient compas

Détection de contours dans les images – p. 18/7


Opérateur de MDIF

Combinaison d’un filtre moyenneur et de l’opérateur de


Prewitt  
0 1 0 −1 0
     
0 1 0 1 0 −1  1 2 0 −2 −1 
 
     
Hx = 
 1 1 1
 $  1 0 −1  =  1 3
    0 −3 −1 

 
0 1 0 1 0 −1  1 2 0 −2 −1 
 
0 1 0 −1 0
 
0 1 1 1 0
     
0 1 0 1 1 1  1 2 3 2 1 
 
     
Hy = 
 1 1 1
$ 0
  0 0  
= 0 0 0 0 0 
 
0 1 0 −1 −1 −1  −1 −2 −3 −2 −1 
 
0 −1 −1 −1 0

Détection de contours dans les images – p. 19/7


Taille des filtres

Les masques les plus couramment utilisés sont de taille 3 × 3


(m = n = 1)
On peut généraliser : cas du Sobel (Asfar) pour une taille de
voisinage quelconque

Wx (i, j) = i/(|i| · (|i| + |j|))


Wy (i, j) = j/(|j| · (|i| + |j|))

Quelle taille choisir pour un opérateur ?


Plus le masque est grand moins le gradient est sensible au bruit
(bruit atténué par le lissage)
Plus le masque est grand, moins bonne est la localisation des
contours (le lissage rend l’image floue)

Détection de contours dans les images – p. 20/7


Du gradient au contour

Pour détecter les contours d’une image, il faut procéder


de la sorte :
1. Mesure en chaque point de l’image de l’amplitude et
de la direction du gradient
2. Détermination des seuils d’amplitude
3. Suppression directionnelle des non-maxima locaux
4. Extraction des éléments essentiels
5. Reconstruction des contours par hysteresis

Détection de contours dans les images – p. 21/7


Détermination des seuils d’amplitude

Technique de Voorhees et Poggio


Seuillage basé sur la validation de deux seuils, un seuil
bas Sb et un seuil haut Sh , avec Sb < Sh , de la manière
suivante :
si G(x, y) < Sb alors on est sur que (x, y) n’est pas un
point de contour
si G(x, y) > Sh alors on est sur que (x, y) est un point
de contour
si Sb < G(x, y) < Sh alors l’appartenance à un contour
dépend du contexte

Détection de contours dans les images – p. 22/7


Suppression directionnelle des non maxima locaux (1/2)

Extraction des maxima locaux dans la direction du


gradient
Opération sur un voisinage de l’image de la norme du
gradient
On compare le gradient d’un point avec celui de ses
deux voisins M1 et M2 dans la direction
perpendiculaire au contour
Un point M est un maximum local si :
$ M " > "∇
"∇ $M " et $ M " ≥ "∇
"∇ $M "
1 2

Détection de contours dans les images – p. 23/7


Suppression directionnelle des non maxima locaux (2/2)

Les modules de gradient en M1 et M2 doivent être interpolés


"∇ # j − 1)" + ui −uj "∇(i
# M " = uj "∇(i, # + 1, j)"
1 ui ui
"∇ # j + 1)" + ui −uj "∇(i
# M " = uj "∇(i, # − 1, j)"
2 ui ui
avec ui = Gx (i, j) et uj = Gy (i, j)

Détection de contours dans les images – p. 24/7


Extraction des éléments essentiels

Points pour lesquels on est sûr de l’appartenance à un


contour
(x, y) : G(x, y) > Sh
Points de départ pour l’étape de reconstitution des
contours

Détection de contours dans les images – p. 25/7


Reconstitutions des points par hystérésis

On part des points M (x, y) déterminés éléments essentiels


On utilise deux seuils Sb et Sh , avec Sb < Sh , et pour chaque
point M , on peut procéder des deux manières suivantes :
Procédure 1 : on ne valide que les ensembles connexes de
points présentant au moins un point dont la norme de
gradient est supérieure à Sh
Procédure 2 : on valide tous les pixels connexes aux points
détectés et possédant une norme de gradient supérieure à Sb
On répète la procédure pour tous les nouveaux points validés

Détection de contours dans les images – p. 26/7


Travail sur la dérivée seconde : principe (1/2

Un changement linéaire d’amplitude d’une fonction f


correspond au passage par zéro de sa dérivée seconde
Dans le cas d’une image, il n’existe pas une dérivée seconde
unique, mais 4 dérivées partielles (selon x2 , y 2 , xy et yx)
En pratique, on a recours au laplacien faisant la somme des
deux dérivées partielles principales
2 2
2 ∂ I ∂ I
∇ = 2
+ 2
∂x ∂y

Un passage par zéro est caractérisé par une pente positive


dans le cas d’une frontière ayant une amplitude augmentant
de gauche à droite ou de bas en haut dans l’image
Détection de contours dans les images – p. 27/7
Travail sur la dérivée seconde : principe (2/2

Pour limiter les réponses dues au bruit, on filtre l’image


par g
∇2 (I & g) = (∇2 I) & g = I & (∇2 g)
En général on utilise un filtre gaussien g
1 r2 0
g(r) = √ e− 2σ2 où r= x2 + y 2
2πσ

dont le laplacien est :


( )
2 1 r2 r2
− 2σ2
∇ g(r) = − 4 1− e
πσ 2σ 2

Détection de contours dans les images – p. 28/7


Laplacien classique : cas discret

On approche le laplacien par les différences finies


∂2f
∂x2
1 23 4
L(i, j) = − [I(i, j − 1) − 2I(i, j) + I(i, j + 1)]
− [I(i − 1, j) − 2I(i, j) + I(i + 1, j)]
3 41 2
∂2f
∂y 2

Dans le domaine spatial, on calcule le laplacien par convolution


entre
 l’image et un
 masque,
 dont les deux
 plus courants sont :
0 −1 0 −1 −1 −1
   
   
 −1 4 −1   −1 8 −1 
   
0 −1 0 −1 −1 −1

Détection de contours dans les images – p. 29/7


Avantages/Inconvénients du laplacien

Avantages :
Un seul paramètre est nécessaire (variance de la
gaussienne)
Pas de seuil significatif : les points remarquables sont
détectés par un critère de changement de signe au
niveau d’un passage par zéro
Les contours sont fermés
Inconvénients :
Plus grande sensibilité au bruit
Aucune information sur l’orientation du contour

Détection de contours dans les images – p. 30/7


Approche DOG

DOG : Difference of Gaussians


Lissage à l’aide d’un filtre gaussien g(x, y) puis calcul de
la dérivée seconde dans la direction du gradient

Iz = $ (I & g(x, y)) = I & $g(x, y)

La dérivée seconde d’une gaussienne s’approche par la


différence de deux gaussiennes
Recherche des passages par zéro

Détection de contours dans les images – p. 31/7


Filtre optimum

Principe du filtrage : trouver la réponse impulsionnelle


d’un filtre susceptible d’extraire les points de contour tout
en réduisant le bruit
Introduire un filtre à réponse impulsionnelle séparable
h(x, y) = h1 (x)h2 (y)
Réduction du temps de calcul
Prise en compte de caractéristiques différentes
suivant les directions
Généralisation à des dimensions quelconques

Détection de contours dans les images – p. 32/7


Principe du filtrage

Soit un filtre séparable

I(x, y)&h(x, y) = I(x, y)&(h1 (x)h2 (y)) = (I(x, y) & h1 (x))&h2 (y)

Calcul de la dérivée première :


( )
∂(I(x, y) & h(x, y)) ∂h1 (x)
= I(x, y) & h2 (y)
∂x ∂x

Calcul de la dérivée seconde (laplacien) :


( )
∂ 2 h1 (x) 2
∂ h2 (y)
$(I(x, y) & h(x, y)) = I(x, y) & 2
h2 (y) + h1 (x)
∂x ∂y 2

Détection de contours dans les images – p. 33/7


Modèles du signal et du bruit (1/3)

Un contour est un seuil d’amplitude A auquel on ajoute


un bruit n(x) gaussien blanc de variance σ02 (modèle
additif) :
5
0 si x < 0
I(x) = AY (x) + n(x) avec Y (x) = U (x) =
1 si x ≥ 0

Le bruit est un bruit blanc additif

E(n(x)) = 0
E(n2 (x)) = σ02 ∀x

Détection de contours dans les images – p. 34/7


Modèles du signal et du bruit (2/3)

I(x) O(x)
! h(x) !

6 +∞
O(x) = I(x − u)h(u)du
−∞
6 +∞ 6 +∞
O(x) = AY (x − u)h(u)du + n(x − u)h(u)du
−∞ −∞

Supposons le contour placé en x = 0, la sortie du filtre s’écrit :


6 x 6 +∞
O(x) = A h(u)du + n(x − u)h(u)du
−∞ −∞
6 0 6 +∞
O(0) = A h(u)du + n(−u)h(u)du
−∞ −∞
Détection de contours dans les images – p. 35/7
Modèles du signal et du bruit (3/3)

Rechercher la réponse impulsionnelle d’un filtre


séparable susceptible de diminuer le bruit et appliquer
les opérateurs de dérivée
1. Modéliser le signal à extraire et le bruit de l’image
2. Transformer le problème d’extraction des points de
contour en problème d’optimisation
3. Résoudre et trouver une solution approchée
! on souhaite que la sortie présente un maximum
lorqu’il y a une arête : un contour optimal est situé en
x=0

Détection de contours dans les images – p. 36/7


Modèle analytique de Canny

Canny propose en 1986 un étude sur la détection de contours


Etude dans le cas 1D de signal bruité
A formalisé trois critères que doivent valider un détecteur
de contours :
Détection : robustesse au bruit
Localisation : précision de la localisation du point de
contour
Unicité : une seule réponse par contour
A chaque critère est associée une formule mathématique
La maximisation de ces critères conduit à la résolution d’une
équation différentielle dont la solution est le filtre f
permettant de détecter le contour
Détection de contours dans les images – p. 37/7
Critère de détection

But : maximiser le rapport signal sur bruit, ou SNR (Signal


Noise Ratio)
76 +∞ 6 +∞ 8
E(N 2 ) = E n(−u)h(u)du n(−v)h(v)dv
−∞ −∞
6 +∞
E(N 2 ) = σ02 h2 (u)du
−∞

On cherche le maximum du critère :


90
A | −∞ h(u)du| A
C1 = SNR = +9 = Σ(h)
σ0 ∞
h2 (u)du σ0
−∞

Détection de contours dans les images – p. 38/7


Critère de localisation (1/3)

But : rechercher l’écart entre le maximum de la sortie en


x0 et 0 : O$ (x0 ) = 0
6 +∞ 6 +∞
O $ (x) = AY (x − u)h$ (u)du + n(x − u)h$ (u)du
3 −∞ 41 2 3 −∞ 41 2
Contribution S(x) du signal Contribution N (x) du bruit

S(x) = Ah(x)
6 +∞
N (x) = n(x − u)h$ (u)du
−∞

Détection de contours dans les images – p. 39/7


Critère de localisation (2/3)

6 +∞ !
2
E(N (x)) = σ02 h 2 (u)du
−∞

Supposons x0 proche de 0, on a :

S(x0 ) ≈ Ah(0) + x0 Ah$ (0) + o(x20 )

h est impaire :

S(x0 ) ≈ x0 Ah$ (0)

Détection de contours dans les images – p. 40/7


Critère de localisation (3/3)

O $ (x0 ) = S(x0 ) + N (x0 ) ≈ Ax0 h$ (0) + N (x0 )


D’où :
9 +∞ $2
N (x0 ) 2
σ0 −∞ h (u)du
x0 = − $ et E(x20 ) =
Ah (0) A2 h$2 (0)

On obtient le critère de localisation :

1 A |h$ (0)| A
C2 = + = +9 = Λ(h)
E(x20 ) σ0 +∞ $2
h (u)du σ0
−∞

Détection de contours dans les images – p. 41/7


Critère d’unicité de la réponse (1/3)

But : réduire les réponses multiples


Le détecteur de contour ne doit pas identifier de
mutiples pixels de contours quand un seul existe
On veut que la distance entre les pics de la réponse au
bruit soit approximativement la largeur de bande de la
réponse du filtre à un seul contour.

Détection de contours dans les images – p. 42/7


Critère d’unicité de la réponse (2/3)

Rice a montré que la distance moyenne d entre deux


passages par zéro d’un processus gaussien, obtenu par
filtrage d’un bruit blanc g(x), est donnée par :
%' &
−R(0)
d=π !!
R (0)
9 +∞
où R(τ ) = −∞ g(x + τ )g(x)dx est la fonction
d’auto-corrélation de g
On cherche l’intervalle moyen entre deux passages par
zéro de h$

Détection de contours dans les images – p. 43/7


Critère d’unicité de la réponse (3/3)

!! 9 +∞ !!
On a R (τ ) = −∞ g (x + τ )g(x)dx
!! 9 +∞ !
Soit R (0) = − −∞ g 2 (x)dx
7 R +∞ 2
8 1
2
g (x)dx
Et ainsi d = π R −∞
+∞
g ! 2 (x)dx
−∞

Dans notre problème, g = h$ , et on obtient ainsi le critère


d’unicité :
: 9 +∞ ! ; 12
h 2 (x)dx
C3 = 2d = 2π 9 −∞
+∞ !!
−∞ h 2 (x)dx

Détection de contours dans les images – p. 44/7


Résolution : approche de Canny (1/3)

Canny a proposé de majorer ΣΛ avec d = kW


h est impaire, de support fini [−W, W ]
90
On cherche à minimiser −W h2 (y)dy
Avec les trois contraintes :
6 0
h(y)dy = D1
−W
6 0
h$2 (y)dy = D2
−W
6 0
!!
h 2 (y)dy = D3
−W

Détection de contours dans les images – p. 45/7


Résolution : approche de Canny (2/3)

D’où la fonction critère :


6 0 . /
!!
φ= h2 (y) + λ1 h(y) + λ2 h$2 (y) + λ3 h 2 (y) dy
−W

Ce qui conduit à l’équation :


!!
C = 2h + λ1 − 2λ2 h + 2λ3 h(4) = 0

Dont la solution générale est :


λ1
h(x) = e−αx
(a1 sin ωx + a2 ) cos ωx) + e αx
(a3 sin ωx + a4 cos ωx) −
2

λ22 λ2 4λ4 −λ2


Avec λ1 − 4 > 0, α2 − ω = 2λ4 et 4α2 ω 2 = 4λ24

Détection de contours dans les images – p. 46/7


Résolution : approche de Canny (3/3)

Avec les conditions aux limites :

h(0) = h(−W ) = h$ (W ) = 0
h$ (0) = c3

En utilisant une technique d’optimisation numérique


sous contrainte, Canny a trouvé les valeurs optimales
suivantes :

ΣΛ = 1, 12
k = 0, 58

Détection de contours dans les images – p. 47/7


Résolution : approche de Dériche (1/2)

Dériche a proposé d’utiliser un filtre à réponse


impulsionnelle infinie (RII)

h2 (x) = a3 e−α|x| sin ωx

On calcule ainsi les expressions :


<
√ 2α
Λ = 2α Σ=
α2 + ω 2
<
2α α2 + ω 2
ΣΛ = 2 k=
α + ω2 5α2 + 6α2 ω 2 + ω 4
On pose α = ωm

Détection de contours dans les images – p. 48/7


Résolution : approche de Deriche (2/2)
+

Pour m * 1, on a Σ + α2 /m2 ⇒ ΛΣ ≈ 2m donc k + 1
k excellent
ΛΣ est très petit car m faible : aucun intérêt
+ √
1
Pour m = 1, on a Σ + α ⇒ ΛΣ ≈ 2 donc k + 0, 58
k identique à celui de Canny
ΛΣ meilleur de 25% par rapport à celui de Canny
+
Pour m - 1, on a Σ + α2 ⇒ ΛΣ ≈ 2 donc k + 0, 44
Ce cas correspond à la limite de l’opérateur pour
ω → 0 (sin ωx ≈ ωx)

Détection de contours dans les images – p. 49/7


Pour résumer

La valeur SNR doit être la plus grande possible : on veut


beaucoup de signal et peu de bruit
La valeur de la localisation représente l’inverse de la
distance du contour détecté au vrai contour : on la veut
la plus grande possible
Le critère d’unicité est une contrainte supplémentaire
pour éviter les réponses multiples et représente la
distance moyenne entre les passages par zéro de f $
Canny cherche le filtre qui maximise le produit du SNR
et de la localisation sujet à la contrainte d’unicité de la
réponse
! parfois compliqué à résoudre : on l’approche par la
dérivée première d’une fonction gaussienne.
Détection de contours dans les images – p. 50/7
Algorithme de Canny-Deriche simplifié

1. Lire l’image I
2. Créer un masque Gaussien 1D G pour convoluer I (σ à
paramétrer)
3. Créer un masque 1D pour la dérivée première de G
dans les directions en x et y (Gx et Gy )
4. Convoluer I et G selon les lignes puis les colonnes (Ix et
Iy )
5. Convoluer Ix avec Gx (Ix$ ) et Iy avec Gy (Iy$ )
+
6. Calculer la magnitude M (x, y) = Ix$ (x, y)2 + Iy$ (x, y)2

Détection de contours dans les images – p. 51/7


Suivi de contour (1/2)

L’extraction de points de contour nous permet d’obtenir


une image binaire
Pixels blancs : points de contour
Pixels noirs : autres pixels de l’image
Problèmes à résoudre :
Certains points de contour n’ont pas été détectés
Certains pixels détectés comme points de contour
n’en sont pas
Nécessité d’obtenir les contours fermés des
objets/régions de l’image

Détection de contours dans les images – p. 52/7


Suivi de contour (2/2)

Grouper les points de contours en chaînes et relier ces


chaînes afin d’obtenir des “formes”
On peut ensuite obtenir des informations sur ces
formes : courbure, pente, coins, etc.
Procédure :
1. Affiner les composantes contour connectées à une
épaisseur de 1 pixel
2. Trouver des chemins simplement connectés
3. Les lier entre eux en utilisant une modélisation par
graphe de l’image des contours
4. Calculer les propriétés du contour obtenu

Détection de contours dans les images – p. 53/7


Affinage (thinning) (1/4)

On travaille sur l’image binaire contenant les points de


contour
La suppression d’un point de contour ne doit pas
changer le nombre de composantes connectées dans
l’image binaire
Un point final est un pixel blanc ayant exactement un
voisin
Si on considère un voisinage 3 × 3 avec comme point
central p un pixel blanc (point de contour), alors :
,→ p est un point simple si on peut le changer de
blanc en noir sans changer le nombre de
composantes connectées dans le voisinage

Détection de contours dans les images – p. 54/7


Affinage (thinning) (2/4)

1 1 1
Exemple 1 de voisinage : 0 1 1 ⇒ p est simple-8 mais pas simple-4
0 1 0

0 0 0
Exemple 2 de voisinage : 1 1 1 ⇒ p n’est ni simple-8 ni simple-4
0 0 0
Un 1-pixel blanc I(x, y) (ou point final) est un bord-N si son voisin de
coordonnée (x, y − 1) est noir (définitions similaires avec les directions S,
E et O)

Détection de contours dans les images – p. 55/7


Affinage (thinning) (3/4)

Un algorithme simple :
Pour D=N faire
Éliminer tous les bords-D qui sont simples et ne sont pas des
points finaux
Répéter pour les directions E, O et S

Chaque direction est traitée séparément afin d’éviter


l’élimination de composantes connexes entières
Le résultat dépend de l’ordre de traitement des
directions

Détection de contours dans les images – p. 56/7


Affinage (thinning) (4/4)

Exemple d’application N → E → O → S :
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 1 0 1 1 1 0 0 0 1 0 0 1 1 0 0
0 1 0 1 1 0 0 1 0 1 0 1 1 0 0 1
0 1 1 1 1 1 1 1 0 1 0 1 1 0 1 1
0 1 1 1 1 1 1 0 0 1 1 1 1 1 1 0
0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 1 0 0 1 1 0 0 0 1 0 0 1 1 0 0
0 1 0 1 1 0 0 1 0 1 0 1 1 0 0 1
0 1 0 1 0 0 1 1 0 1 0 1 0 0 1 1
0 1 1 1 1 1 1 0 0 1 1 1 1 1 1 0
0 1 0 0 0 1 0 0 0 1 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Détection de contours dans les images – p. 57/7
Représentation par un graphe (1/3)

But : créer une représentation structurée en graphe de


l’image de contours
On part d’une image binaire E des contours
L’image est vue comme un maillage (i.e. graphe)
Un pixel “point de contour” est un sommet de ce graphe
Suivi de contour = recherche d’un chemin entre deux
sommets du graphe

Détection de contours dans les images – p. 58/7


Représentation par un graphe (2/3)

Exemple : on connaît l’orientation du gradient en chaque


point de contour
Deux pixels voisins détectés "points de contour" peuvent
être reliés si les directions de leur gradient sont proches
Application : pour relier le pixel a au pixel b, b doit être un
des huit voisins de a dans la direction du contour en a
(φ(a)), soit :
π
|(φ(a) − φ(b))mod2π| <
2

Détection de contours dans les images – p. 59/7


Représentation par un graphe (3/3)

Détection de contours dans les images – p. 60/7


Recherche heuristique (1/3)

Soient a et b deux extrémités d’un contour


Pour tout pixel p situé sur un chemin solution, on définit
une fonction d’évaluation :

f (p) = g(p) + h(p)

où :
g(p) est le coût du chemin de a à p
h(p) est le coût du chemin de p à b
Une solution : L’algorithme A∗

Détection de contours dans les images – p. 61/7


Recherche heuristique (2/3)

Principe de l’algorithme A∗ :
n=a
tant que n /= b faire
Placer les successeurs de n dans L
Déterminer p tel que f (p) = minq∈L (f (q))
n=q
Ajouter p à C
fin tant que
si C est vide alors échec
sinon C contient le chemin optimal de a vers b
Quelques valeurs intervenant dans le calcul de h :
Importance de l’arête : || maxp (∇I(p))|| − ||∇I(p)||
Courbure : φ(p) − φ(p$ )
Distance à l’objectif : d = dist(p, b)
Détection de contours dans les images – p. 62/7
Recherche heuristique (3/3)

Exemple d’illustration de fonction coût : somme (inverse)


des modules du gradient

Détection de contours dans les images – p. 63/7


Programmation dynamique (1/4)

Technique de résolution de problèmes d’optimisation


On veut résoudre :

max{h(x1 , x2 , . . . , xn )}
xi

On ne possède pas de connaissance a priori sur h


Seule technique : énumération exhaustive des solutions
possibles

Détection de contours dans les images – p. 64/7


Programmation dynamique (2/4)

Soit n = 4 et le problème maxxi {h(x1 , x2 , x3 , x4 )} à


résoudre
Si h(·) = h1 (x1 , x2 ) + h2 (x2 , x3 ) + h3 (x3 , x4 )
On a alors :

f1 (x2 ) = max{h1 (x1 , x2 )}


x1
f2 (x3 ) = max{f1 (x2 ) + h2 (x2 , x3 )}
x2
f3 (x4 ) = max{f2 (x3 ) + h3 (x3 , x4 )}
x3

Et finalement :

max{h(x1 , x2 , x3 , x4 )} = max{f3 (x4 )}


xi x4

Détection de contours dans les images – p. 65/7


Programmation dynamique (3/4)

En généralisant :

f0 (x1 ) = 0
fn−1 (xn ) = max{fn−2 (xn−1 ) + hn−1 (xn−1 , xn )}
xn−1
max{h(x1 , x2 , . . . , xn )} = max{fn−1 (xn )}
xi xn

Soit la fonction coût :


n
* n
* n
*
S(x1 , . . . , xn ) = |∇I(xi )| − α |φ(xi ) − φ(xi−1 )| − β d(xi , xi−1 )
i=1 i=2 i=2
S(x1 , . . . , xn ) = S(x1 , . . . , xn−1 ) + |∇I(xn )| − α|φ(xn ) − φ(xn−1 )|
−βd(xn , xn−1 )
S(x1 , . . . , xn ) = S(x1 , . . . , xn−1 ) + f (xn−1 , xn )

Détection de contours dans les images – p. 66/7


Programmation dynamique (4/4)

On a donc (en posant n = k ) :

S(x1 , . . . , xk ) = max{S(x1 , . . . , xk−1 ) + f (xk−1 , xk )}


xk−1

Avec : S(x1 ) = |∇I(x1 )|


Application de l’algorithme de Dijkstra sur le graphe
G(S, A), où :
S est l’ensemble des sommets du graphe, valués par
la valeur du gradient au pixel correspondant
A est l’ensemble des arêtes du graphe, valuées par la
distance entre les deux pixels de contour qu’elles
relient

Détection de contours dans les images – p. 67/7


La transformée de Hough (1/2)

Permet de rechercher des formes particulières et


simples dans l’image des points de contour :
Détection de lignes
Détection de cercles, ellipses
Les formes géométriques ont une forme paramétrique :
La droite : y = ax + b ou ρ = x cos θ + y sin θ
Le cercle : (x − a)2 + (y − b)2 = r2
La facette plane : ax + by + c = z
Les surfaces quadratiques, cubiques :
z = a00 + a10 x + a20 y + a11 xy + a20 x2 + a02 y 2 + a21 x2 y + . . .

Détection de contours dans les images – p. 68/7


La transformée de Hough (2/2)

Principe : changer d’espace de représentation


)→ Passer de l’espace de l’image à celui des paramètres I → 0p ,
soit (x, y) → (a1 · · · ap )t
Algorithme général :
1. En chaque point, calculer la(les) vecteur(s) de paramètres le(s) plus
probable(s)
2. Dans l’espace 0p , pour chaque point (vecteur de paramètres),
calculer le nombre de points ayant choisi ce vecteur de paramètres
3. Garder le vecteur de paramètres apparu le plus souvent dans le choix
des pixels de l’image
L’espace discret des paramètres est également appelé accumulateur

Détection de contours dans les images – p. 69/7


La transformée de Hough : détection de droites (1/3)

Soit P (x, y) un pixel détecté point de contour. Ce point appartient à toutes


les droites d’équation ρ = x cos θ + y sin θ
On a deux données (x et y) et deux inconnues (ρ et θ), avec une infinité
de solutions possibles
On doit utiliser une deuxième contrainte, un point de contour Q(x$ , y $ )

Détection de contours dans les images – p. 70/7


La transformée de Hough : détection de droites (2/3)

Soit une image I de taille N × N , alors les droites ayant une intersection
avec I sont caractérisées par :

ρ ∈ [0, 2N ]
π
θ ∈ ] − , π[
2
Si on utilise un accumulateur de taille N × N , alors la précision sur le
√ 3π
résultat sera au mieux (∆ρ, ∆θ) = ( 2, 2N )
Exemple d’une image de taille 512 × 512 : (∆ρ, ∆θ) = (1.4, 0.5)
)→ En fait toutes les valeurs de l’accumulateur ne correspondent
pas à une droite traversant l’espace image
Chaque élément (ρ, θ) de l’accumulateur A est un compteur incrémenté
par les sources d’information (pixel) votant pour la droite

Détection de contours dans les images – p. 71/7


La transformée de Hough : détection de droites (3/3)

Calcul de l’accumulateur A en utilisant une carte de contours


comme espace image I :
1. A ← 0
2. Pour tout couple de pixels p et q de I
Calculer les coordonnées (ρ, θ) de la droite passant par p et q
ρ
Convertir les paramètres en indices : (ρ̃, θ̃) = ( ∆ρ θ
, ∆θ )
Mise à jour de l’accumulateur : A(ρ̃, θ̃) ← A(ρ̃, θ̃) + 1
3. fin pour
4. Garder le couple (ρ∗ , θ∗ ) pour lequel A(ρ∗ , θ∗ ) est maximal
Si on a n pixels de contour, la complexité est en O(n2 )

Détection de contours dans les images – p. 72/7


La transformée de Hough : détection de cercles

Un cercle de centre (a, b) et de rayon r a pour équation :

(x − a)2 + (y − b)2 = r2

L’accumulateur A est un tableau à 3 dimensions (a, b, r)


La cellule A(a, b, r) est augmentée de 1 si le point (a, b)
est à une distance r du point de fort gradient considéré
(x, y)
Complexité en O(n3 )
Pour une ellipse, il faut rajouter deux paramètres : la
largeur et la hauteur de l’ellipse ⇒ complexité en O(n5 )

Détection de contours dans les images – p. 73/7

Vous aimerez peut-être aussi