6

J'ai écrit le code pour la transformation de Hough et cela fonctionne bien. Aussi, je peux recadrer l'emplacement de l'oeil d'un visage. Maintenant je veux détecter l'iris de l'image de recadrage en appliquant la transformation de Hough (cvHoughCircle). Cependant, lorsque j'essaie cette procédure, le système ne trouve aucun cercle sur l'image.Transformation de Hough pour la détection de l'iris dans OpenCV

Peut-être, la raison en est, il y a des bruits dans l'image mais je ne pense pas que ce soit la raison. Alors, comment puis-je détecter l'iris? J'ai le code de seuillage binaire peut-être je peux l'utiliser, mais Je ne sais pas comment faire?

Si quelqu'un m'aide, je l'apprécie vraiment. thx :)

Répondre

1

Vous dites qu'avec le thierold binaire vous obtenez un iris qui est blanc pur: ce n'est pas ce que vous voulez avoir. Utilisez quelque chose comme cvCanny afin d'obtenir seulement le bord de l'iris.

+1

thx cela fonctionne:)) – iva123

0

Détectez-vous correctement les bords?
Pouvez-vous afficher l'image binaire et voir l'iris clairement?

Les transformations hough circulaires ont normalement une fenêtre de rayon (dans le cas contraire vous recherchez un espace de solution 3d) êtes-vous en train de régler la fenêtre à une valeur raisonnable?

+0

Pour la transformation ien, je perçois des cercles très bien Pour une image binaire, oui, je peux voir l'Iris très bien (il est affiché comme des points blancs sur un visage noir), mais il est les bords sont un peu déformés Pour le dernier commentaire, je ne comprends pas:) Suggérez-vous une plus grande image recadrée? – iva123

+0

Vous n'êtes pas familier avec cvHoughCircle - mais généralement vous devez donner un algorithme de recherche de cercle approximatif une plage (fenêtre) de rayons à rechercher. Sinon, il doit explorer un espace de solution 3d x/y/rayon pour trouver la probabilité. –

+0

Pas nécessairement, s'il utilise des informations de gradient, un accumulateur 2D est suffisant. – WebMonster

-2
void houghcircle() 
{ 
    //cvSmooth(graybin,graybin, CV_GAUSSIAN, 5,5); 
    CvMemStorage* storage = cvCreateMemStorage(0); 

    // smooth it, otherwise a lot of false circles may be detected 
    CvSeq* circles = cvHoughCircles(edge, storage, CV_HOUGH_GRADIENT, 5, edge->height/4,1,1,2,50, 70); 
    int i; 
    for(i = 0; i < circles->total; i++) 
    { 
     float* p = (float*)cvGetSeqElem(circles, i); 
     cvCircle(img, cvPoint(cvRound(p[0]),cvRound(p[1])), 2, CV_RGB(0,255,0), -1, 2, 0); 
     cvCircle(img, cvPoint(cvRound(p[0]),cvRound(p[1])), cvRound(p[2]), CV_RGB(255,0,0), 1, 2, 0); 
     cvNamedWindow("circles", 1); 
     cvShowImage("circles", img); 
     cvWaitKey(); 
    } 
}