Image processing 基于Hough变换的OpenCV虹膜检测

Image processing 基于Hough变换的OpenCV虹膜检测,image-processing,opencv,computer-vision,hough-transform,eye-tracking,Image Processing,Opencv,Computer Vision,Hough Transform,Eye Tracking,我为hough变换编写了代码,效果很好。我还可以裁剪人脸的眼睛位置。现在我想通过应用Hough变换(cvHoughCircle)来检测裁剪图像的虹膜。但是,当我尝试此过程时,系统无法在图像上找到任何圆 也许,原因是,图像中有噪音,但我不认为这是原因。 那么,我如何检测虹膜呢?我有二进制阈值的代码也许我可以用它,但是 我不知道该怎么办 如果有人帮忙,我真的很感激。thx:)您是否正确检测到边缘? 你能显示二值图像并清楚地看到虹膜吗 圆形hough变换通常有一个半径窗口(否则您正在搜索3d解决方案空

我为hough变换编写了代码,效果很好。我还可以裁剪人脸的眼睛位置。现在我想通过应用Hough变换(cvHoughCircle)来检测裁剪图像的虹膜。但是,当我尝试此过程时,系统无法在图像上找到任何圆

也许,原因是,图像中有噪音,但我不认为这是原因。 那么,我如何检测虹膜呢?我有二进制阈值的代码也许我可以用它,但是 我不知道该怎么办


如果有人帮忙,我真的很感激。thx:)

您是否正确检测到边缘?
你能显示二值图像并清楚地看到虹膜吗


圆形hough变换通常有一个半径窗口(否则您正在搜索3d解决方案空间)您是否将窗口设置为合理的值?

您说使用二进制thresold可以得到纯白色的虹膜:这不是您想要的。使用类似于cvCanny的方法仅获取虹膜的边缘。

void houghcirle()
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();
    }
}
{ //cvSmooth(灰度、灰度、CV_高斯、5,5); CvMemStorage*storage=cvCreateMemStorage(0); //将其平滑,否则可能会检测到大量假圆 CvSeq*圆=cvHoughCircles(边缘、存储、CV_-HOUGH_梯度、5、边缘->高度/4,1,1,2,50,70); int i; 对于(i=0;itotal;i++) { float*p=(float*)cvGetSeqElem(圆,i); cvRound(p[0]),cvRound(p[1]),2,CV_RGB(0255,0),-1,2,0; cvRound(p[0])、cvRound(p[1])、cvRound(p[2])、cvu RGB(255,0,0)、1,2,0; cvNamedWindow(“圆圈”,1); cvShowImage(“圆圈”,img); cvWaitKey(); } }
对于hough变换,我可以很好地检测二值图像中的圆,是的,我可以很好地看到虹膜(它显示为黑面上的白点),但它的边缘在最后的评论中有些扭曲,我不明白:)你建议剪大一点的图像吗?不熟悉cvHoughCircle-但通常你必须给hough circle查找算法一个半径范围(窗口)来搜索。否则,它必须探索x/y/radius三维解空间以找到合适的解空间。不一定,如果它使用梯度信息,二维累加器就足够了。