6

Escribí el código para la transformación de hough y funciona bien. También puedo recortar la ubicación del ojo de una cara. Ahora quiero detectar el iris de la imagen de recorte aplicando la transformación Hough (cvHoughCircle). Sin embargo, cuando intento este procedimiento, el sistema no puede encontrar ningún círculo en la imagen.Transformación de Hough para detección de iris en OpenCV

Tal vez, la razón es que hay ruidos en la imagen, pero no creo que sea la razón. Entonces, ¿cómo puedo detectar el iris? Tengo el código de umbralización binaria, tal vez puedo usarlo, pero ¿No sé cómo hacerlo?

Si alguien ayuda, realmente lo aprecio. thx :)

Respuesta

1

Usted dice que con binary thresold obtiene un iris que es blanco puro: eso no es lo que quiere tener. Use algo como cvCanny para obtener solo el borde del iris.

+1

thx funciona:)) – iva123

0

¿Está detectando los bordes correctamente?
¿Se puede visualizar la imagen binaria y ver claramente el iris?

Las transformadas circulares normalmente tienen una ventana de radio (de lo contrario, está buscando un espacio de solución 3d) ¿está configurando la ventana a un valor razonable?

+0

Para la transformación de Hough, que puede detectar círculos muy bien Para la imagen binaria, sí puedo ver el iris muy bien (se muestra como un puntos blancos en un rostro negro), pero es bordes son un poco distorsionada Para el último comentario, no entiendo:) ¿Sugiere una imagen recortada más grande ? – iva123

+0

No está familiarizado con cvHoughCircle, pero en general tiene que dar al algoritmo de búsqueda de círculos un rango (ventana) de radios para buscar. De lo contrario, tiene que explorar un espacio de solución 3d x/y/radio para encontrar la probabilidad. –

+0

No necesariamente, si utiliza información de gradiente, un acumulador 2D es suficiente. – 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(); 
    } 
} 
Cuestiones relacionadas