Application

1. Le détecteur de contours

La méthode de Sarkar et Boyer a été implémentée sous forme de procédure Matlab. Ainsi, on peut effectuer une détection de contours sur une image. Cependant, ce programme possède des paramètres qui influent beaucoup sur le résultat obtenu.

Le but de cette partie est donc d'ajuster les paramètres de l'algorithme en vue d'un fonctionnement optimal selon l'objectif de l'utilisateur. Cette étude sera faite de manière illustrée en prenant des exemples.

Ainsi, nous allons montrer l'influence des différents paramètres sur les résultats en utilisant deux images.  

2. Paramètres alpha et beta

2.1 Le paramètre alpha et les critères d'optimalité

L'expression de notre filtre est donné par l'équation différentielle suivante :

Le but de la méthode de Sarkar et Boyer est d'approximer directement une solution de cette équation pour obtenir une expression du filtre de contour. Une approximation 1D de ce filtre, pour des valeurs du critère MRC se situant entre 1,5 et 2,5 donne :

On a donc une correspondance entre les paramètres et les critères de performance. Si on remplace f(x) par son expression, on a :  

pour le critère de détection optimale de contours en forme de "marches d'escallier", et

pour le critère de résistance au bruit. Ainsi, on peut trouver le alpha qui maximise les deux critères en même temps.

On trace ces deux critères ainsi que leur produit en fonction de alpha :  

Graphe de MRC en fonction de alpha (en mauve), de en fonction de alpha (en violet) et du produit ( x  MRC )  en fonction de alpha (en rouge). 
 
  • On voit nettement que pour les valeurs importantes de alpha (alpha=1.5), on a le maximum du critère MRC. Ainsi, si l'utilisateur veut une bonne résistance au bruit, il faudra prendre alpha proche de 1.5.
  • Par contre, si on veut une détection maximale des contours, on prendra un alpha correspondant à un Sigma Lambda maximum : alpha=-1.
  • Pour satisfaire les deux critères en même temps, l'utilisateur devra maximiser le produit entre ces deux critères. Ceci donne une valeur de alpha de 0.312.

Exemple :  

Illustrons ce résultat avec une image : nous mettons en entrée de notre détecteur de contours une image d'un carré gris sur fond noir. On injecte du bruit et on analyse les résultats obtenus avec différentes valeurs du paramètre alpha.

 

Image de départ 

Un carré gris sur fond noir

Image bruitée 

Rapport Signal/Bruit  -4dB

Les résultats suivants ont été obtenus après passage de l'algorithme avec différentes valeurs de alpha :  

Alpha=-1  Alpha=0.3 Alpha=1.5

On remarque bien que plus alpha augmente, plus ne nombre de points parasites diminue : ceci vient du fait que le critère MRC augmente, ce qui donne une meilleure résistance au bruit. Ainsi, pour les alpha grands, l'algorithme résiste bien au bruit.
Par contre, on observe des contours moins bien localisés et moins précis : des valeurs de alpha plus petites donnent des contours plus francs et meilleurs.

Ainsi, un utilisateur qui travaille avec une image bruitée aura intéret à prendre un alpha de l'ordre de 1.5. Une utilisation "normale" de l'algorithme qui maximise les deux critères en meme temps nécessitera un alpha de 0.3.
 

2.2. Influence du paramètre beta

Le paramètre beta n'est pas relié a un critère de performance. Il vient de l'expression du filre qui est approximé par un produit d'un polynome et d'une exponentielle décroissante :  

 

Le paramètre beta influe donc sur la largeur du pic du filtre : plus beta est grand, plus le pic est serré.
Dans la détection de contours, un beta grand va permettre de détecter et de localiser les contours avec précision. Par contre, un beta faible donnera des contours plus vagues.

Voici les résultats obtenus avec différentes valeurs de beta :  

beta = 0.2 beta = 1 beta = 2

On voit que la détection de contours se fait plus nettement quand beta a des valeurs importantes : le pic est tres resserré et le moindre contour est détecté. Il en résulte un problème, la résistance au bruit; En effet, quand beta est grand, le bruit est pris pour des contours et on assiste a une détection médiocre de contours. Par contre, quand beta est faible, on a  une résistance au bruit et les contours sont moins bien détectés et on assiste à des effets de bord.

Pour une détection de contours performante, on choisit une valeur de beta intermédiaire, beta = 1.

3. Les seuils Zc et Zcph

La partie précédenta a permis de voir l'influence des paramètres alpha et beta sur les performances de la détection. Nous allons maintenant voir le role des seuils Zc e ZcPh dans la qualité des résultats de l'algorithme. Pour ceci, nous prendrons une image plus compliquée qui possède des caractéristiques différentes de l'image idéale utilisée auparavant.  

3.1. Le seuil Zc

Zc est un seuil qui va permettre de conserver uniquement les contours assez significatifs. Pour une image bruitée, beaucoup de contours viennent de points erronnés, ce qui sursegmente l'image. Le seuil Zc est donc utile pour supprimer tous les petits contours qui sont soit trop petits soit peu marqués.

Ce seuil (entre 0 et 255) est ramené à la valeur maximale de l'image de gradient de l'image. Pour définir un contour, il est donc nécessaire que la valeur du gradient au point considéré de l'image soit supérieur à ce seuil Zc. Ainsi, on ne conserve que les contours dont le gradient est important.

Nous allons faire des essais sur une image girl.ima avec différentes valeurs du seuil Zc. L'image de départ sera aussi bruitée avec un niveau de bruit de +6dB.  

  Sans bruit Avec un bruit de 6dB
Images de départ
Zc = 0 
Zc = 0.01

On voit nettement que l'image bruitée présente plus de contours que l'image parfaite, et ceci du fait que des pixels sont erronnés. Ainsi, la détection de contours sans seuil donne plus de contours dans l'image bruitée.

Quand on applique un seuil sur la détection de contours, tous les petits traits provenant de contours assez peu significatifs (on rappelle que le seuil s'effectue sur l'image de gradient) sont gommés. On obtient donc des contours plus réalistes et de bonne qualité.  

3.2. Le seuil ZcPh

Il existe un second seuil de détection utilisé dans l'algorithme de Sarkar et Boyer. ZcPh (pour Zc Phantom) sert à supprimer les faux contours de l'image.

Dans cette méthode, on détecte les points où le laplacien s'annule. On note que notre filtre optimum change de signe aux contours avec une pente positive, dans la direction du gradient. Cependant, si les maxima de la dérivée première sont localisés, les minima aussi (on a donc aussi une détection de points où le laplacien change de signe, mais avec une pente négative, dans la direction du gradient). Ces derniers points détectés constituent des contours fantomes.

Mathématiquement, on peut différencier ces deux sortes de contours en considérant la pente au point d'inflexion (zero crossing point).
Un contour authentique sera tel que :  

et un contour fantôme sera tel que :  

On veut conserver seulement les points des contours réels.

Dans l'algorithme, on seuille donc les contours avec ZcPh pour supprimer les contours fantomes. En pratique, ZcPh aura une valeur constante nulle, ZcPh = 0 . On peut voir l'effet de ce seuillage avec une image : on effectue une détection de contours sur l'image bruitée et l'image sans bruit avec et sans seuil :  

  Sans bruit Avec un bruit de 6dB
Images de départ
Pas de ZcPh 
Seuillage :
ZcPh = 0

Ainsi, on voit que ce seuillage permet d'obtenir des images de meilleure qualité en supprimant des contours fantômes. En pratique, on fait  systématiquement ce traitement dans l'algorithme.  

La combinaison des seuils Zc et ZcPh est très intéressante pour une détection de véritables contours. On obtient donc des bons résultats.

4. Conclusions

L'article de Sarkar et Boyer met en évidence un certain nombre d'idées intéressantes en matière de détection de contours.

Nous tenons a remercier tout particulièrement M. Boyer qui nous a gracieusement fourni une implémentation en matlab du filtre qu'il propose.  

Index Théorie Application