Algorithme de Sobel

L'algorithme de Sobel est un opérateur utilisé en traitement d'image pour la détection de contours. C'est un des opérateurs les plus simples qui donne cependant des résultats corrects.



Catégories :

Traitement d'image

Page(s) en rapport avec ce sujet :

  • Définitions d'algorithme de sobel, synonymes, antonymes, dérivés d'algorithme de sobel, dictionnaire analogique d'algorithme de sobel (français) (source : dictionnaire.sensagent)
Exemple de détection de contours avec opérateurs Sobel, ici : G=abs (Gx) +abs (Gy).

L'algorithme de Sobel est un opérateur utilisé en traitement d'image pour la détection de contours. C'est un des opérateurs les plus simples qui donne cependant des résultats corrects.

Pour faire simple, l'opérateur calcule le gradient de l'intensité de chaque pixel. Ceci indique la direction de la plus forte variation du clair au sombre, mais aussi le taux de changement dans cette direction. On connaît alors les points de changement tout à coup de luminosité, correspondant certainement à des bords, mais aussi l'orientation de ces bords.

En termes mathématiques, le gradient d'une fonction de deux variables (ici l'intensité suivant les coordonnées de l'image) est un vecteur de dimension 2 dont les coordonnées sont les dérivées selon les directions horizontale et verticale. En chaque point, le gradient pointe dans la direction du plus fort changement d'intensité, et sa longueur représente le taux de variation dans cette direction. Le gradient dans une zone d'intensité constante est par conséquent nul. Au niveau d'un contour, le gradient traverse le contour, des intensités les plus sombres aux intensités les plus claires.

Formulation

L'opérateur utilise des matrices de convolution. La matrice (généralement de taille 3×3) subit une convolution avec l'image pour calculer des approximations des dérivées horizontale et verticale. Soit \mathbf{A} l'image source, \mathbf{G_x} et \mathbf{G_y} deux images qui en chaque point contiennent des approximations respectivement de la dérivée horizontale et verticale de chaque point. Ces images sont calculées comme suit :


\mathbf{G_x} = \begin{bmatrix} 
+1 & 0 & -1 \\
+2 & 0 & -2 \\
+1 & 0 & -1 
\end{bmatrix} * \mathbf{A}
\quad \mbox{et} \quad 
\mathbf{G_y} = \begin{bmatrix} 
+1 & +2 & +1 \\
0 & 0 & 0 \\
-1 & -2 & -1 
\end{bmatrix} * \mathbf{A}

En chaque point, les approximations des gradients horizontaux et verticaux peuvent être combinées comme suit pour obtenir une approximation de la norme du gradient :

\mathbf{G} = \sqrt{ \mathbf{G_x}ˆ2 + \mathbf{G_y}ˆ2 }

On peut aussi calculer la direction du gradient comme suit :

\mathbf{\Theta} = \operatorname{arctan}\left({ \mathbf{G_y} \over \mathbf{G_x} }\right)

où, par exemple, \mathbf{\Theta} vaut 0 pour un contour vertical plus foncé à gauche.

Précisions

Puisque l'intensité d'une image numérique est discrète, les dérivées de cette fonction ne peuvent pas être définies si ce n'est sous une hypothèse de continuité de la fonction intensité continue qui a été échantillonnée. En pratique on peut calculer des approximations plus ou moins fidèles du gradient en chaque point.

L'algorithme de Sobel calcule une approximation assez incorrecte du gradient d'intensité, mais cela suffit en pratique dans énormément de cas. En effet, il n'utilise qu'un voisinage (généralement de taille 3×3) autour de chaque point pour calculer le gradient, et les poids utilisés pour le calcul du gradient sont entiers.

Détails d'implémentation

De par sa simplicité, l'algorithme de Sobel peut être facilement implémenté de manière logicielle ou même matérielle : uniquement huit points autour du point reconnu sont nécessaires pour calculer le gradient. Ce calcul utilise simplement des calculs sur les entiers. Qui plus est , les filtres horizontal et vertical sont séparables :

\begin{bmatrix} 
-1 & 0 & +1 \\
-2 & 0 & +2 \\
-1 & 0 & +1 
\end{bmatrix} = \begin{bmatrix} 
1 \\
2 \\
1  
\end{bmatrix} * \begin{bmatrix} 
-1 & 0 & +1
\end{bmatrix} \quad \quad
\begin{bmatrix} 
+1 & +2 & +1 \\
0 & 0 & 0 \\
-1 & -2 & -1 
\end{bmatrix} = \begin{bmatrix} 
+1 \\
0 \\
-1  
\end{bmatrix} * \begin{bmatrix} 
1 & 2 & 1
\end{bmatrix}

et les deux dérivées \mathbf{G_x} et\mathbf{G_y} peuvent être calculées comme suit :


\mathbf{G_x} = \begin{bmatrix} 
1 \\
2 \\
1
\end{bmatrix} * \begin{bmatrix} 
-1 & 0 & +1  
\end{bmatrix} * \mathbf{A}
\quad \mbox{et} \quad 
\mathbf{G_y} = \begin{bmatrix} 
+1 \\
0 \\
-1  
\end{bmatrix} * \begin{bmatrix} 
1 & 2 & 1
\end{bmatrix} * \mathbf{A}

La séparabilité peut être mise à profit dans certains types d'implémentation pour permettre moins d'opérations lors du calcul.

Plus principalement, en divisant par quatre, ces formules montrent que la dérivation dans une direction est associée à un lissage triangulaire dans l'autre direction conçu pour éliminer les «faux contours», la même technique étant utilisée dans le filtre de Prewitt avec un lissage rectangulaire qui introduit des changements de phase (voir lissage de l'image).

Voir aussi

Références

Lien externe

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_Sobel.
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