|
|||||||||||||||||||||||||||||||||||||||||||||
|
Après les quelques explications du mois dernier sur les notions de base du traitement d'images, continuons notre longue route sur les chemins sinueux qui mènent à la reconnaissance des formes et à l'interprétation automatique des scènes. On entend par "scène", un ensemble d'objets fixés (numérisés) par un procédé quelconque sur un support numérique. En fait, les auteurs ne se sont pas véritablement penchés sur les objets eux-mêmes mais sur leurs contours. En effet, l'idée sous-jacente n'est pas triviale, bien que l'idée même d'un dessin passe dans un premier temps par celle de contours. L'extraction de ces derniers nécessite des traitements qui se sont révélés de plus en plus complexes. Nous essaierons ici d'en tirer les étapes principales et de montrer leur intérêt primordial dans tous les types d'imagerie. Définitions des contours Comment définir un contour ? Une frontière entre zones homogènes ? Oui, mais la notion de frontière est abstraite. Est-ce seulement une différence de couleur ou d'intensité ou doit-on tenir compte des caractéristiques intrinsèques des objets qui composent l'image ? L'image des dérivées Figure 1 dF/dy = DF/Di = Fi(i,j) = F(i+1) - F(i,j) (equ 1) et dF/dx = DF/Dj = Fj(i,j) = F(i,j+j) - F(i,j) (equ 2) avec F(i,j) la valeur d'un pixel de l'image F au point (i,j) En d'autres termes, on définit la dérivée discrète d'une image F par la différence deux à deux des valeurs d'un pixel avec son voisin. Cette approximation s'appelle un schéma dérivatif et permet de simuler la dérivée (ou gradient) d'une image dans la direction x (equ 1) ou y (equ 2). Des dérivées au vecteur gradient Pourquoi toutes ces opérations ? Tout simplement parce qu'il paraît logique que plus la différence d'un pixel à son voisin est importante et, plus, la probabilité d'être sur un bord d'objet est forte (notion de transition). En fait, un bord est défini par la combinaison des dérivées de l'image en x et de celles en y (Cf. figure 2). Ce vecteur gradient, pour devenir utilisable doit être normé de la façon suivante : |GF(i,j)| = max {|Fj(i,j)| , |Fi(i,j)| } (equ 3) ou GF(i,j)| = sqrt ( Fj(i,j)**2 , Fi(i,j)**2 ) (equ 4) Sqrt est la fonction racine carrée et ** signifie "puissance". Figure 2 Cette simplicité dans l'application de ces opérateurs cache malheureusement deux principales lacunes : d'une part, la présence de bruit dans l'image peut perturber ces opérateurs et, d'autre part, suite aux définitions, le calcul des gradients sur le bord de l'image est impossible. Pour ce dernier cas, les valeurs des dérivées au bord de l'image sont souvent approximées par les valeurs de l'image elle-même ou par la dérivée des pixels suivants. En ce qui concerne les problèmes de sensibilité au bruit, d'autres opérateurs sont nécessaires pour faire face à cette difficulté. Des opérateurs plus robustes Le choix d'un opérateur n'est pas simple et bien souvent un compromis doit être trouvé entre rapidité d'exécution, place mémoire utilisée et qualité du résultat. Les opérateurs gradient présentés plus haut sont rapides et économes en mémoire mais souffrent d'une sensibilité au bruit de l'image. Nous avons étudié dans l'article précédent les filtres dits de lissage (ou passe-bas) comme le filtre moyen ou médian. C'est donc dans cette optique de combinaison de l'idée d'un signal épuré du bruit d'acquisition et d'une recherche des objets par leurs contours que les études ont mené à des opérateurs plus complexes. L'opérateur "Ndif" est un exemple, il peut être formulé par le passage de deux masques qui décrivent respectivement les estimations des composantes x et y des vecteurs gradients de l'image :
L'image de départ convoluée avec ces deux masques donne deux images : celle des gradients x et celles des gradients y, et comme plus haut, il suffit de calculer la norme du gradient et d'extraire les maximums locaux pour obtenir les contours. Les opérateurs du 2e ordre Tous les opérateurs présentés jusqu'ici sont dits du premier ordre, mais il est possible, sans entrer dans les méandres des grandes théories du traitement de signal de calculer sur l'image, des dérivées secondes (ou laplaciens) et, de ce fait d'extraire des contours plus précis en détectant leurs passages par zéro. Le Laplacien d'une image F est défini par : DF(x,y) = ( d**2 F / d x**2 ) + ( d**2 F / d y**2 ) Étant donné que nous travaillons sur un signal échantillonné (discret), le calcul du laplacien peut s'effectuer par le passage du masque suivant :
A partir de cette image des dérivées secondes, il faut simplement rechercher, sur l'image des gradients, tous les endroits oÙ les valeurs d'un pixel à l'autre passent la barre du zéro (dans un sens ou dans l'autre). Ces endroits représentent les bords détectés. Les opérations morphologiques Pour terminer sur l'extraction de contours, une méthode assez simple permet d'obtenir des contours fermés d'objets en utilisant la morphologie mathématique. Cette approche du traitement d'images utilise un masque (appelé élément structurant) qui détermine les pixels du voisinage courant qui doivent subir l'opération. Sans vouloir rentrer dans les détails, voici les trois opérations successives à effectuer pour obtenir ce fameux gradient morphologique. L'érosion morphologique L'érosion d'une image consiste à calculer dans l'environnement de l'élément structurant "l'inf" des valeurs (la valeur minimum). Cette opération appelée érosion, diminue le volume des formes et permet de "lisser" l'image ce qui revient à éliminer les artefacts d'acquisitions et les points aberrants. La dilatation morphologique La dilatation d'une image, au contraire de l'érosion, calcule le "sup" de l'environnement défini par l'élément structurant. Cette valeur maximum sur le voisinage du pixel courant permet d'augmenter le volume des objets. La définition d'un contour par ces deux opérations peut se résumer au calcul de la soustraction de l'image de l'érosion à celle de la dilatation. On obtient alors, une approximation des contours internes et externes des objets de l'image originale (Cf. figure 3). Figure 3 Contours Internes = Image Originale - Image Érodée Contour Externes = Image Originale - Image Dilatée Image des contours = Image Dilatée - Image Érodée Le seuillage des images Par définition, une image des contours doit comporter deux classes : le fond (par exemple en noir) et les traits des contours (en blanc). Pour cela, il faut seuiller les images résultats à un seuil défini par l'utilisateur afin de partitionner l'image dans ces deux groupes de pixels. Conclusion Après avoir étudié quelques méthodes de détection de contours, l'une des prochaines étapes sera de fournir la liste des objets présents dans l'image et donc de "coder" les contours fermés sous forme de listes de points. Une fois cette liste de points établie, l'image sera représentée par des ensembles clairement définis et pourra subir des débuts de reconnaissance des formes.
|