基于canny的人脸眨眼检测

时间:2022-10-10 07:20:38

基于canny的人脸眨眼检测

摘 要:基于canny边缘检测与积分图相结合的方法,进行眨眼检测。通过canny边缘检测,计算出人眼区域的边缘,然后对具有噪声的干扰的边缘进行分析,判定是否属于眨眼,进行检测之前,分别计算眼睛区域在当前的光照条件下眨眼和睁眼的积分图,并计算判定为眨眼的阈值。积分图的核心思想是针对一块图像区域,计算像素值的和。其具体实现要先计算出人脸在图像中的区域和人眼在人脸图像中的区域,使用了ASM(Active Shape Model)算法作为人眼区域的检测方法。这种眨眼检测算法取得98.9%的准确率,错检的部分主要为睁眼检测为眨眼,基本没有漏检,并且能够达到视频的实时计算。

关键词:canny;边缘检测;眨眼检测;积分图

中图分类号:TP391.41

眼睛作为人脸器官的重要组成部分,其生理活动为很多领域提供了参考的依据,如驾驶员疲劳驾驶检测、人机接口等方向。眨眼的频率和每次眨眼的时间受个人情感、眼睛疲劳程度、疾病等因素影响。在正常的身体条件下,使用眨眼分析对驾驶员驾驶的疲劳检测可以作为重要的方法。本文提出了一种基于canny边缘检测与积分图相结合的方法,进行眨眼检测,取得了良好的效果。

1 本文算法

基于光照、计算速度的要求,本文的人脸眨眼检测算法,边缘检测经过验证使用canny算法比其他方法如拉普拉斯变换方法能得到更好的效果。

本文的主要思想:

(1)通过canny边缘检测,计算出人眼区域的边缘,然后对具有噪声的干扰的边缘进行分析,判定是否属于眨眼,一般情况下,眨眼能够正确检测,但是会有多检,不会有误检。

(2)进行检测之前,分别计算眼睛区域在当前的光照条件下眨眼和睁眼的积分图,并计算判定为眨眼的阈值。对canny检测的眨眼,计算人脸区域的积分图,如果满足阈值条件,则判定为眨眼。

1.1 canny边缘检测

JohnCanny于1986年提出Canny算子,它与Marr(LoG)边缘检测方法类似,也属于是先平滑后求导数的方法,其主要思想如下:

(1)用高斯滤波器平滑图象,边缘检测的算法主要是基于图像强度的一阶和二阶导数,但导数通常对噪声很敏感,因此必须采用滤波器来改善与噪声有关的边缘检测器的性能。常见的滤波方法主要有高斯滤波。

(2)用一阶偏导的有限差分来计算梯度的幅值和方向;关于图像灰度值得梯度可使用一阶有限差分来进行近似,这样就可以得图像在x和y方向上偏导数的两个矩阵。本文使用了如下算子:

其x向、y向的一阶偏导数矩阵,梯度幅值以及梯度方向的数学表达式为:

(3)对梯度幅值进行非极大值抑制,图像梯度幅值矩阵中的元素值越大,说明图像中该点的梯度值越大,在Canny算法中,非极大值抑制是进行边缘检测的重要步骤,这样可以剔除掉一大部分非边缘的点。

(4)用双阈值算法检测和连接边缘, 在高阈值图像中把边缘链接成轮廓,当到达轮廓的端点时,该算法会在断点的8邻域点中寻找满足低阈值的点,再根据此点收集新的边缘,直到整个图像边缘闭合。

1.2 积分图计算

积分图的核心思想是针对一块图像区域,计算像素值的和。在算法进行之前,对人眼区域,计算约30帧的睁眼积分图和眨眼积分图,使用30帧的积分图均值作为训练参数,并取两积分图差值的一定比例,作为阈值。因在灰度图像中,睁眼的积分图要小于眨眼的积分图,因此大于阈值的被判定为眨眼。

2 实现

本文使用了matlab工具进行边缘检测的计算,实际的实现采用做为开发环境,c++语言为工具,然后移植到dsp中,本文中在眨眼检测前需要先计算出人脸在图像中的区域和人眼在人脸图像中的区域,经验表明,adaboost方法在人脸区域检测方面能够取得很好的效果,但是在人眼区域检测中,我们需要的人眼区域的精确度较高,不能产生错检和飘忽的区域,因此使用了ASM(Active Shape Model)算法作为人眼区域的检测方法。

本文算法的过程如下:

(1)使用haar+adaboost检测出图像中的人脸;

(2)使用ASM(Active Shape Model)算法计算去人脸图像中人眼的区域;

(3)使用canny算子计算出人眼的边缘轮廓;

(4)计算出人眼区域的积分图;

(5)通过边缘进行初次的眨眼判定,对检测出的眨眼用积分图方法进行二次判定。

2.1 canny边缘检测

通过canny边缘检测,我们检测的人眼睁眼边缘如图1,眨眼边缘如图2。

图1 睁眼边缘

图2 眨眼边缘

通过对大量的人眼睁眼和眨眼的边缘进行分析,观察到眨眼和睁眼有很大的差异性:

(1)睁眼边缘轮廓会填充整个人眼区域,会伴随有大量的噪声。

(2)眨眼边缘轮廓会呈一条弯曲的细条带状,从左到右延伸,中间会有断开,也有噪声。

(3)在相同的条件下,基于上述特征,眨眼边缘比睁眼边缘更加稳定。

因此,本文基于眨眼的边缘,在y方向上做投影,并计算边缘的间隔,剔除掉人眼区域边缘的间隔,进行分析,并获得边缘间隔的经验值,在人眼x方向上1/3-2/3的整个区域人眼边缘的间隔较为稳定,因此,我们取人眼区域[1/3,2/3]区域的间隔作为判定条件,取人眼区域Y方向上的范围的1/3作为判定阈值,进行眨眼判定,能够得到良好的效果。在此算法基础上,能够检测准眨眼,但是在有睁眼会被误检为眨眼。

2.2 积分图方法进行二次判定

对所有使用canny算子检测的眨眼,使用积分图方法进行二次判定,剔除误检的部分,本文中,采用了灰度图像像素值X方向投影积分作为判定方法,取训练的眨眼和睁眼积分图差值的0.6作为判定间隔阈值,新检测的积分图与训练的眨眼参数求差值,小于上述阈值则判定为眨眼。

2.3 使用haar特征

进行算法前,使用haar特征,adaboost方法先检测视频图像中的人脸区域。对于正脸和偏转角度不大的人脸图像,adaboost能够取得非常好的检测效果。并使用asm(Active Shape Model)算法检测出人眼的区域,asm算法在人眼器官定位方向能够取得非常好的效果,因此本文使用它作为我们人眼区域的检测。

3 实验结果

本文基于Windows平台进行试验,前期使用matlab作为仿真工具,进行了大量的边缘检测验证、分析,归纳出算法的主题思想,使用/c++平台作为编码平台进行实现验证并移植到DSPDM642平台,使用作为相机的智能算法模块进行应用,在不同光照环境和不同参数的相机上进行验证,本文的眨眼检测算法取得98.9%的准确率,错检的部分主要为睁眼检测为眨眼,基本没有漏检,并且能够达到视频的实时计算。

4 结论

在科学与技术不断进步的环境下,人脸的眨眼检测的应用也越来越广泛,特别是在驾驶员疲劳驾驶方面,本文通过实验,提出了一种新的基于canny边缘检测和积分图相结合的人脸眨眼检测算法,取得了非常好的应用效果。

参考文献:

[1]Anil K.Jain.Face Detection in Color Images.IEEE TRANS. PAMI,2002,5(24):696-706.

[2]ZHU ZW,JI Q. Eye and gaze tracking for interactive graphic display[J].Machine Vision and Applications,2004,15(3):139-148.

[3]H.S.Ling,L.M.Ang,K.P.Seng.Eye Detection in Face Images.IEEE,2005:1160-1163.

[4]ERIKSSON M,PAPANIKOLOPOULOS N. Eye-tracking for detection of drive fatigure[A].Proceedings of Conference Intel.Transport Sys[C].1997:314-319.

[5]Wang J G,Tan T N.A new face detection method based on shape information[J].Pattern Recognition,2000,21(67):463-471.

[6]Zhi chao Tian,Hua biao Qin.Real-time Driver.S Eye State Detection[J].IEEE,2005:285-289.

[7]王磊.基于计算机视觉的驾驶员疲劳瞌睡检测方法的研究[D].山东大学,硕士学位论文,2005-4.

[8]石坚,吴远鹏,卓斌.汽车驾驶员主动安全性因素的辨识与分析[J].上海交通大学学报,2000,34(4):441-444.

[9]曲培树,董文会.基于眼睑曲率及模糊逻辑的人眼状态识别[J].计算机工程与科学,2007,29(8):50-51.

[10]朱振华,吴晓娟,王磊等.基于眨眼持续时闻的司机疲劳检铡方法[J].计算机工程,2008,34(5):201-206.

作者简介:李小青(1980.7.5-),女,山西省原平市人,审查员,主任科员,硕士研究生。

上一篇:虚拟机CPU平台体系结构与内存机制研究 下一篇:智能化自动化立体仓库系统分析