【发布时间】:2013-07-17 22:23:57
【问题描述】:
我一直在尝试检测眼睛的虹膜区域,然后在检测到的区域周围画一个圆圈。我已经使用阈值函数获得了一个清晰的黑白眼睛图像,其中只包含瞳孔、上眼睑线和眉毛。
一旦实现这一点,HoughCircles 将用于检测图像中是否出现圆圈。但是,它从不检测任何圆形区域。在阅读了HoughCircles 之后,它指出
霍夫梯度法的工作原理如下:
首先,图像需要通过边缘检测阶段(在本例中为
cvCanny())。
然后我在阈值函数之后添加了一个精明检测器。这仍然产生检测到的零圈。如果我删除阈值函数,眼睛图像会变得繁忙,有不必要的线条;因此我把它包括在内。
cv::equalizeHist(gray, img);
medianBlur(img, img, 1);
IplImage img1 = img;
cvAddS(&img1, cvScalar(70,70,70), &img1);
//converting IplImage to cv::Mat
Mat imgg = cvarrToMat(&img1);
medianBlur(imgg, imgg, 1);
cv::threshold(imgg, imgg, 120, 255, CV_THRESH_BINARY);
cv::Canny(img, img, 0, 20);
medianBlur(imgg, imgg, 1);
vector<Vec3f> circles;
/// Apply the Hough Transform to find the circles
HoughCircles(imgg, circles, CV_HOUGH_GRADIENT, 1, imgg.rows/8, 100, 30, 1, 5);
- 我该如何解决这个问题?
- 霍夫圆法有效吗?
- 是否有更好的方法来检测虹膜区域?
- 选择的参数是否正确?
还要注意,图片是直接从网络摄像头获取的。
【问题讨论】:
-
我正在做类似的项目,但我需要检测很多小点,而且它们都是不完美的圆圈,有很多噪音。我使用 findContours() 成功地检测到了它们。事先,我需要应用二进制图像和精明的边缘
-
我也在想 findContours() 方法将是要走的路。考虑到当一个人在屏幕底部放牧时,我的瞳孔确实会产生不完美的圆/半圆。我将尝试这种方法,并尽快发布有关结果的更新。 -谢谢。
-
FindContours 方法不是那么可靠,有时它会在眼睛区域内绘制随机轮廓。是否有替代或改进?
-
我的项目是开发一只眼睛鼠标,光线似乎对图像有很大影响。关于瞳孔检测的帮助将不胜感激,因为我一直被困在这一点上一段时间。阈值法给出了一个非常清晰、可见的瞳孔图像。
-
我发现在绘制轮廓时,它勾勒出白色区域,因此我需要对图像进行否定。由于眼睑有不连续性,因此只勾勒出一个封闭区域。我该如何勾勒最大/圆形区域(有瞳孔的区域)而忽略眉毛区域(非圆形区域)?
标签: c++ opencv image-processing hough-transform iris-recognition