Analyse d'image

Extraction et fermeture des contours

Caractéristiques

Langages C++
Librairies CImg
Gestionnaire de version Mercurial
Origine TP (Master 2 IMAGE : Acquisition, Analyse et Traitements d'Images)
Licence LGPL

Description

L'objectif de ce projet fut la réalisation d'un programme permettant de détecter les contours dans une image, puis de les fermer. La détection des contours d'une image se fait en quatre étapes. La première est l'application d'un opérateur sur l'image, ou convolution. Pour ce projet plusieurs filtres ont été implémentés : Prewitt, Sobel, Kirsch, Robert et Laplace, certains pouvant avoir différentes variantes. A partir du résultat de la convolution, on calcule le gradient et le module pour chaque pixel de l'image.

La secondé étape est l'application d'un seuil sur chaque pixel en fonction de son gradient pour ne garde que les pixels supposés comme appartenant à un contour. Trois algorithmes ont été réalisés : le seuil global, qui effectue un choix binaire sur la valeur du gradient, le seuil local, qui calcule la moyenne dans une fenêtre de taille réduite, et enfin le seuil hystérésis permettant de choisir une valeur minimale et maximale.

La troisième étape est l'affinage. Celui-ci est fait en regardant pour chaque pixel si la valeur des deux pixels voisins directs dans une direction donnée est plus élevée. Si oui le pixel est éliminé, sinon il reste un candidat pour le contour.

La dernière étape est la fermeture des contours. Dans l'algorithme implémenté, on part de chacun des candidats, puis en utilisant le gradient sur une fenêtre donnée on va essayer de relier les extrémités de segments. Une pile permet de mémoriser le chemin courant, et une deuxième permet de mémoriser les pixels déjà testés afin de ne pas boucler.

Détection des formes

Description

Dans ce projet, on utilise l'extraction de contours faites précédemment pour détecter des formes dans les images. Pour cela on fait une transformée de Hough sur l'image ne contenant que des contours (dans l'espace polaire ou cartésien). Cela permet par exemple d'extraire les intersections entre des lignes. Ensuite en utilisant les intersections entre les lignes on cherche à reconstituer les formes.

Votre pseudo :
Votre commentaire :
Convertissez le nombre binaire suivant en base décimale : captcha
Envoyer