人眼定位算法简单概述

这篇博客只是总结一下人眼定位的方法。
首先人眼定位效果是得到人眼的坐标,即瞳孔的坐标。大体来说人眼定位的方法有两种,第一种是利用人眼的几何特征,灰度特征等通过算法来实现定位,第二种要通过机器学习,其实opencv自带了瞳孔分类器,但我应用起来效果并不是很好。下面主要是讲解一下通过特征定位人眼的一些算法。


以下对每种方法的实验均是利用低分辨率的图片,即是利用普通摄像头获取的图片。

## 基础
进行人眼定位之前首先是要通过人脸分类器得到人脸的图片,然后对人脸图片根据一些先验知识分割出包含人眼区域的图片。这些先验知识可以是人眼在人脸的大概比例等,具体还是看不同图片以及不同的定位需求。

几何特征

几何特征利用的是人眼是圆型的,通过定位圆取圆心得到大致瞳孔位置。
opencv中有霍夫园检测方法可以对图片中的圆进行检测,其主要原理是通过霍夫变换参数空间,霍夫线检测是将图片的坐标空间转换为极坐标参数空间,而霍夫园检测是将图片坐标转换成x,y,r(圆心坐标,半径)的参数空间,霍夫圆检测还利用了霍夫梯度法对圆心进行过滤。

改进

单纯利用霍夫圆检测方法是肯定不能检测到精准的圆心坐标,因为检测出来的目标圆很多,可以对这些目标圆进行过滤。过滤原理:人眼图片经过二值化后的目标区域主要还是人眼的圆形,即可以利用人眼灰度高于皮肤区域灰度的特征。对霍夫圆检测出的目标圆,在二值化图像计算像素值为255或0的(255或0取决于你二值化的方式)比例,比例最高的圆即为待选的目标人眼。

优缺点:

优点精度还行,缺点就是光照影响以及每次都要调节参数来适应不同的图片。
### 灰度特征
灰度特征主要是利用人眼主要颜色比皮肤更深,即灰度值更强。我第一次利用的灰度特征主要是计算人眼图片行灰度和(把每一行像素相加),其中最大的行灰度和就是人眼所在的行坐标,而人眼的列坐标可以通过分割人眼(双眼)图片为左右两张人眼图片,在计算列灰度和得到。不过我当时并没有将人眼图片分割成左右两张图片,从而在计算列时参考某篇论文,尝试把列灰度和曲线拟合成两条高斯曲线,获得每条高斯曲线的x=u的点,但过于复杂没有成功,不过现在想来这种方法太过于复杂。另加快计算速度可以选择跳行计算。

优缺点

精度不错,光照影响还是挺大的,调节参数必须的,戴眼镜干扰很大。

改进

改进的方法其实是利用梯度,眼睛是人眼灰度变换最明显部分,而灰度变换的速率可以用梯度表示,用梯度来确定是比较合适的了,用灰度总有种勉强的感觉。计算方法:首先要将图片和行尺度不变算子做卷积,作用是突出眼部梯度,在计算行梯度和,取最大的行梯度为人眼行坐标。这种效果适应性比较强,而且适用于戴眼镜的情况。但是利用梯度获得列坐标我没有尝试过,因为眼睛区域在行方向是梯度明显的,而在列方面不明显,通过分别计算行列梯度图片可知。目前我主要想要实现的是通过梯度确定的行去精确化霍夫园检测。
###模板匹配
模板匹配是将人眼图片分成左右眼两张图片,分别对两张图片进行模板匹配,首先要求的就是你要有各种各样眼睛不同姿态的模板,用户匹配。没有尝试过,只做过了解。

轮廓

求轮廓是初步学习opencv里的套路了,就是二值化图片,对图片进行找轮廓,对找到的轮廓进行简单的筛选,在求取轮廓的中心即可。这种方法也可行但是需要需要进行滤波处理。

总结

了解以及尝试的方法大概这么几种把,首先每种方法都不是孤立的,应该结合多种方法利用各种特征去做人眼定位。其次在不断探索的过程种,发现自己没有快速建立原型的思维,总是想要寻找一种方法简单而又适应于所有情况,这一点要引起警戒,因为这样浪费时间又消耗自己的心力。不应该纠结于完美的方法,而是快速的实现尽管有缺陷,但是首先到达问题的核心和深度才是最重要的。

  • 7
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值