Algorithme de Canny

L'algorithme de Canny est utilisé en traitement d'images pour la détection des contours. L'auteur l'a conçu pour être optimal suivant trois critères clairement explicités ...



Catégories :

Traitement d'image

Page(s) en rapport avec ce sujet :

  • Trouvez ici un message a propos d'algo canny, C / C++ / C++. NET. (source : cppfrance)

L'algorithme de Canny (1986) est utilisé en traitement d'images pour la détection des contours. L'auteur l'a conçu pour être optimal suivant trois critères clairement explicités :

  1. bonne détection : faible taux d'erreur dans la signalisation des contours,
  2. bonne localisation : minimisation des distances entre les contours détectés et les contours réels,
  3. clarté de la réponse : une seule réponse par contour et pas de faux positifs

Mise en œuvre

Réduction du bruit

La première étape est de diminuer le bruit de l'image originale avant d'en détecter les contours. Ceci permet d'éliminer les pixels isolés qui pourraient induire de fortes réponses lors du calcul du gradient, conduisant ainsi à de faux positifs.

Un filtrage gaussien 2D est utilisé (voir Lissage de l'image), dont voici l'opérateur de convolution :

G(x,y)=\frac{1}{2\pi\sigmaˆ2}eˆ{-\frac{xˆ2+yˆ2}{2\sigmaˆ2}}

et un exemple de masque 5×5 discret avec σ=1, 4 :

h=\frac{1}{189}\begin{bmatrix}
2 & 4 & 5 & 4 & 2\\
4 & 9 & 12 & 9 & 4\\
5 & 12 & 15 & 12 & 5\\
4 & 9 & 12 & 9 & 4\\
2 & 4 & 5 & 4 & 2
\end{bmatrix}

Habituellement, un filtre est de taille plus réduite que l'image filtrée. Plus le masque est grand, moins le détecteur est sensible au bruit et plus l'erreur de localisation grandit.

Gradient d'intensité

Après le filtrage, l'étape suivante est d'appliquer un gradient qui retourne l'intensité des contours. L'opérateur utilisé sert à calculer le gradient suivant les directions X et Y, il se compose d'une paire de deux masques de convolution, un de dimension 3×1 et l'autre 1×3 :

G_x =
\begin{bmatrix}
-1 & 0 & 1
\end{bmatrix}\qquad;\qquad
G_y =
\begin{bmatrix}
1 \\
0 \\
-1
\end{bmatrix}

La valeur du gradient en un point est approximée par la formule :

| G | = | Gx | + | Gy |

Direction des contours

Les orientations des contours sont déterminés par la formule :

\theta = arctan(\frac{G_y}{G_x})

Nous obtenons finalement une carte des gradients d'intensité en chaque point de l'image accompagnée des directions des contours.

Suppression des non-maxima

La carte des gradients obtenue auparavant apporte une intensité en chaque point de l'image. Une forte intensité indique une forte probabilité de présence d'un contour. Cependant, cette intensité ne suffit pas à décider si un point correspond à un contour ou non. Seuls les points correspondant à des maxima locaux sont reconnus comme correspondant à des contours, et sont conservés pour la prochaine étape de la détection.

Un maximum local est présent sur les extrema du gradient, c'est-à-dire à l'endroit où sa dérivée s'annule.

Seuillage des contours

La différenciation des contours sur la carte générée se fait par seuillage à hysteresis.

Cela nécessite deux seuils, un haut et un bas; qui seront comparés à l'intensité du gradient de chaque point. Le critère de décision est le suivant. Pour chaque point, si l'intensité de son gradient est :

Une fois ceci réalisé, l'image obtenue est binaire avec d'un côté les pixels appartenant aux contours et les autres.

Paramètres

Les deux paramètres principaux déterminant le temps de calcul et l'acuité de l'algorithme sont la taille du filtre gaussien et les deux seuils.

Il n'existe pas aujourd'hui de méthode générique pour déterminer des seuils produisant des résultats satisfaisants sur l'ensemble des types d'images.

Une démonstration en ligne (anglais) est parfois utilisée pour étudier l'influence des paramètres : http ://matlabserver. cs. rug. nl

Références

Liens externes


Recherche sur Amazon (livres) :



Ce texte est issu de l'encyclopédie Wikipedia. Vous pouvez consulter sa version originale dans cette encyclopédie à l'adresse http://fr.wikipedia.org/wiki/Algorithme_de_Canny.
Voir la liste des contributeurs.
La version présentée ici à été extraite depuis cette source le 07/04/2010.
Ce texte est disponible sous les termes de la licence de documentation libre GNU (GFDL).
La liste des définitions proposées en tête de page est une sélection parmi les résultats obtenus à l'aide de la commande "define:" de Google.
Cette page fait partie du projet Wikibis.
Accueil Recherche Aller au contenuDébut page
ContactContact ImprimerImprimer liens d'évitement et raccourcis clavierAccessibilité
Aller au menu