我编写了霍夫变换的代码,效果很好。我还可以裁剪脸部的眼睛位置。现在我想通过应用霍夫变换(cvHoughCircle)来检测裁剪图像的虹膜。但是,当我尝试此过程时,系统无法在图像上找到任何圆圈。
也许,原因是图像中有噪音,但我认为不是原因。那么,如何检测虹膜呢?我有二进制阈值的代码也许我可以使用它,但我不知道该怎么做?
如果有人帮助我真的很感激。谢谢 :)
我编写了霍夫变换的代码,效果很好。我还可以裁剪脸部的眼睛位置。现在我想通过应用霍夫变换(cvHoughCircle)来检测裁剪图像的虹膜。但是,当我尝试此过程时,系统无法在图像上找到任何圆圈。
也许,原因是图像中有噪音,但我认为不是原因。那么,如何检测虹膜呢?我有二进制阈值的代码也许我可以使用它,但我不知道该怎么做?
如果有人帮助我真的很感激。谢谢 :)
你说使用二进制阈值你会得到一个纯白色的虹膜:这不是你想要的。使用 cvCanny 之类的东西,以便只获得虹膜的边缘。
您是否正确检测边缘?
你能显示二进制图像并清楚地看到虹膜吗?
圆形霍夫变换通常有一个半径窗口(否则您正在搜索 3d 解决方案空间)您是否将窗口设置为合理的值?
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();
}
}