眼球中心定位跟踪算法—eyelike

转载自:https://blog.csdn.net/chaipp0607/article/details/79935302


项目介绍
人眼中心定位是一个用于眼部追踪的算法,它来源于github中eyelike项目,C++语言实现,依赖OpenCV库。 
关于代码的编译,作者提供了CMakeLists.txt文件,同时支持Windows,Linux和Mac OS X。 
该项目只实现了简单的2维眼球跟踪功能,没有3维信息,也没有视线跟踪和估计功能。 
作者提供了另一个博客链接Simple, accurate eye center tracking in OpenCV,其中有一段演示视频,可以看到跟踪效果。 
项目主要的算法来源于剑桥大学的一篇文章:《Accurate eye centre localisation by means of gradients》


算法介绍
该项目从网络摄像头读取视频,进行人脸检测,再根据检测到的人脸图像截取左眼和右眼的ROI区域,最后根据截取到的ROI进行眼球中心检测与跟踪。所以算法的主要包含三个部分:人脸检测,ROI截取,眼球中心定位。


人脸检测
这里面用的人脸检测方法就是OpenCV中集成好的级联分类器,这是一种非常古老的人脸检测方法,利用Haar特征和Adaboost级联器,即直接调用在opencv目录下的 .XML文件,进行人脸检测。 
OpenCV中提供了多个已经训练好的模型,考虑到侧脸的情况下左右眼将出现遮挡,所以在项目中目前只用到了正面脸检测。


眼部ROI截取
得到整个人脸图像后,截取出左右眼部区域的ROI图像,这个截取过程就是简单的根据先验知识,对于如下的一张人脸图像(注:该图片来源于互联网): 

è¿éåå¾çæè¿°

è¿éåå¾çæè¿°
那么,左右眼的区域大小和位置大概是固定的,整幅图像的长宽分别为wI,hI。眼部区域的长宽为wE,hE,则有:

wE=35/100wI

hE=30/100hI

对于左右眼ROI图像左上角像素点位置:
yL=yR=25/100hI
yL=yR=25/100hI

xL=13/100wI
xL=13/100wI

xR=wI−wE−13/100wI
xR=wI−wE−13/100wI


眼球中心定位
现在截取出了眼部ROI图像,就到了之前提到的那个论文的方法了,《Accurate eye centre localisation by means of gradients》。其实它用到的方法很好理解,一副图像,每个像素点都可以计算出梯度,而梯度包含了幅值和方向。对于眼部图像而言,越是靠近眼球中心的位置,灰度值就越低,就会有更多的梯度方向的连线交于那个点。 

è¿éåå¾çæè¿°
 
所以,中心位置的确定,就是在找梯度方向上的直线相交最多的那个点。


补充
除了眼球定位,这个项目还做了眼睑的定位,是在眼球中心位置与眼部ROI区域确定后,增加了简单的后处理,我没有把这个作为重点。


性能评价
最后,根据梯度方向的眼球定位算法在某些方面还是有可取之处的。它很简单,非常容易理解,然后没有使用边缘之类的纹理特征,这使得在较低分辨率的图像和视频下也能做到定位,因为即便是分辨率很低,起码梯度的特征相比边缘的特征,受到的影响更小,算法在这方面的鲁棒性很好。但是它毕竟是一种基于纹理特征的定位算法,这意味着,当眼部图像的纹理受到外部影响而改变时,算法的定位效果会变得很差。比如我测试的图像是一款头戴式设备采集到的,里面为了照明增加了光源,光源反射到眼球位置后出现了亮点,而这个亮点的存在改变了眼部原来的纹理特征。


实验效果
人脸检测

è¿éåå¾çæè¿°
眼球定位

è¿éåå¾çæè¿°
源码下载
当然可以直接到github地址下载eyelike啦。 
同时,我调通了Windows在VS2010版本,依赖OpenCV2.4.11,点击下载。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值