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