1

我一直在尝试检测眼睛的虹膜区域,然后在检测区域周围绘制一个圆圈。我设法使用阈值函数获得包含瞳孔,上眼睑线和眉毛的清晰黑白眼睛图像。如何检测并在眼睛虹膜区域周围画一个圆圈?

一旦这被实现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); 
  • 我怎样才能解决这个问题?
  • 难道圆法的工作?
  • 有没有更好的解决方案来检测虹膜区域?
  • 参数选择是否正确?

另外请注意,图像被直接用摄像头获得的。

+0

我正在做类似的项目,但我需要检测许多小点,所有这些都是不完美的圈子,有很多噪音。我使用findContours()成功检测到它们。之前,我需要应用二进制图像和canny边缘 – azer89

+0

我也认为findContours()方法将成为要走的路线。考虑到当人员放牧指向底部时,我的瞳孔会产生不完整的圆圈/半圆。我会尝试这种方法,并会尽快发布有关结果的更新。 -谢谢。 – Sade

+0

FindContours方法并不可靠,有时在眼部区域绘制一个随机轮廓。是否有替代方案或改进? – Sade

回答

0

二进制眼睛图像包含三个不同方面睫毛,眼睛和eyebrow.The主要目的是获得与感兴趣的区域,该区域是眼睛/虹膜,不包括眉毛和eyelashes.I遵循下列步骤: -

第1步:丢弃眼睛图像的上半部分,因此我们留下了睫毛,眼部区域和小阴影区域。

第2步:找到轮廓

步骤3:找到最大的轮廓,使我们刚才的眼睛区域

第4步:使用边框打造眼部周围区域的矩形 http://docs.opencv.org/doc/tutorials/imgproc/shapedescriptors/bounding_rects_circles/bounding_rects_circles.html

现在我们有了感兴趣的区域。从这个角度来看,我现在严格了这些图像并使用神经网络来训练系统来模拟鼠标的属性。我目前正在学习神经网络link1以及如何在opencv中使用它。

使用先前的方法,包括检测虹膜点,创建一个眼睛矢量,跟踪它并计算屏幕上的放牧是非常耗时的。另外还有光线反射在虹膜上,因此很难检测到。

0

尝试使用Daugman的Integro微分算子。它计算虹膜和瞳孔的中心,并在虹膜和瞳孔边界上画一个精确的圆。 MATLAB代码在这里可用iris boundary detection using Daugman's method。由于我不熟悉OpenCV,因此可以将其转换。

+0

谢谢你的回应我会看看它。 – Sade