Nous avons implémenté un premier snake sur des images en niveaux de gris.
Dans ce cas, l'attache à l'image va se faire en utilisant le gradient de l'image. Les lignes de contour correspondront en effet aux lignes de plus fort gradient.
Pour des images en couleur, on va pouvoir caractériser de plusieurs manières les lignes de contour. En effet, on dispose maintenant d'une information supplémentaire par rapport à l'image en niveaux de gris et qui est apportée par la chrominance. On peut imaginer par exemple que le changement de couleur entre deux objets de luminance équivalente définira un contour que la seule donnée de luminance n'aurait pas permis de détecter.
Nous avons testé plusieurs caractéristiques pour déterminer les contours sur l'image et ainsi attirer le snake vers eux. Par exemple, nous avons pris:
Auparavant on réalise un petit pré-traitement sur les images avant d'appliquer le snake. En effet, celui-ci a tendance à rester coincé sur la moindre aspérité de l'image: on va commencer par effectuer un filtrage médian.
Sur cette image les trois sortes de gradient ont été testées. Les différents coéfficients apportés aux forces dérivées internes, de l'image et de contrainte (dans notre cas une force pour imposer une distance minimale entre deux points consécutifs du snake) ont besoin d'être réevalués pour chaque gradient utilisé. Ici l'information couleur apporte vraisemblablement quelque chose, puisqu'avec la luminance seule le snake a du mal à se coller contre le contour. C'est l'utilisation des trois composantes colorées à travers le maximum des gradients qui permettra sur cette image peu contrastée en luminance d'obtenir un contour satisfaisant.
Pour le maximum des gradients par exemple on obtient:
![]() |
![]() |
|
|
Position originale du snake au debut de l'algorithme |
Position finale du snake en utilisant le maximum des gradients |
Avec la luminance seule, le snake reste coincé loin du contour.
![]() |
![]() |
|
|
Snake obtenu avec la maximum des trois gradients |
Position finale du snake en utilisant la luminance Y |
Le snake a été testé sur cette image de nez. Le contour se trouve sur la droite entre deux objets de couleurs très différentes.
![]() |
![]() |
|
|
Position originale du snake au debut de l'algorithme |
Position finale du snake en utilisant la luminance Y |
Encore une fois les résultats sont extremement similaires, du moins pour Y et le maximum des gradients. Par contre, nous n'avons pas obtenu de résultats satisfaisants en utilisant seulement une des composantes, du fait que le contour sépare une zone bleue d'une zone rouge.
![]() |
![]() |
|
|
Snake obtenu avec la maximum des trois gradients |
Position finale du snake en utilisant la luminance Y |
Pour jeter un coup d'oeil sur le listing du code