cs_salma2011
Messages postés25Date d'inscriptionlundi 24 novembre 2008StatutMembreDernière intervention17 juin 2011
-
23 mai 2009 à 23:07
Pistol_Pete
Messages postés1054Date d'inscriptionsamedi 2 octobre 2004StatutMembreDernière intervention 9 juillet 2013
-
3 juin 2009 à 09:12
Salam tt le monde..
je veux obtenir la matrice des suivi des contours d'une image apres la segmentation mais je sais pas comment la faire.
Pour mieux expliquer je dois obtenir a la fin, un fichier qui contient les coordonnées des pixels du contour..j'ai arriveé à faire la segmentation avec differents methodes mais je sais pas comment continuer pour atteindre mon but.
Pistol_Pete
Messages postés1054Date d'inscriptionsamedi 2 octobre 2004StatutMembreDernière intervention 9 juillet 20137 24 mai 2009 à 10:14
Salut
Pour faire cela, il faut utiliser l'algorithme de Freeman. Cet algo te stokera dans un vecteur tous les pixels de ton contour. Il suffira alors de tous écrire dans un fichier.
A+
____________________________________________________________________________
Mon site internet :
http://ImAnalyse.free.fr
Pistol_Pete
Messages postés1054Date d'inscriptionsamedi 2 octobre 2004StatutMembreDernière intervention 9 juillet 20137 25 mai 2009 à 08:33
Voici un exemple d'implémentation de l'algorithme de freeman:
//Next : fonction permettant de selectionner le prochain pixel à traiter dans
//l'algorithme de Freeman.
void Next(int *i,int *j,int *Dir,UCHAR *ucBits,int Width)
{
int Dir_Recherche;
int k;
for(k=0;k<8;k++)
{
Dir_Recherche=(*Dir-k-1)%8+1;
if(Dir_Recherche<=0)
Dir_Recherche=8+Dir_Recherche;
switch(Dir_Recherche)
{
case 1:if(ucBits[((*i+1)+(*j-1)*Width)*4]==255){*i+=1;*j-=1;*Dir=Dir_Recherche; return;}
break;
case 2:if(ucBits[((*i)+(*j-1)*Width)*4]==255){*j-=1;*Dir=Dir_Recherche; return;}
break;
case 3:if(ucBits[((*i-1)+(*j-1)*Width)*4]==255){*i-=1;*j-=1;*Dir=Dir_Recherche; return;}
break;
case 4:if(ucBits[((*i-1)+(*j)*Width)*4]==255){*i-=1;*Dir=Dir_Recherche; return;}
break;
case 5:if(ucBits[((*i-1)+(*j+1)*Width)*4]==255){*i-=1;*j+=1;*Dir=Dir_Recherche; return;}
break;
case 6:if(ucBits[((*i)+(*j+1)*Width)*4]==255){*j+=1;*Dir=Dir_Recherche; return;}
break;
case 7:if(ucBits[((*i+1)+(*j+1)*Width)*4]==255){*i+=1;*j+=1;*Dir=Dir_Recherche; return;}
break;
case 8:if(ucBits[((*i+1)+(*j)*Width)*4]==255){*i+=1;*Dir=Dir_Recherche; return;}
break;
}
}
*Dir=-1;
}
//************************************************************************************
//Algorithme de Freeman pour calculer le périmètre de la région.
//On retourne la valeur en µm du perimetre
//************************************************************************************
double CImage::PerimetreFreeman(double ScaleX,double ScaleY)
{
double Diag,P;
int i,j,Xini,Yini,Dir;
BOOL Skip=FALSE;
queue Fifo;
for(j=1;j<Height && !Skip;j++) //placement sur le premier pixel de la région
for(i=1;i<Width && !Skip;i++)
if(ucBits[(i+j*Width)*4]==255)
Skip=TRUE;
Diag=sqrt(ScaleX*ScaleX+ScaleY*ScaleY);
do
{
Dir=Fifo.front();
Fifo.pop();
if(Dir==4 || Dir==8) //si paire, on a avancé horizontalement
P+=ScaleX;
else if(Dir==2 ||Dir==6)
P+=ScaleY; //si paire, on a avancé verticalement
else
P+=Diag; //si impaire, on a avancé en diagonale.
}
while(!Fifo.empty());
}
return P;
}
A+
____________________________________________________________________________
Mon site internet :
http://ImAnalyse.free.fr
primarykey
Messages postés3Date d'inscriptionvendredi 27 mars 2009StatutMembreDernière intervention31 mai 2009 31 mai 2009 à 02:59
salut tout le monde
en fait jé le meme probleme ke salma2011 et je voulais utiliser votre programme mais le probleme cété dans la declaration" queue fifo" et ces fonctions
moi je veux enregitrer les coordonnées dans un fihcier texte
je demande si vous pouvez m'aider
et merci en tt cas
cordialement
Vous n’avez pas trouvé la réponse que vous recherchez ?