Vous êtes sur la page 1sur 14

Détection de contours :

approche générale
• Objectif
– Délimitation des objets
– Détection de points d’intérêt

• Méthodes dérivatives

– À partir du gradient ( ∇ vect. 2D), norme et direction
∂ 2I ∂ 2I
– Approximation de la dérivée 2nde par le Laplacien ∆ = 2 + 2
∂x ∂y
1,2 0,6 0,6
0,5
1 0,5
0,4
0,8 0,4 0,3

0,3 0,2
0,6
0,1
0,4 0,2 0

0,2 0,1 -0,1 0 5 10 15

-0,2
0 0
-0,3
0 5 10 15 0 5 10 15
-0,2 -0,1 -0,4

f(x) f’(x) f’’(x)


Principe des méthodes dérivatives
Laplacien trop bruité
pour être utilisé seul

Utilisation du gradient ∇ Utilisation du laplacien ∆
Calcul de l’image du gradient Calcul de l’image du laplacien
Calcul de l’image de la norme du Calcul de l’image de la norme du gradient
gradient
Calcul de l’image binaire B des passages
Calcul de l’image de la direction du par zéro du laplacien
gradient
Application du masque binaire B à l’image
Seuillage (avec hystérésis) de de la norme du gradient
l’image de la norme du gradient
Seuillage (avec hystérésis) de l’image de la
Elimination des non maxima locaux norme du gradient | B
dans la direction du gradient
Elimination des non maxima locaux dans la
Fermeture des contours direction du gradient
Fermeture des contours

∇ par filtrage linéaire passe-haut
• Gradient
Sobel c=2  +1 0 −1  +1 + c +1 
+ c 0 − c  + 0 + 0 + 0 
Prewitt c=1  +1 0 −1  −1 − c −1 
Rq : les filtres sont donnés pour des − c −1 0  0 +1 + c 
directions lignes – colonnes → cas de  −1 0 +1 −1 0 +1
directions diagonales :  0 +1 + c − c −1 0 

0 1 0 −1 0  0 1 1 1 0
1 2 0 − 2 −1 1 2 3 2 1
Opérateur MDIF 1 3 0 − 3 −1 0 0 0 0 0
1 2 0 − 2 −1  − 1 − 2 − 3 − 2 −1
0 1 0 −1 0   0 −1 −1 −1 0 

• Masque MDIF plus grand → - sensible au bruit mais localisation des contours - bonne
• Il existe aussi des généralisations de Sobel à des tailles (2d+1)×(2d+1)

La direction du gradient est l’argument du masque


Filtres de Kirsch : 8 masques qui maximise la norme du gradient → à π/8 près

 − 3 − 3 − 3 − 3 − 3 − 3 −3 −3 + 5 −3 + 5 + 5 + 5 + 5 + 5 + 5 + 5 −3 + 5 −3 −3  −3 −3 −3


 − 3 0 − 3 − 3 0 + 5 − 3 0 + 5 − 3 0 + 5  −3 0 −3 + 5 0 −3 + 5 0 −3 + 5 0 −3
+ 5 + 5 + 5 −3 + 5 + 5 − 3 − 3 + 5 − 3 − 3 − 3  −3 −3 −3  −3 −3 −3 + 5 − 3 − 3 + 5 + 5 −3
Filtre de Sobel : exemples
Image originale Norme du gradient Gradient vertical Gradient horizontal
∆ par filtrage linéaire passe-haut
• Laplacien
 + 0 −1 + 0  −1 −1 −1
4-connexité  −1 + 4 −1  8-connexité −1 + 8 −1
+ 0 −1 + 0  −1 −1 −1

1 filtre passe haut extrait l’information ‘complémentaire’ d’un filtre


passe-bas : Id = MPB+MPH

1 0 0 0  1 1 1 1 1 −1 −1 −1
Ex : 0 9 0  = 1 1 1 + −1 + 8 −1
9 0 0 0  9 1 1 1 9 −1 −1 −1
Coef. généralemt omis      
pour amplifier le résultat

• Ex.:

∇ par filtrage optimal (I)
Maximiser le rapport
• Critères de Canny signal à bruit
(i) Bonne détection, (ii) bonne localisation, (iii) faible multiplicité des maxima dus au bruit
⇒ Filtre impulsionnel à réponse finie (RIF) Minimiser la variance de l’erreur en distance

Solution de Canny : RIF


ψ(x) = a1eαxcosωx + a2eαxsinωx + a3e-αxcosωx +a4e-αxsinωx
• Filtre de Deriche : RII
−α3 Filtre de lissage puis
f X (x , y ) = .x .e −α x .(α y +1).e −α y = h( x ).f (y )
4 application d’un
−α3 opérateur différentiel
fY ( x , y ) = .y .e −α y .(α x +1).e −α x = h(y ).f ( x )
4
⇒ Gradient selon x = Image∗h(x)∗f(y) Solution de Deriche : RII / ψ(x) = [Cst/ω].e-α|x|.sinωx
Soit m / m.ω=α, alors m>>1 ⇒ ψ(x) ≅ h(x) = -α2.x.e-α|x|
Gradient selon y = Image∗h(y)∗f(x) Lissage ds la dir. ⊥ celle de h par le filtre f / f’=h :
f(y) = (α.|y|+1).e-α|y|
(f’(y) = α.sgn(y).e-α|y|+(α.|y|+1).(-α.sgn(y)).e-α|y| = h(y))
• Filtre de Shen - Castan
− β −β y  β 2 x −β x 
f X (x , y ) = .e . − . .e  = f (y ).(f 2 ( x ) − f1( x ))
2 2 x 
  Solution RII de Shen et Castan :
− β −β x  β 2 y −β y  f(x) = βe-β|x|, f1(x) = β.e-βx.u(x),
fY ( x , y ) = .e . − . .e  = f ( x ).(f 2 (y ) − f1(y )) f2(x) = β.e-β(-x).u(-x)
2 2 y 
 

∇ par filtrage optimal (II)
• Implantation du filtre de dérivation de Deriche
Décomposition entre 1 partie causale et 1 anti-causale c=−
(
1 − e −α )
2

−α −1 e −α
 −αi
h− ( i ) = c .i .e si i ≥ 0 ⇒ h z −1 =
si i < 0 − ( ) c .e .z
−α −1 − 2α − 2 ⇒ R1[i]=c.e .I[i-1]+2.e .R[i-1]-e .R[i-2]
-α -α -2α
 0 1 − 2.e .z + e .z
0 si i ≥ 0 − c .e −α .z
h+ ( i ) =  αi ⇒ h+ ( z ) = ⇒ R2[i]=-c.e-α.I[i+1]+2.e-α.R[i+1]-e-2α.R[i+2]
c .i .e si i < 0 −α
1 − 2.e .z + e − 2α 2
.z
Partie causale : h-(i)=c.i.e-iα.u(i)
|z|>1, TZ[u(i)] = 1/(1-z-1)
TZ[ai.x(i)] = X(z/a) ⇒ TZ[e-iαu(i)] = 1/(1-e-αz-1)
TZ[ik.x(i)] = (z.d/dz)kX(z) ⇒ TZ[ie-iαu(i)] = e-αz-1/(1-e-αz-1)2
R[i]=R1[i]+ R2[i]
Partie anti-causale : h+(i)=(-c).(-i).e(-i)(-α).u(-i)

• Implantation du filtre de lissage de Deriche


Décomposition entre 1 partie causale et 1 anti-causale b=
(1− e−α )2
1 + 2α .e −α − e − 2α
−α −1
f − (z −1) = b
1 + e .(α −1).z
⇒ R1[i]= b.I[i]+ b.e-α.(α-1).I[i-1]+2.e-α.R[i-1]-e-2α.R[i-2]
1 − 2.e −α .z −1 + e − 2α .z − 2
e −α .(α +1).z − e − 2α .z 2
f+ (z) = b ⇒ R2[i]= b.e-α.(α+1).I[i+1]-b.e-2α.I[i+2]+2.e-α.R[i+1]-e-2α.R[i+2]
1 − 2.e −α .z + e − 2α .z 2
Partie causale : f-(i)=b.(α.i+1).e-iα.u(i)
TZ[f-(i)] = b.α.e-αz-1/(1-e-αz-1)2+ b/(1-e-αz-1)
R[i]=R1[i]+ R2[i]
Partie anti-causale : f+(i)=[bα.(-i).e(-i)(-α)+ b.e(-i)(-α)-bδ(-i)].u(-i)
TZ[f-(i)] = b.α.e-αz/(1-e-αz)2+ b/(1-e-αz)-b
Filtrage Canny-Deriche : exemples
α=0.5 α=1 α=5

Image originale

Norme du
gradient
Direction du
gradient

Exemples de ∇ et ∆ .
B1 B2

|∇| Prewitt |∇| Sobel |∇| MDIF |∇| MM (B1) |∇| MM (B2)

∆ masque ∆ MM (B1) ∆ MM (B2)

Deriche α=1 Deriche α=2 Deriche α=3 Shen β=0.5 Shen β=1
Détection de contours (I)
 Seuillage avec hystérésis
– Détection des pixels de valeur ≥ sh
– Ajout des pixels de valeur ≥ sb et qui ∈ 1 composante
connexe ayant au moins 1 pixel de valeur ≥ sh
– Programmation avec 1 pile gérant la composante connexe :
1. initialisation de l’image des contours ImaCont à 0

2. Initialisation de la pile P avec les pixels / ∇ ≥ sh
3. Tant que |P|>0
a. Extraire M(xM,yM) de la pile
b. ImaCont(xM,yM) ← 1
c. Pour chaque k-connex (k=4 ou 8) voisin de M, noté VM :

Si VM ∉P et si ImaCont(xVM,yVM) ≠ 1 et si ∇ ≥ sb, alors
VM
ajouter VM à P
Image originale

Seuillage hystérésis sur


gradient : exemples
Seuillage hystérésis par
Norme du gradient Seuillage > 30 reconstruct. géodésique

Seuillage >72 +
élimination des bords
Blanc = seuillage >50, Seuillage hystérésis par
Norme du gradient Rouge = seuillage > 25 reconstruct. géodésique
Détection de contours (II)
 Détection des maxima locaux de la norme du gradient
dans la direction du gradient θ
π
Cas θ ∈ 0 ; 
 4 
(i-1,j+1)
A2
M1
(i,j-1) A0 A1 soit A0=(i,j), A1=(i,j+1), A2(i-1,j+1)
M2
(i,j) (i,j+1)
on cherche zM = α1A1+α2A2 avec α1+α2=1,
(i+1,j-1) (α1,α2)∈[0,1]2
alors α2=tanθ et α1=1-tanθ

  
donc ∇ (M1) = (1 − tan θ ). ∇ (i , j +1) + tan θ . ∇ (i −1, j +1)
  
∇ (M2 ) = (1 − tan θ ). ∇ (i , j −1) + tan θ . ∇ (i +1, j −1)

−π −π  −π  π π
Autres cas : θ ∈  ; θ ∈ ;0 θ ∈ ; 
 2 4   4   4 2 
Fermeture de contours
• Construction d’1 « look-up table » permettant d’indexer les
pixels candidats à la fermeture pour chaque configuration.
7
Codage configuration : V = ∑ x i .2 i où xi=1 si contour, 0 sinon
i =0
Ex. 3 2 1 T[16][0]=1 ; 3 2 1 T[136][0]=0 ; 3 2 1 T[8][0]=1
4 0 4 0 4 0
5 6 7
T[16][j]={1,0,7} ; 5 6 7 5 6 7
T[8][j]={0,7,6}

T[i][0] =1 si contour à prolonger (i∈[0,255])


T[i][j] avec j∈[1,3] donne les coordonnées relatives des 3 pixels candidats à la fermeture

• Ex. d’algorithme de fermeture : i.e. pixel / T[i][0] =1

– Pour chaque extrémité trouvée lors du balayage de l’image : 3p chemins

• Construction du sous-arbre de tous les chemins possibles de longueur p et du


coût associé à chaque nœud : somme des normes des gradients en chaque
point du chemin
• Sélection du nœud de coût maximum
• Prolongation du contour
Exemple
Filtre Sobel Seuillage hysérésis

Bruit gaussien σ=30

Après
fermeture
de contours

Itérations 1 (cyan), 2 (bleu) ; seuil sur coût (droite)

Vous aimerez peut-être aussi