我一直试图检测眼睛的虹膜区域,然后在检测到的区域周围画一个圆圈。我已经设法获得了一个清晰的黑白眼睛图像,只包含瞳孔,上眼睑线和使用阈值功能的眉毛。
一旦实现此目的,HoughCircles
将应用于检测图像中是否出现圆圈。但是,它从不检测任何圆形区域。在阅读HoughCircles
后,它说明了
霍夫梯度法的工作原理如下:
首先,图像需要通过边缘检测阶段(在本例中为
cvCanny()
)。
然后我在阈值功能后添加了一个canny探测器。这仍然检测到零圆圈。如果我删除阈值功能,眼睛图像会变得忙于不必要的线条;因此我把它包括在内。
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);
另请注意,图像直接从网络摄像头获取。
答案 0 :(得分:0)
尝试使用Daugman的Integro差分运算符。它计算虹膜和瞳孔的中心,并在虹膜和瞳孔边界上绘制一个精确的圆。 MATLAB代码可在iris boundary detection using Daugman's method获得。由于我不熟悉OpenCV,你可以转换它。
答案 1 :(得分:0)
二元眼睛图像包含三个不同方面的睫毛,眼睛和眉毛。主要目的是到达感兴趣的区域,即眼睛/虹膜,不包括眉毛和睫毛。我按照以下步骤操作: -
步骤1:丢弃眼睛图像的上半部分,因此我们留下睫毛,眼睛区域和小阴影区域。
第2步:找到轮廓
步骤3:找到最大轮廓,以便我们只有眼睛区域
步骤4:使用边界框在眼睛周围创建一个矩形 http://docs.opencv.org/doc/tutorials/imgproc/shapedescriptors/bounding_rects_circles/bounding_rects_circles.html
现在我们有了感兴趣的区域。从这一点来说,我现在正在严格审视这些图像并使用神经网络训练系统来模拟鼠标的属性。我目前正在学习神经网络link1以及如何在opencv中使用它。
使用以前的方法,包括检测虹膜点,创建眼睛矢量,跟踪它并计算屏幕上的吃草是耗时的。还有光线反射光线使其难以检测。