Calcul de rayan des cercles dans une image

cs_swito Messages postés 12 Date d'inscription vendredi 15 avril 2011 Statut Membre Dernière intervention 22 juin 2011 - 19 avril 2011 à 17:25
cs_swito Messages postés 12 Date d'inscription vendredi 15 avril 2011 Statut Membre Dernière intervention 22 juin 2011 - 20 avril 2011 à 09:36
salut

je travaille sur un projet de traitement d image , l'objectif c' est de faire un code en c/c++ qui détecte toutes les cercles qui existe dans l image puis calculer pour chaque cercle détecter son Rayan.


prière de m'aider si quelqu'un a une idée

3 réponses

cs_louis14 Messages postés 793 Date d'inscription mardi 8 juillet 2003 Statut Membre Dernière intervention 10 février 2021 8
20 avril 2011 à 08:44
Bonjour,
il faut que tu regardes du côté de la transformée de Hough. IL me semble qu'il y a un exemple sur ce site.

louis
0
cs_louis14 Messages postés 793 Date d'inscription mardi 8 juillet 2003 Statut Membre Dernière intervention 10 février 2021 8
20 avril 2011 à 08:50
Voilà un très bon article :
http://www.cppfrance.com/codes/IMANALYSE-LOGICIEL-TRAITEMENT-IMAGE-DITHERING-WIN32_46507.aspx

il y a la détection de cercle

louis
0
cs_swito Messages postés 12 Date d'inscription vendredi 15 avril 2011 Statut Membre Dernière intervention 22 juin 2011
20 avril 2011 à 09:36
bonjour
merci louis pour votre rep

j ai déjà essayé avec la bibliothèque opencv mon programme s’exécute mais les cercles tracé ne sont les vrais cercles cherché c-t-a dire il trace des grandes cercles aléatoires par contre dans l image traité il y a des centaines des petites image
peut être je sais pas faire un bon paramétrage

voila mon code

#include <cv.h>
#include <highgui.h>
#include<stdio.h>
#include
#include<math.h>
#include<cxcore.h>
#include<cvaux.h>

using namespace std;
int main()
{
//Déclaration
IplImage*image_couleur;
IplImage*image_gris;
IplImage*image_binaire;
// IplImage*image_contour;
IplImage*image_filtre;
CvMat*masque3x3;
CvSeq*circles;
CvMemStorage*storage = cvCreateMemStorage(0);

// charger une image
image_couleur=cvLoadImage("im1.jpg");
if (image_couleur == NULL)
{
cout << "impossible d'ouvrir le fichier";
exit(EXIT_FAILURE);
}
//On vérifie l'origine de l'image chargée
//Si elle n'est pas en haut à gauche, il faut la corriger
int flip=0;
if(image_couleur->origin!=IPL_ORIGIN_TL)
{
flip=CV_CVTIMG_FLIP;
}

//Conversion en niveaux de gris
image_gris=cvCreateImage(cvGetSize(image_couleur),image_couleur->depth,1);
if (image_gris == NULL)
{
cout << "impossible de creer image gris";
exit(EXIT_FAILURE);
}

cvCvtColor(image_couleur,image_gris,CV_BGR2GRAY);
image_binaire=cvCreateImage(cvGetSize(image_couleur),8,1);
image_filtre=cvCreateImage(cvGetSize(image_couleur),8,1);
masque3x3= cvCreateMat(3,3,CV_32FC1);


/* for(int i=0;i<3;i++)
{
for(int j=0;j<3;j++)
{
float k;
cin >> k ;
cvmSet(masque3x3, i, j, k);
}
}
*/
cvmSet(masque3x3, 0, 0,0);
cvmSet(masque3x3, 1, 0,-1);
cvmSet(masque3x3, 2, 0,0);
cvmSet(masque3x3, 0, 1,-1);
cvmSet(masque3x3, 1, 1,5);
cvmSet(masque3x3, 2, 1, -1);
cvmSet(masque3x3, 0, 2, 0);
cvmSet(masque3x3, 1, 2, -1);
cvmSet(masque3x3, 2, 2, 0);
cvFilter2D(image_gris,image_filtre,masque3x3);
cvSmooth(image_gris,image_gris, CV_GAUSSIAN, 3,3);
cvThreshold(image_filtre,image_binaire,100,255,CV_THRESH_BINARY);

circles = cvHoughCircles(image_gris, storage, CV_HOUGH_GRADIENT,1,image_gris->height/4,84,42,0,0);
for(int i = 0; i < circles->total; i++ )
{

float* p = (float*)cvGetSeqElem( circles, i );
cvCircle( image_gris ,cvPoint(cvRound(p[0]),cvRound(p[1])), 3, CV_RGB(0,255,0), -1, 8, 0 );
cvCircle( image_gris ,cvPoint(cvRound(p[0]),cvRound(p[1])), cvRound(p[2]), CV_RGB(255,0,0), 3, 8, 0 );
}
/*
CvScalar scalaire;
for(int x=0;xwidth;x++)
{
for(int y=0;yheight;y++)
{
scalaire=cvGet2D(image_gris, y, x);
printf ("%3d",scalaire.val[0]);
}
printf("\n");
}
*/
//Création des fenêtres dans lesquelles nous afficherons les images

cvNamedWindow("Affichage image couleur", CV_WINDOW_AUTOSIZE);
cvShowImage("Affichage image couleur", image_couleur);
cvNamedWindow("Affichage image gris",CV_WINDOW_AUTOSIZE);
cvShowImage("Affichage image gris", image_gris);
cvNamedWindow("Affichage image filtre");
cvShowImage("Affichage image filtre",image_filtre);
cvNamedWindow("Affichage image binaire",CV_WINDOW_AUTOSIZE);
cvShowImage("Affichage image binaire",image_binaire);

cvWaitKey(0);
cvDestroyWindow("Affichage image couleur");
cvDestroyWindow("Affichage image gris");
cvDestroyWindow("Affichage image filtre");
cvDestroyWindow("Affichage image binaire");
cvReleaseImage(&image_couleur);
cvReleaseImage(&image_gris);
cvReleaseImage(&image_filtre);
cvReleaseImage(&image_binaire);
cvReleaseMat(&masque3x3);

return 0;

}
0
Rejoignez-nous