Détection des droites dans une image : hough

Soyez le premier à donner votre avis sur cette source.

Vue 19 105 fois - Téléchargée 8 069 fois

Description

Ce programme est une application direct de la transformée de Hough.
Le but de ce programme est de détecter les principales droites de l?image.
Le principe de la transformée de Hough est développé dans la source :

Le traitement des images est le suivant:
1) À partir de l'image en niveaux de gris on calcule le gradient à partir du filtre de Sobel.
2) On binarise l'image avec un seuil choisi par l'utilisateur.
3) On calcule la transformée de Hough de l'image
4) On binarise cette transformée avec un second seuil choisi par l'utilisateur
5) On reconstruit l'image en calculant la transformée de Hough inverse.

Conclusion :


Il faut faire attention de traiter des images de taille 200 px par 200 px. Il n'y a pas de protections au cas où ce critère ne soit pas respecté.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
1
Date d'inscription
mercredi 14 octobre 2009
Statut
Membre
Dernière intervention
7 juin 2011

Been voilà, je voulais savoir si quelqu'un à réussi à achever la détection des droites avec la transformée de Hough version Java et surtout les droites parallèles.
Peace,
Gaara
Messages postés
18
Date d'inscription
jeudi 28 décembre 2000
Statut
Membre
Dernière intervention
12 avril 2010

s'il vous plait NICO7854 comment je peux appliquer le transformé de hough avec matlab j'ai essayé beaucoup mais pas de résultat, merci d'avance
Messages postés
4
Date d'inscription
mercredi 4 novembre 2009
Statut
Membre
Dernière intervention
8 novembre 2009

Merci pour ta réponse mais j'ai trouvé plus simple avec Matlab. J'ai réussi à tout faire (avec l'aide d'internet quand même) ;).

Ps : Jpense que tu t'en "fou" mais si tu es intéressé je peux te le passer.

Et encore merci pour tout ceux qui m'ont aidé.

A+
Messages postés
1054
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
9 juillet 2013
6
J'ai retrouvé un vieux code pour calculer le barycentre d'objet connexe:

bool CImage::Barycentre(CImage *ImgDest)
{
if(hBmp==0){
MessageBox(NULL,"Barycentre : L'image source est vide",
NULL,MB_OK|MB_ICONWARNING);
return 0;
}
if(ImgDest==0)
ImgDest=this;

POINT Pt;
int i,j,Pij,X,Y,k,l,cpt,MoyenneX,MoyenneY;
bool **Buffer;

queue Fifo,FifoSave;

CImage ImgTmp(this);
ImgDest->Copy(this);
ImgDest->Fill(0,0,0);

//Cette image permet de visualiser les pixels déjà visités.
Buffer=AllocT_bool(Width,Height,FALSE);

//Pour tous les pixels de l'image
for(i=0;i<Width;i++)
for(j=0;j<Height;j++)
if(Buffer[i][j]==FALSE)
{
Buffer[i][j]=TRUE;
Pij=(int) ImgTmp.ucBits[(i+j*Width)*4];
if(Pij!=255)
continue;

Pt.x=i;Pt.y=j;
Fifo.push(Pt);
FifoSave.push(Pt);

do
{
Pt=Fifo.front();
Fifo.pop();
X=Pt.x;Y=Pt.y;

for(k=-1;k<=1;k++)
for(l=-1;l<=1;l++)
if(X+k>=0 && Y+l>=0 && X+k<Width && Y+l<Height)
if(!(k==0 && l==0))
if(Buffer[X+k][Y+l]==FALSE && ImgTmp.ucBits[(X+k+(Y+l)*Width)*4] == 255)
{
Buffer[X+k][Y+l]=TRUE;
Pt.x=X+k;Pt.y=Y+l;
Fifo.push(Pt);
FifoSave.push(Pt);

}

}
while(!Fifo.empty());
if(FifoSave.empty())
continue;

cpt=0;
MoyenneX=0;
MoyenneY=0;
while(!FifoSave.empty())
{
Pt=FifoSave.front();
FifoSave.pop();
MoyenneX+=Pt.x;
MoyenneY+=Pt.y;
cpt++;
}
ImgDest->SetPixel((int)((double) MoyenneX/(double)cpt),(int)((double) MoyenneY/(double)cpt),255,255,255);
}

SetBitmapBits (ImgDest->hBmp,(Width*Height)*4,ImgDest->ucBits);
ImgDest->ImgType=BIN;
DesAllocT_bool(Buffer,Width);

return true;
}

A+
Messages postés
4
Date d'inscription
mercredi 4 novembre 2009
Statut
Membre
Dernière intervention
8 novembre 2009

Merci pour vos réponses. J'ai essayé d'utiliser ImAnalyse, pour faire les contours c'est pas très durs mais par contre trouver les barycentres de chaque zone et avoir leurs coordonnées j'ai pas réussi.
Mais de toute façon je programmerai sur Matlab, j'ai aperçu une fonction sur ce logiciel qui permettait de faire les contours directement. Mais après pour avoir les coordonnées de chaque point dans un tableau, je ne vois pas du tout comment faire.
La programmation, le traitement d'image et moi ne vont pas très bien ensemble.
Merci pour votre aide.
Afficher les 51 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.