我现在正在做一个眼动追踪项目。在这个项目中,我在网络摄像头视频中跟踪眼睛(分辨率为 640X480)。
我可以在每一帧中定位和跟踪眼睛,但我需要定位瞳孔。我阅读了很多论文,其中大部分参考了 Alan Yuille 的可变形模板方法来提取和跟踪眼睛特征。任何人都可以用任何语言(matlab/OpenCV)帮助我编写此方法的代码吗?
我尝试过使用不同的阈值,但由于眼部区域的分辨率较低,因此效果不佳。我将非常感谢有关在视频中寻找瞳孔甚至虹膜的任何帮助。
我现在正在做一个眼动追踪项目。在这个项目中,我在网络摄像头视频中跟踪眼睛(分辨率为 640X480)。
我可以在每一帧中定位和跟踪眼睛,但我需要定位瞳孔。我阅读了很多论文,其中大部分参考了 Alan Yuille 的可变形模板方法来提取和跟踪眼睛特征。任何人都可以用任何语言(matlab/OpenCV)帮助我编写此方法的代码吗?
我尝试过使用不同的阈值,但由于眼部区域的分辨率较低,因此效果不佳。我将非常感谢有关在视频中寻找瞳孔甚至虹膜的任何帮助。
您需要做的是将网络摄像头转换为近红外摄像头。网上有很多教程。试试这个。
从 NIR 摄像头拍摄的图像看起来像这样 -
然后您可以使用 OpenCV 来设置阈值。
然后使用 Erode 函数。
在此之后用一些颜色填充图像,以角作为种子点。
消除孔洞并反转图像。
使用距离变换到最近的非零值。
找到最大值的坐标并画一个圆。
如果您仍在为此工作,请查看我的 OptimEyes 项目:https ://github.com/LukeAllen/optimeyes
它使用 Python 和 OpenCV,并且可以很好地处理来自 640x480 网络摄像头的图像。您也可以在该页面上查看“理论论文”和演示视频。(这是今年早些时候斯坦福大学的一个课堂项目;它不是很完善,但我们尝试对代码进行一些注释。)
根据跟踪瞳孔的应用程序,我会为眼睛找到一个边界框,然后在该框内找到最暗的像素。
一些伪代码:
box left_location = findlefteye()
box right_location = findrighteye()
image_matrix left = image[left_location]
image_matrix right = image[right_location]
image_matrix average = left + right
pixel min = min(average)
pixel left_pupil = left_location.corner + min
pixel right_pupil = right_location.corner + min
在 Anirudth 建议的第一个答案中......
只需在阈值函数(第二步)之后应用 HoughCirles 函数。
然后您可以直接在瞳孔周围绘制圆圈,并使用半径(r)和眼睛中心(x,y)您可以轻松找到眼睛中心。