疲劳驾驶是引发交通事故的主要原因之一。根据视频图像来定位和检测驾驶员面部特征,从而进行疲劳检测已成为研究热点。眼睛与人脸其他部位相比,特征相差比较大,故易于进行定位。同时,眼睛准确定位也有助于驾驶员脸部其他部位进行定位和检测。眼睛定位的算法比较多,常用的算法有:区域分割、灰度投影、边缘提取、模板匹配等。如朱淑亮、李粉兰等[1-2]采用区域分割法,通过建立肤色模型进行区域分割,然后设定一系列经验值进行眼睛定位,该方法对人眼闭合以及戴眼镜等情况不能有效定位;Wang等[3]采用灰度投影法,根据人脸图像水平和垂直方向投影曲线中的波峰和波谷位置进行眼睛定位,运算速度比较快,但易受人脸姿态变化和眼睛闭合的影响,精度较差;Sun等[4]利用边缘检测法来定位人眼,首先对人脸图像进行边缘提取,然后基于Hough变换检测眼球位置,构造眼球模板,该方法需要做大量预处理,不能满足实时性要求;Phimoltares等[5]利用可变形模板进行人眼定位,方法简单但运算量较大。另外,陈振学、黄坤等[6-7]采用改进的Adaboost算法进行人脸和眼睛定位,但该算法受限于人脸分类器的训练,随着人脸姿态的变化,准确率下降,鲁棒性不好。人眼状态识别常用的方法主要有基于机器学习的分类法和基于图像理解的分析法。如Zhang等[8]基于RBF神经网络进行眼睛状态识别,但需要大量眼睛模板进行训练,计算量比较大;Li等[9]提出利用二值化水平投影法和Hough变换查找圆法相结合来进行眼睛状态识别,但该方法易受头部多角度变化和眼睛边缘检测效果的影响,精度不高;Horng等[10]通过采用灰度模板匹配来进行眼睛状态检测,但该方法需要制作大量睁、闭眼睛模板,对半睁眼和闭眼分辨成功率不高,且易受光照条件的影响。
笔者提出一种在驾驶员头部角度可变化下的眼睛快速定位与状态检测算法。首先对驾驶员视频图像进行光照补偿,根据肤色检测定位出人脸图像;然后确定人眼灰度范围,二值化图像,确定眼睛候选区域;最后根据计算各候选区域纹理特征向量值的差异,确定眼睛位置。为提高算法准确率,笔者又根据黑斑拟合椭圆进行眼睛验证和状态检测。
1 人脸定位肤色是人脸非常重要的特征之一。虽然不同人之间的人脸肤色看上去有所不同,但是这种不同主要集中于亮度上,在色度空间中,不同的人脸肤色分布具有类聚性。因此,基于肤色的人脸检测可以准确、快速地检测人脸部位。首先,对采集到的驾驶员视频图像进行光照补偿,然后将视频图像从相关性较高的RGB颜色空间转换到颜色分量分开的YCbCr颜色空间,转换公式为[11]
$ \left[ \begin{array}{l} \mathit{\boldsymbol{Y}}\\ {\mathit{\boldsymbol{C}}_{\rm{b}}}\\ {C_{\rm{r}}} \end{array} \right] = \left[ {\begin{array}{*{20}{c}} {0.2989}&{0.5866}&{0.1145}\\ { - 0.1688}&{ - 0.3312}&{0.5000}\\ {0.5000}&{ - 0.4184}&{ - 0.0817} \end{array}} \right]\left[ {\begin{array}{*{20}{c}} \mathit{\boldsymbol{R}}\\ \mathit{\boldsymbol{G}}\\ \mathit{\boldsymbol{B}} \end{array}} \right]。$ | (1) |
最后,建立适当的肤色模型,利用图像的肤色信息进行人脸定位。该方法不受驾驶员坐姿和头部角度变化的影响,是驾驶员疲劳检测中比较活跃的研究方向。
2 眼睛候选区域检测 2.1 眼睛候选区域提取眼睛区域与人脸其他部位相比,灰度变化比较明显,且与其他部位灰度值相差比较大。基于这一特性,笔者根据眼睛区域灰度设定阈值,从人脸灰度图像中提取眼睛候选区域。因此,该方法重要的是确定眼睛灰度范围。
假定人脸图像平均灰度为M,人脸图像灰度协方差为Z,通过对2 000多张人脸图像实验得出眼睛灰度最大值一般为E=M-Z/k,k为经验值。根据人眼灰度确定阈值,然后将原始人脸图像转化为二值图像,如图 1所示。
![]() |
图 1 二值化图像 |
图 1(b)为采用大津算法处理的人脸图像,比较(b)、(c)图像可以看出,采用人眼灰度阈值可以将眼部区域分离出来,有效减小眉毛、嘴巴、人脸肤色以及背景等区域。但从图 1(c)中也可以看到,头发、鼻孔、嘴巴以及衣服等仍残留一些小面积区域,需对其进行进一步处理,以消除干扰,提高算法精度。
2.2 形态学图像处理形态学图像处理是图像处理的一个重要研究领域,其基本思想是用具有一定形态的结构元素去度量和提取图像中的对应形状来分析和识别图像,主要运算有膨胀和腐蚀以及在这两种运算基础之上建立的开、闭运算[12]。通过形态学图像处理,可以大大简化图像数据,保持图像的基本形状特性,并除去不相干的结构。
从图 1(c)可以看出,噪声信号主要表现为边缘区域的块状、带状噪声,以及局部的点状噪声等。采用形态学图像处理,以消除这些噪声,方便后续图像处理。笔者首先对二值图像边缘的块状、带状进行消除运算;然后再对图像分别进行闭运算和开运算,所得结果如图 2所示。
![]() |
图 2 形态学图像处理 |
从图 2可以看出,图像边缘的噪声已经被滤掉,仅剩下眉毛、眼睛、鼻子以及嘴巴部位,这就为眼睛定位提供了方便。
3 眼睛定位与验证 3.1 眼睛初步定位由于人的脸部包含丰富的特征信息,根据“三庭五眼”的比例关系,只需对脸的上半部分进行检测,即可确定眼睛位置。由于图 2中眉毛、眼睛等位置相对于原始人脸图像的位置是不变的,因此,通过检测图 2可以很容易的在原始人脸图像中定位出眉毛、眼睛等位置,从而确定出眼睛候选区域。其检测结果如图 3所示。
![]() |
图 3 初步定位结果 |
人脸上半部分的眼睛候选区域包含眉毛和眼睛区域。根据眉毛、眼睛等部位的纹理特性不同,笔者提出基于不同纹理特征的眼睛辨别方法。
纹理特征[13]是物体表面的一种基本自然属性,是描述和区分不同物体之间的重要特征之一。纹理图像分析就是通过对图像进行运算,提取出纹理信息并进行分析、比较不同物体间的纹理信息区别。其基本思路是找出某种能够描述纹理空间分布的模型,给出反映图像不同纹理的参数,构成特征向量,满足不同纹理间的离散性。Haralick等[14]提出空间灰度共生矩阵法,它是一种基于统计的有效的纹理特征分析方法。任何图像的灰度表面都可以看成是三维空间中的一个曲面,假设在一幅图像中,f(x, y)的灰度值为i,间隔距离为δ,灰度值为j的像素f(x+Δx, y+Δy)同时出现的概率为p(i, j, δ, θ)。则
$ \begin{array}{*{20}{c}} {p\left( {i,j,\delta ,\theta } \right) = }\\ {\left\{ {\left[ {\left( {x,y} \right),\left( {x + \Delta x,y + \Delta y} \right)} \right]\left| {I\left( {x,y} \right) = i} \right.,} \right.}\\ {I\left( {x + \Delta x,y + \Delta y} \right) = j,}\\ {\left. {x = 0,1, \cdots ,{N_x} - 1;y = 0,1, \cdots {N_y} - 1} \right\},} \end{array} $ | (2) |
式中:i, j=0, 1, …, L-1;L为灰度级数;(x, y)为像素点坐标;Nx、Ny为图像的行数、列数。本文中,θ值分别为0°、45°、90°、135°,δ值取为1。
图像的灰度级数一般为256级,数据量非常大,在求灰度共生矩阵之前,有必要对图像级数进行压缩,一般取压缩等级为16,然后还需进行图像归一化处理,其公式为
$ \tilde p\left( {i,j} \right) = \frac{{p\left( {i,j} \right)}}{R}, $ | (3) |
式中R为归一化系数。
一般在纹理分析过程中,不直接计算灰度共生矩阵,而是在其基础上提取纹理特征量。标识图像的纹理特征量有很多,常用的统计量有角二阶矩、对比度、相关性及熵等[15]。例如角二阶矩定义为
$ {Q_1} = \sum\limits_{i = 0}^{L - 1} {\sum\limits_{j = 0}^{L - 1} {{{\tilde p}^2}\left( {i,j} \right),} } $ | (4) |
Q1值的大小主要反映了图像灰度分布的均匀程度和纹理粗糙程度,Q1越大,表明纹理越粗糙,相反则纹理越均匀。由于眼睛区域相比眉毛而言,纹理比较均匀,Q1值应较小。对比度定义为
$ \begin{array}{c} {Q_2} = \sum\limits_{n = 0}^{L - 1} {{n^2}\left\{ {\sum\limits_{\begin{array}{*{20}{c}} {i = 0} \end{array}}^{L - 1} {\sum\limits_{j = 0}^{L - 1} {{{\tilde p}^2}\left( {i,j} \right)} } } \right\}} ,\\{n = \left| {i - j} \right|} \end{array} $ | (5) |
Q2值越大,表明纹理特征越深。由于眼睛区域主要包括眼白和瞳孔两部分,眼睛区域的对比度一般会比较大。相关性主要是衡量图像的相似程度,其值主要反映了图像灰度的相关性。若图像灰度变化均匀,则相关性就高;反之则低。而眼睛区域中眼白和瞳孔颜色变化最大,相关性会最差。熵主要反映了整个区域内灰度变化的复杂程度,灰度变化越是没有规则,其值就越大。在计算统计量时,θ值分别取为0°、45°、90°、135°。
以上4个统计量表示图像纹理特征在某一方面所具有的性质,因此在眼睛检测中,对不同候选区域,通过比较这些特征量,可以反映出候选区域纹理特征的差异,从而定位出眼睛区域,如图 4所示。
![]() |
图 4 眼睛定位结果 |
定位出眼睛后,为了提高算法的准确率,需对定位出的眼睛进行验证。在二值图像中,定位出的瞳孔形状接近于某个椭圆,而眉毛与椭圆形状相差甚远,故笔者提出采用黑斑椭圆拟合来进行眼睛验证。对其中任何一个黑斑都可以通过计算其面积、质心位置和二阶矩来找到与之相对应的椭圆参数。
在二值图像中,每个像素坐标用(r, c)表示,若某区域R中存在一黑斑,则黑斑面积A可表示为
根据椭圆几何参数计算公式,椭圆的长、短轴可用其二阶矩分别表示为
$ a = 2\sqrt 2 \sqrt {{\mu _{cc}} + {\mu _{rr}} + \sqrt {{{\left( {{\mu _{cc}} - {\mu _{rr}}} \right)}^2} + 4\mu _{rc}^2} } , $ | (6) |
$ b = 2\sqrt 2 \sqrt {{\mu _{cc}} + {\mu _{rr}} - \sqrt {{{\left( {{\mu _{cc}} - {\mu _{rr}}} \right)}^2} + 4\mu _{rc}^2} } 。$ | (7) |
根据以上公式可计算出黑斑对应的椭圆参数。当黑斑对应某个椭圆参数时,可以计算出椭圆参数的准确值;当黑斑形状不是椭圆时,则计算结果与对应的椭圆参数有一定的偏差。为了描述黑斑形状与椭圆间的偏差,笔者将此偏差定义为椭圆硬度λ[16],其计算公式为
$ \lambda = \frac{{{\rm{ \mathit{ π} }}ab}}{A}, $ | (8) |
即椭圆硬度为椭圆面积与黑斑面积之比。椭圆硬度越接近于1,说明黑斑越接近于椭圆。图 5所示分别为图 2中眼睛瞳孔、左眉对应的黑斑拟合椭圆形状。
![]() |
图 5 黑斑拟合椭圆 |
通过对1 000多张人脸图像实验得出,利用黑斑椭圆性质对眼睛进行验证,通常验证规则为:椭圆硬度值一般小于1.5;椭圆长短轴之比一般小于2.5。
4 眼睛状态分析眼睛状态分析主要是检测眼睛的睁开程度,最直接的反映就是眼睛面积的变化。眼睛区域主要包括眼白(白色)、虹膜和瞳孔(黑色)3部分。在二值图像中,眼睛面积的变化就是指虹膜和瞳孔面积的变化。
当眼睛完全睁开时,虹膜和瞳孔模型为一椭圆,其面积为
$ S = {\rm{ \mathit{ π} }}ab, $ | (9) |
式中:a为椭圆短轴;b为椭圆长轴。当眼睛部分睁开时,对应的黑斑面积会减小。在二值图像中,通过对黑斑(虹膜和瞳孔)进行面积计算,得S′,则眼睛睁开程度可表示为
$ p = \frac{{S'}}{S}。$ | (10) |
整个算法流程如图 6所示。
![]() |
图 6 算法流程图 |
考虑驾驶员头部会经常转动,所以选择多幅不同角度拍摄的驾驶员人脸照片进行分析。根据笔者提出的眼睛检测与定位算法进行检测,首先经过肤色检测和根据人眼灰度范围二值化图像;再经过形态学图像处理,进行人眼初定位;最后对所得眼睛候选区域进行纹理特征向量计算。应用本文算法部分实例如下。
图 7两组曲线分别为图 8(a)、(b)中眼睛候选区域纹理向量特征值。由每组曲线均可以看出,眼睛、眉毛和皮肤的纹理向量特征值差别非常明显;其中眼睛部位的角二阶矩和相关性为最小,均小于0.1,熵值和对比度为最大,可以作为眼睛定位的判断依据。另外,两组曲线分别是根据驾驶员头部不同角度计算得出的,比较两组曲线发现,眼睛部位的纹理向量特征值变化趋势基本一致,不受头部角度的影响,因此该算法可以准确定位出不同头部角度下的眼睛位置。图 8给出了实际中驾驶员头部经常变化的情况,其中头部均有一定的倾斜角度,具有较好的代表性。眼睛定位结果如图 8所示,实线区域为人脸定位结果。
![]() |
图 7 纹理向量特征值曲线 |
![]() |
图 8 眼睛定位结果 |
根据黑斑拟合椭圆对检测出来的眼睛区域进行验证。图 8(a)、(b)拟合后的椭圆参数如表 1所示,为更好地与眉毛区域进行比较,表中也给出了眉毛区域拟合椭圆后的参数。从表 1可以看出,左右眼对应的椭圆参数满足验证规则;而虽然左、右眉毛对应的椭圆硬度均小于1.5,但椭圆长短轴之比均大于2.5,不满足眼睛验证规则。
表 2给出了图 8中驾驶员眼睛睁开程度。一般认为,p > 70%为全睁状态;30% < p < 70%为半睁眼状态;p < 30%为闭眼状态。
![]() |
表 2 眼睛睁开程度 |
表 3给出了不同算法检测一段驾驶员视频图像的眼睛定位结果比较。边缘提取与模板匹配所需时间较长,区域分割与灰度投影对侧面人脸的检测效果并不理想。与此相比,本文算法不仅所需时间较短,而且不受头部角度变化的影响,准确率比较高,具有更好的鲁棒性。
![]() |
表 3 与其他算法比较 |
笔者提出了一种考虑驾驶员姿态和头部角度变化的眼睛快速定位与状态检测算法。该算法首先是基于肤色检测和纹理特征进行驾驶员眼睛定位,然后又根据黑斑拟合椭圆进行眼睛验证和状态检测。通过实验来看,头部角度变化时的各候选区域纹理特征值差别仍较大,因此该算法不受驾驶员姿态和头部角度的影响,定位效果好,且计算速度快,能较好地应用于驾驶员疲劳检测实时系统设计。
[1] |
朱淑亮, 王增才, 王树梁, 等.
头部多角度的眼睛定位与状态分析[J]. 重庆大学学报, 2010, 33(11): 20–26.
ZHU Shuliang, WANG Zengcai, WANG Shuliang, et al. Eye localization and state analysis of head multi-position in color image[J]. Journal of Chongqing University, 2010, 33(11): 20–26. DOI:10.11835/j.issn.1000-582X.2010.11.004 (in Chinese) |
[2] |
李粉兰, 徐可欣.
一种应用于人脸正面图像的眼睛自动定位算法[J]. 光学精密工程, 2006, 14(2): 320–326.
LI Fenlan, XU Kexin. An algorithm applied in frontal-view face images for automatically localizing eyes[J]. Optics and Precision Engineering, 2006, 14(2): 320–326. (in Chinese) |
[3] | Wang W C, Chang F L, Zhang G Q, et al. A precise eye localization method based on ratio local binary pattern[J]. Journal of Convergence Information Technology, 2011, 6(1): 126–134. DOI:10.4156/jcit |
[4] | Sun W, Tang H Q. Driver fatigue driving detection based on eye state[J]. International Journal of Digital Content Technology and its Applications, 2011, 10(5): 307–314. |
[5] | Phimoltares S, Lursinsap C, Chamnongthai K. Face detection and facial feature localization without considering the appearance of image context[J]. Image and Vision Computing, 2007, 25(5): 741–753. DOI:10.1016/j.imavis.2006.05.017 |
[6] |
陈振学, 常发亮, 刘春生, 等.
基于Adaboost算法和人脸特征三角形的姿态参数估计[J]. 武汉大学学报:信息科学版, 2011, 36(10): 1164–1168.
CHEN Zhenxue, CHANG Faliang, LIU Chunsheng, et al. Pose parameters estimate based on adaboost algorithm and facial feature triangle[J]. Geomatics and Information Science of Wuhan University, 2011, 36(10): 1164–1168. (in Chinese) |
[7] |
黄坤, 韩飞, 杨月全, 等.
基于扩展三角特征的AdaBoost快速人眼检测算法[J]. 北京科技大学学报, 2012, 34(1): 48–52.
HUANG Kun, HAN Fei, YANG Yuequan, et al. AdaBoost fast eye detection algorithm based on extended triangular features[J]. Journal of University of Science and Technology Beijing, 2012, 34(1): 48–52. (in Chinese) |
[8] | Zhang Y, Zhao X Y, Fu H, et al. A time delay neural network model for simulating eye gaze data[J]. Journal of Experimental and Theoretical Artificial Intelligence, 2011, 23(1): 111–126. DOI:10.1080/0952813X.2010.506298 |
[9] | Li Y H, Zhu S A. Hough transform for eye feature extraction[J]. Journal of Zhejiang University:Engineering Science, 2008, 42(7): 1164–1168. |
[10] | Horng W B, Chen C Y, Chang Y, et al. Driver fatigue detection system based on eye tracking and dynamic template matching[J]. Tamkang Journal of Science and Engineering, 2008, 11(1): 65–72. |
[11] |
黄秀常.
基于改进YCbCr空间的肤色检测模式分析[J]. 计算机仿真, 2010, 27(7): 222–225.
HUANG Xiuchang. Skin color detection mode based on improved YCbCr[J]. Computer Simulation, 2010, 27(7): 222–225. (in Chinese) |
[12] |
朱淑亮, 王增才, 王保平.
驾驶员疲劳状态监测中的彩色图像光照补偿技术[J]. 重庆大学学报, 2011, 34(1): 42–46.
ZHU Shuliang, WANG Zengcai, WANG Baoping. Illumination compensation of color video for driver fatigue monitor[J]. Journal of Chongqing University, 2011, 34(1): 42–46. DOI:10.11835/j.issn.1000-582X.2011.01.007 (in Chinese) |
[13] | Tian Z, Duan C J, Yuan K H, et al. A texture feature-based method for dynamic organ tracking[J]. International Journal of Innovative Computing, Information and Control, 2010, 6(12): 5697–5708. |
[14] | Haralick R M, Shanmugam K, Dinstein I. Textural features for image classification[J]. IEEE Transactions on Systems, Man and Cybernetics, 1973, 3(6): 610–621. |
[15] | Ranqayyan R M, Nquyen T M, Ayres F J, et al. Effect of pixel resolution on texture features of breast masses in manmograms[J]. Journal of Digital Imaging, 2010, 23(5): 547–553. DOI:10.1007/s10278-009-9238-0 |
[16] | Bai X Z, Sun C M, Zhou F G. Splitting touching cells based on concave points and ellipse fitting[J]. Pattern Recognition, 2009, 42(11): 2434–2446. DOI:10.1016/j.patcog.2009.04.003 |