用于OpenCV中虹膜检测的霍夫变换

时间:2010-05-21 20:10:28

标签: image-processing opencv computer-vision hough-transform eye-tracking

我为hough转换编写了代码并且运行良好。我也可以裁剪一张脸的眼睛位置。现在我想通过应用Hough变换(cvHoughCircle)来检测裁剪图像的光圈。但是,当我尝试此过程时,系统无法在图像上找到任何圆圈。

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

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

3 个答案:

答案 0 :(得分:1)

你说用二进制阈值你得到一个纯白色的虹膜:这不是你想要的。使用像cvCanny这样的东西只能获得虹膜的边缘。

答案 1 :(得分:0)

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

圆形霍夫变换通常具有半径窗口(否则您正在搜索3d解空间)您是否将窗口设置为合理的值?

答案 2 :(得分:-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();
    }
}