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é.
7 juin 2011 à 17:30
Peace,
Gaara
12 mars 2010 à 22:31
8 nov. 2009 à 23:27
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+
5 nov. 2009 à 13:55
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+
5 nov. 2009 à 11:27
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.
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.