五. 圆频率变换和眼睛的定位及面积计算
圆频率变换的滤波方法[4]是Shinjiro Kawato和 Jun Ohya提出的一种用于分析人脸姿势的方法。它的特点是不直接定位眼睛,而是通过定位两只眼睛的连线的中点即眉心的位置来分析人脸的姿势。该方法的特点是运算速度快,能够满足实时处理的要求。本文利用这种方法作为眼睛定位的一个步骤,以减少下一步眼睛定位的搜索范围。
以点(x,y)为圆心,以一定的半径画圆,将圆周上的点依次存入数组,设数组为
absMiddle" border="0" onload="return imgresize(this);" onclick="javascript:window.open(this.src);" style="cursor:pointer;"/>
取圆频率滤波的半径r=len/4。
定位出眉心后,本文用以下的方法步骤定位瞳孔中心并计算瞳孔的面积。
1. 根据该点估计眼睛和眉毛所在的大致区域,选取距离眉心上下各20个象素,水平方向的距离在[7,40]的图像区域。
2. 在选取的图像区域内作水平积分投影即G(y)= absMiddle" border="0" onload="return imgresize(this);" onclick="javascript:window.open(this.src);" style="cursor:pointer;"/>,对G(y)作均值滤波,眼睛和眉毛处的积分比较小,而二者中间的眼睑亮度相对较大,因此我们计算G(y)中两个波谷之间的波峰作为眼睛区域的上边界,取上边界加15作为下边界。
3. 在眼睛区域内做广义对称变换计算瞳孔中心,由于眼睛的区域较小,虽然广义对称变换的时间复杂度为absMiddle" border="0" onload="return imgresize(this);" onclick="javascript:window.open(this.src);" style="cursor:pointer;"/>( ),其中n为图像的象素总和,m为模型的大小,但是计算的区域较小,因此不会影响实时性。这里本文用椭圆模型定位瞳孔的中心,椭圆的长轴a=6,短轴b=3广义对称变换的原理参考文献[5]。
4. 将瞳孔中心上下5个象素,左右10个象素区域的灰度变换到[0,1],取0.4为阈值分割图像。计算瞳孔的面积。
absMiddle" border="0" onload="return imgresize(this);" onclick="javascript:window.open(this.src);" style="cursor:pointer;"/>
图5
为了进一步提高处理速度,本文并不对每一帧图像做上述步骤处理而是在定位出眼睛的中心位置后估计下一帧眼睛和眉毛的区域,用积分投影和广义对称的方法定位眼睛的中心,只有当连续两帧眼睛周围的亮度差值太大时才在整个图像范围内用上述的所有步骤定位眼睛。如图5显示了右眼的定位和瞳孔面积计算的过程。
六. 实验结果及结论
本文的实验在MATLAB7.0,C41.7GCPU,256MB内存的环境下进行。MATLAB7.0增加了与视频设备接口通讯的工具箱,,通过1394卡可以与dv摄像机通讯,实时捕捉和检索图像序列。本文采用MATLAB直接读取视频中的图像并进行处理,图像处理的速度在每秒8~12帧,在脸部不是过于偏离镜头造成背光严重的情况下能够准确定位瞳孔中心。当然采用单一的检测手段有一定的局限性,例如有些人睡觉时眼睛不闭合,有些人喜欢带墨镜,此时PERCLOS方法就会失效。,采用多种疲劳判别方式的综合可以提高判别的准确度,例如综合眼皮的眨动次数,头部姿势以及汽车在行驶时的横向速度的变化情况。为了提高系统疲劳检测的有效性,多种疲劳判别方式综合判定是我们对系统改进的研究方向。