Le but de ce projet est d'effectuer une détection de contour
en recherchant ces contours sur une image construite par approximation
splines. Cette approximation consiste à remplacer localement l'image
par le produit (en x et en y) de deux polynômes. Cette approximation
est décrite dans la partie I.
On effectue ensuite une recherche de contour
en calculant le lieu de maximums du gradient dans la direction du gradient,
ce qui peut être effectuer aisement puisque l'on dispose d'une fonction
f(x,y) représentant l'image; ceci sera decrit dans la partie
II. La partie III présentera
les résultats obtenus.
L'interpolation spline choisie pour ce projet est la suivante (i = E(x) et j =E(y), parties entières)
F(x,y) = Hj-1(x)C3(y-j)+Hj(x)C2(y-j)+Hj+1(x)C1(y-j)+Hj+2(x)C0(y-j)
On verifie bien que F(x,y) = fi,j lorsque x et y sont
entiers.
D(x,y) = (gt . H .g) / (gt . g)
avec g le gradient et H la matrice des derivées secondes.
Les différentes derivées de F(x,y) sont aisement calculées
analytiquement puisque ce sont des combinaisons linéaires des derivées
des polynômes C présentés au paragraphe précedent.
Dès lors que l'on dispose de cette fonction D(x,y), on peut en rechercher
les zéros et marquer ces points comme faisant partie des contours.
Un seuillage sur les valeurs trop faibles de D(x,y) est effectué
pour supprimer du bruit.
Image originale |
![]()
|
On observe que la plupart des contours sont detectés, mais que
lorsque le contraste au niveau du contour est faible, rien n'est detecté,
notamment pour le couloir partant sur la gauche au premier plan. Les dalles
sont elles bien detectées mais de facon peu precise. Notons que
la détection des contours est effectuée sur une grille deux
fois plus précise que l'image originale d'ou la différence
de taille entre les deux images. Il en sera de même pour tous les
autres exemples. On remarque aussi que les gradients de luminosité
sur les surfaces
planes ne sont pas detectés comme étant des contours
ce qui est plutôt un bon point pour cette méthode.
Image originale |
![]()
|
Pour cette image où les zones delimitées par les contours
sont assez homogènes avec des textures assez simples, l'algorithme
ne se debrouille pas trop mal. De nombreux contours sont detectés.
Mais bizarrement des contours qui auraient pu sembler évidents à
detecter comme celui du fruit sombre au milieu de la corbeille, ne le sont
pas. Les contours dans la texture du panier sont detectés mais pas
de facon precise: il aurait peut être fallut effectuer la recherche
de contours sur une grille encore plus fine.
Image originale |
![]()
|
Ici, les contours tres marqués sont les contours rectilignes
des bassins: ceux-ci sont bien detectés. Les contours rectilignes
du bâtiment sont
eux aussi reconnus de même que les grandes dalles blanches situées
au centre. Il ne faut pas trop s'inquiéter en ce qui concerne les
arbres ou la pelouse: un filtrage mieux adapté en entrée
aurait sûrement permis d'éliminer ces faux contours.
Image originale |
![]()
|
Sur cette derniere image, la détection du visage et des mains
peut être considerée comme tout à fait convainquante
bien que peu precise.
On retrouve quelques contours dans les cheveux mais ceux-ci ne sont
que de pietre qualite