APP下载

Hough变换和轮廓匹配相结合的瞳孔精确检测算法

2016-05-14毛顺兵

计算机应用 2016年5期

毛顺兵

摘要:针对红外眼部视频中瞳孔直径检测精度不够高的问题,提出了一种将Hough圆变换和轮廓匹配相结合的瞳孔检测算法(HoughContour)。对每帧图像,首先进行灰度化并滤波去噪;然后提取边缘并利用修改后的Hough梯度法检测出初始圆作为瞳孔参数;最后在滤波后的灰度图上的瞳孔附近用位置和半径在一定范围可变的圆形轮廓去匹配瞳孔,从而计算出瞳孔中心坐标和直径。在Hough变换阶段,将Hough梯度法中的对候选圆心按累加值降序排序这一步骤改为寻找最大值,以降低该操作以及后续计算半径的时耗。通过实验寻找到圆心累加数组最大值的阈值,使其能自动排除闭眼帧且不会导致漏检。在轮廓匹配阶段,实验发现如果圆形轮廓的移动范围和半径伸缩范围取值为初始圆半径的十分之一,点对数取值为40,则可将瞳孔的精确匹配率从OpenCV圆变换检测算法的约10%提高至99.8%。对算法的时间性能作了测试,在实验所用的低端电脑上处理一帧需要60ms,在高端电脑上可以对红外瞳孔视频做到实时检测。

关键词:瞳孔检测;Hough变换;轮廓匹配;红外视频;OpenCV

中图分类号:TP391.41 文献标志码:A

Abstract:In order to improve the precision of detection on the diameter of pupils in infrared eye videos, an exact pupil detection algorithm (HoughContour) combining Hough transformation and contour matching was proposed. Firstly, each image frame was grayed and filtered; secondly, the edge of the image was extracted and the initial circle was detected and taken as the pupil parameter by the revised Hough gradient method; finally, around the pupil, a circular contour whose position and radius varies in a limited range was used to match the pupil, realizing the calculation of pupil centers coordinate and diameter. In the phase of Hough transformation, the descending sort of candidate circle centers according to their accumulated values in Hough transformation was turned into searching for their maximum, in order to reduce the time consumption of this proceeding and the calculation of radius later. In the experiment, the threshold of the maximum in the array of accumulated values was searched and the image frames of closing eyes were excluded by this threshold. In the phase of contour matching, the experiment shows that if the range of the circular contour moving and stretching was assigned one tenth of the radius of the initial circle, and if the number of point pairs was assigned 40, the precision of detection on pupils would reach 99.8% from around 10% which was attained by OpenCV circle transformation. In the experiments on time performance, the proposed algorithm needed 60ms to process one frame on the lowend computers, and the realtime detection on infrared eye videos can be achieved on the highend computers.

Key words:pupil detection; Hough transformation; contour matching; infrared video; OpenCV

0 引言

瞳孔检测依据其目的可分为两类。一类是将瞳孔检测作为一个中间环节,以便进行人脸检测、表情分析、人机交互等处理;第二类是利用精确的瞳孔检测本身,将瞳孔直径、位置等检测结果直接用于心理研究、刑侦、医学工程等方面。在第二类的应用中, Behrends等[1]试图用瞳孔参数的变化来检测濒死病人的存活状态。Morad等[2]试图用瞳孔参数来评估司机疲劳驾驶。Kaklauskas等[3]开发了一套瞳孔分析系统,用以评估学生的学习状况。根据光源的性质,瞳孔检测也可分为两类:一是可见光,二是红外光。第二类由于对检测精确度要求更高,所以往往采用红外光。这是因为瞳孔和周围的虹膜对红外光的反射不同,因此在红外光下瞳孔边缘更为显著,不过同时会在瞳孔上留下反光白斑。本文算法针对第二类应用,基于红外眼部视频,精确检测出每一帧的瞳孔中心坐标和瞳孔直径。

瞳孔检测往往受到眼睑边缘、睫毛、反光白斑等干扰,这给瞳孔的精确检测带来了难度[4]。文献[4]将瞳孔边缘内接平行四边形的中心作为瞳孔中心,并选取边缘上5点计算瞳孔的特征,虽然运算速度较快,但由于边缘点的选取不易精准,故难以做到精确检测。Nair等[5]提出了基于Hough变换的椭圆检测算法,虽然Hough基于边缘、鲁棒性好,但椭圆的参数太多,导致参数空间累加器耗时太高,实时性差。张杰等[6]提出了用Hough圆变换检测瞳孔的方法,郝明刚等[7]提出用Hough圆变换精确定位瞳孔中心的方法,由于受到噪声边缘、睫毛边缘、白光边缘、眼睑边缘的影响,检测结果并不精确。田野等[8]提出用形态学重构瞳孔图像,再二值化并取得瞳孔直径。此外,有学者提出用模板匹配的方法来检测瞳孔,要么运算慢,要么难以确定模板大小。

针对红外眼部视频,本文将OpenCV的icvHoughGradient圆变换算法作了修改,降低了时间复杂度,并用修改后的Hough圆变换初步检测出瞳孔,再用轮廓匹配对瞳孔进行精确检测。

那么该圆对应了abr三维参数空间中的一个点,其中a、b、r 分别表示圆心的x坐标、y坐标、半径。同理,xy图像空间中的一个点,对应了abr空间中一个圆锥形曲面。如果圆形边缘上的点足够多,那么它们对应的若干曲面会相交于点(a,b,r), 因此在二值化的边缘图像中,每找出一个非零点,就要在abr空间累加器中进行累加。最后,abr空间中的每个峰值代表了一个圆。

由于标准Hough圆变换基于三维参数空间,执行效率太低,因此标准Hough圆变换很难实际应用。文献[9]利用圆上点的法线经过圆心的特点,文献[10]利用弦的中垂线必过圆心的性质,它们都能将参数空间降到二维。文献[11]利用三点双弦相交于圆心的特点,进一步将参数空间降低到一维,但瞳孔的运动会造成边缘模糊,因此不太适合。

icvHoughGradient圆变换算法的原理是,将问题分解为两个步骤:第一步是寻找所有可能的圆心,将它们称为候选圆心;第二步是确定半径。第一步要根据圆上点的法线经过圆心的特点,在ab二维累加器中累加。第二步要针对每一个候选圆心,考察它与其他已确定的圆心的距离,从而判断是保留还是舍弃;若保留则还要考察其受到边缘像素多大的支持,从而决定半径。

1.2 算法的不足

该算法用于检测瞳孔直径和位置有两个不足: 第一,在第一步中,累加完成之后,icvHoughGradient算法需要对这些候选圆心按累加值降序排列。由于该算法并不是专门针对瞳孔检测设计的,因此往往有几千个候选圆心,故排序操作以及后期计算半径的操作将会增加时耗。第二,由于受到噪声边缘、睫毛边缘、白光边缘、眼睑边缘的影响,检测结果并不精确。

2 HoughContour算法

2.1 算法总体流程

本文对文献[6-7]中的Hough圆变换进行了改进,以降低时耗;并在圆变换初步检测出瞳孔之后,利用轮廓匹配技术对瞳孔中心和直径进行精确检测。算法对红外视频进行逐帧检测,每读取一帧图像后需先灰度化,然后按下述步骤进行处理:

1)滤波降噪。

2)边缘提取。

3)改进的Hough圆变换,仅保留圆心累加值最大的那一个圆;如果检测不到圆,认为该帧处于闭眼状态或睁闭眼过程,返回。

4)在此唯一圆的附近进行轮廓匹配,精确计算出瞳孔的中心坐标和直径,并记录下来。

2.2 滤波降噪

图像中不可避免会有噪声,它们可能是系统外部的电磁干扰引起的外部噪声,也可能是系统内部机械、光电、材料等引起的内部噪声。噪声会影响后续的目标检测,因此需要先进行滤波降噪。

滤波方法有很多。由于后续的Hough变换依赖边缘,所以算法选择中值滤波。因为邻域的中值不受个别噪声毛刺的影响,相当好地消除冲击噪声[12],而且中值滤波在降噪的同时可以很好地保留边缘特性。

中值滤波的邻域可以有十字形、圆形、矩形等多种形状,由于瞳孔是圆形,没有明显角点,所以算法选用方形邻域。其原理是,对每一个像素p,考虑其n邻域。将这n×n个像素的值按大小排序,然后将排在中间的那个值赋给像素p,其中,n是奇数。

图1(a)是某320×240的红外视频帧滤波前的图像,图1(b)是对图1(a)施加5×5中值滤波的结果。

2.3 边缘提取

由于Hough变换是基于边缘图像的,因此滤波之后需要提取边缘。由于Canny检测子不易丢失重要边缘,并且检测出来的边缘位置与实际边缘位置偏差最小,所以算法采用Canny来检测边缘。图2是对图1(b)采用不同阈值进行Canny边缘检测产生的二值化边缘图。

调用时,Sobel算子内核大小取值3。另外两个参数中,较大者是控制强边缘初始分割的阈值,即,像素梯度大于该阈值的都被认为是强边缘,需保留;较小的阈值用来控制边缘连接,即,小于它的被抛弃,介于两个阈值之间的是否保留则要看它是否和强边缘相连。图2(a)显示检测出的边缘较少,图2(b)则较多。小阈值往往取大阈值的1/2。实验发现,由于红外视频中瞳孔边缘非常明显,所以如果大阈值采用区间[40,170]中的某个值,那么瞳孔都可以被Hough圆变换检测出来。不过图2(b)采用的阈值小,使得边缘点过多,会使得后续的圆变换耗时更长。实际系统中Canny算子的两个阈值可分别取值为100和50,既能保留足够多的边缘像素,又不会给圆变换操作带来太大负担。本文后面所有的边缘检测都采用这两个阈值。

2.4 修改后的Hough梯度法圆变换

icvHoughGradient圆变换检测瞳孔的第一项不足是时耗太高,本文对该算法作了修改。在实际的瞳孔视频帧中,瞳孔只有一个,故将icvHoughGradient算法中的降序排序改为寻找最大值。如此一来,不仅减少了排序自身的时耗,而且也降低了计算半径的时间开销。可能有几个候选圆心的累加值同为最大值,但它们是相邻的,而且这里只是粗定位,所以任何一个作为圆心都是可行的。

修改后的圆变换算法可描述如下:

算法1 修改后的圆变换算法。

输入 边缘图;

输出 唯一圆c0的中心坐标和直径(x0, y0, r0)。

1)对于边缘图像上的每个非零点,利用cvSobel计算x和y方向的一阶导数,从而得到梯度。

2)沿着梯度方向和反方向,对最小半径和最大半径指定范围内的点进行累加。

3)所有非零点都经过1)~2)的处理之后,在累加数组中寻找最大值,如果最大值小于给定的累加器阈值,则认为处于闭眼状态或睁闭眼过程,返回;如果最大值不小于该阈值,那么该最大值的下标是唯一圆心(x0, y0)。

4)将边缘图像中所有非零像素按照它与唯一圆心的距离排序,选择非零像素最支持的一条半径r0,此时确定唯一圆。

例1 圆心累加数组和圆变换检测结果。

图3是对图2(a)的边缘图像进行圆心检测的结果。由于累加值较小,为便于呈现效果,故将累加值放大。对比图2(a)和图3,可以看到瞳孔中心附近的累加值较大,但并不集中,这是由于瞳孔边缘并非标准的圆形,并且受到眼睑和睫毛边缘的影响。图4是对图1(a)进行滤波、边缘提取、圆变换检测后的结果。根据检测出的瞳孔坐标和半径,在滤波前的红外图像上用线宽1的白色细线画了一个圆形。文中所有的白色圆形都是程序在原始红外视频帧上进行绘制。图中可以看到圆变换检测不够精确,还需进行精确检测。

圆变换中,如果圆心累加数组中的最大值小于给定阈值,算法认为视频帧处于闭眼状态或睁闭眼过程,从而检测不出圆形。只要该阈值取值适合,就既能让瞳孔中心通过,又能自然地排除睁闭眼过程,无需额外的睁闭眼判断。通过大量实验发现,该阈值可取值为30。在3.1节中对该阈值的取值和适用性进行了说明。

例2 睁闭眼的视频帧自动排除。

图5和图6表示,对于睁闭眼过程帧和闭眼帧,由于圆心累加值小于阈值30,圆变换无法检测出圆形。

2.5 轮廓匹配实现精确检测

icvHoughGradient圆变换检测瞳孔的第二项不足是检测瞳孔中心坐标和半径并不精确,HoughContour算法在圆变换之后又采用了轮廓匹配技术。匹配在灰度图上进行,其理论依据是,在红外视频中瞳孔的灰度远比虹膜更小。假定圆变换检测出来的圆形为c0,其圆心坐标和半径分别是x0、y0、r0。用一个半径在一定范围内可变的圆形c在c0附近区域移动,每到一处都要计算圆形c的内外的平均差值。算法认为,当圆c和瞳孔边缘重叠时,平均差值取得最大值。此时的圆c,对应了真正的瞳孔中心位置和半径。

可移动圆形c的圆心坐标和半径用x、y、r表示。图7(a)表示了圆c内外的一个点对,图7(b)表示8个点对的情形。图7(a)中点p1表示角度θ对应的圆内点,点p1′表示角度θ对应的圆外点。这两个点组成了一个点对。要取得这两个点的灰度值,需要先获得它们的位置。

3 实验结果与分析

实验硬件平台使用较低端的Acer笔记型电脑,CPU为奔腾双核T2390,主频为1.86GHz。软件平台为Windows XP、VC6、OpenCV 1.0,视频解码器为K-Lite_Codec_Pack_800_Mega。滤波平滑和边缘提取分别采用OpenCV的cvSmooth和cvCanny,圆变换和轮廓匹配用C++实现。获取时间是调用Windows API函数GetLocalTime实现, 后面的性能分析是基于此平台。

3.1 圆变换时圆心累加阈值的取值

圆变换时,只有当圆心累加数组中的最大值大于指定阈值时,算法才认为它对应一个圆。所以该阈值的取值非常关键。

图11(a)表示该阈值取值40时,某帧的瞳孔没有检测出来。原因是视频图像中瞳孔的运动使得瞳孔边缘模糊,造成圆心累加太过分散,从而使得圆变换时圆心累加数组的最大值小于40。实验时输出图11(a)的圆心累加数组最大值,发现是38。图11(b)表示该阈值取值10时,在某闭眼帧中错误地检测出了一个圆形。实验时将图11(b)的圆心累加数组最大值输出,发现是11。

经过实验统计发现,当该阈值取值20~35时,即便是图11(a)中的边缘模糊的瞳孔仍能检测出来,同时能保证不检测出睁闭眼过程和闭眼状态的瞳孔。图(c)表示阈值取30时,对图(a)正确检测出瞳孔,细线圆形和粗线圆形分别是圆变换初检测和轮廓匹配精确检测的结果。图(d)表示阈值取30时,正确排除闭眼状态。

圆心累加数组最大值的影响因素有瞳孔尺寸、是否处于睁闭眼过程、瞳孔是否运动。图11(c)表示圆心累加阈值取值为30时,对于瞳孔运动引起的边缘模糊的图像能做到正确检测。图11(d)表示该阈值取值为30时,能自动排除睁闭眼图像帧。但还有一个因素是以像素数计量的瞳孔尺寸。实验发现,当瞳孔直径大于30像素时,阈值取值30总能够正确检测出瞳孔。即只要红外视频中瞳孔直径大于30像素,那么该阈值取值为30对于所有这些视频都适用。但瞳孔直径为20像素时,阈值取值30无法检测出瞳孔,反而可能检测出虹膜,这是由于瞳孔边缘像素过少所致。在实际应用中,由于采集的视频分辨率够高,瞳孔直径都较大,所以30这个阈值对于瞳孔尺寸具有极高兼容性。

3.2 圆变换的时间性能

文献[6-7]直接采用OpenCV的Hough梯度法icvHoughGradient检测瞳孔。该算法接收灰度图像,先调用cvCanny来提取边缘,再进行Hough圆变换,可检测多个圆。本文的HoughContour算法将边缘提取和圆变换分开了,并且针对只有一个瞳孔的设定视频,将圆变换作了修改。在比较时间性能时,要将边缘提取计入其中。Hough变换时,累加器的分辨率对时耗的影响极大。本文就640×480、320×240两种规格的红外瞳孔视频以及累加器分辨率为1和2等几种情形作了实验。表1揭示了两种算法处理一帧的平均时间。

从表1可以看出,如果只检测一个圆,本文的算法运算更快。要说明的是,上述实验中在给圆变换指定圆半径范围时,为更具兼容性,将半径最小值指定为帧高度的1/20,将半径最大值指定为帧高度的1/2。在实际的应用系统中,如果知道待检测瞳孔半径在图像中的大致比例,可以将这个范围缩小,那么以上两种圆变换的运算时间可以更短一些。

3.3 轮廓匹配时参数的取值与准确率、时间性能

定义1 精确匹配。精确匹配是指,对于某帧根据轮廓匹配的结果,系统在该帧上画一个圆形,在人类视觉感官看来,该圆形和瞳孔边缘是完全重叠的。

定义2 精确匹配率。精确匹配率是指,对于若干视频的所有图像帧,有多少比例的图像帧能做到精确匹配。

圆变换只能初步检测瞳孔,实验发现圆变换的精确匹配率大约为10%。HoughContour算法在圆变换之后补充了轮廓匹配操作。轮廓匹配是在滤波后的灰度图像上进行,不能在滤波前的灰度图上进行; 否则,噪声会对匹配结果有极大影响。

从算法2的伪代码可以看出,有d和k这两个重要的参数影响精确匹配的准确率和时间性能。假定圆变换检测出来的圆是c0,其圆心坐标和半径分别是x0、y0、r0。参数d控制可移动圆c在c0附近的移动范围和半径变化范围。参数k控制每次匹配时的最大点对数。理论上d和k越大,匹配越精确,时间开销也越大。

图12(a)和图12(b)是对同一帧图像用不同d值进行轮廓匹配的结果。图(a)表示,当d取值r0/40时,对某帧的匹配检测不精确; 这是因为对于该帧,圆变换的误差较大,同时较小的d值又使得圆c无法移动太远,从而无法覆盖瞳孔。图(b)表示,对同一帧图像,当d取值r0/15时,轮廓匹配检测比图(a)更精确; 图中细线圆形是圆变换的结果,粗线圆形是轮廓匹配的结果。

图12(c)和图12(d)是在参数d取值恒定的情况下,用不同k值对某一帧进行检测的结果。可以看出: 图(c)中参数k太小,当遇到某些帧时,匹配会出现偏差; 图(d)中k值更大,对于该帧的匹配检测精确。

对某些帧,圆变换的偏差可能相对较大,如图12(a)中的细线圆形。实验发现,当d的取值为r0/10时,可移动圆c有足够的移动范围和半径变化范围,因而对所有帧都足以覆盖瞳孔边缘。但仍有极个别图像帧,由于瞳孔不是圆形造成轮廓匹配检测不精确。图13(a)表示该帧中瞳孔向下运动,瞳孔已经不呈圆形,加之边缘模糊以及受到上眼脸的影响,使得图(b)的检测不精确。

表2中有些时耗标注为小于1ms。这是因为实验采用的GetLocalTime系统调用的输出只能精确到毫秒级, 因此在实验所用的输出文件中,连续若干帧的匹配时间都是0。强行取平均值将使得数据不准确。

现象1 从表2可以看出,当k值逐渐变大时,精确匹配率急剧提高,当k取值40时已经到达极点。分析原因:当k值增大时,噪声的影响被削弱,系统更加稳定。

现象2 对比相同k值下的时耗,对于分辨率为320×240的帧进行匹配,时耗比处理640×480的帧要低很多。分析原因:尽管k值相同,代表了点对数相同,但如果640×480的帧中瞳孔半径要大很多,即r0更大,使得d=r0/10更大,从而使得移动范围和半径变化范围更大。算法2中这三重循环会使得时耗更高。这也说明,参数d是影响匹配算法时间性能的决定因素,k只是次要因素。

4 结语

针对眼部红外视频,本文提出一种瞳孔精确检测算法,即,在滤波和边缘提取之后,先用修改过的Hough梯度圆变换初步检测瞳孔,然后在滤波后的灰度图的瞳孔附近区域用轮廓匹配技术进行精确检测。由于视频帧中只有一个瞳孔,故将icvHoughGradient算法中的将候选圆心坐标按累加值降序排序这一步骤改为寻找最大值,以减少该操作的时耗和后续计算半径的时耗。不过为了精确检测,轮廓匹配操作又增加了一些时耗。作了大量实验调整圆变换中的圆心累加阈值,使其能自然排除睁闭眼过程,并对圆变换和轮廓匹配的准确率和时间性能作了分析。实验证明,第一,该算法能对瞳孔进行精确检测。第二,在保证精确匹配率的前提下,在时间性能上,对于320×240的视频,在低端电脑上可以进行实时检测;对于640×480的视频,累加器分辨率设置为2时,在实验所用的低端电脑上处理一帧需要大约60ms,未到实时处理要求,在高端电脑上可以进行实时检测。

参考文献:

[1]BEHRENDS M, NIEMANN C U, LARSON M D. Infrared pupillometry to detect the light reflex during cardiopulmonary resuscitation: a case series[J]. Resuscitation,2012,83(10):1223-1228.

[2]MORAD Y, BARKANA Y, ZADOK D, et al. Ocular parameters as an objective tool for the assessment of truck drivers fatigue[J]. Accident Analysis and Prevention, 2009,41(4):856-860.

[3]KAKLAUSKAS A, VLASENKO A, RAUDONIS V, et al. Student progress assessment with the help of an intelligent pupil analysis system[J]. Engineering Application of Artificial Intelligence, 2013,26(1):35-50.

[4]TAKAYUKI S, MASAMI K. A pupil diameter measurement system for accident prevention[C]// Proceedings of the 2006 IEEE International Conference on Systems, Man, and Cybernetics. Piscataway, NJ: IEEE, 2006, 2:1699-1703.

[5]NAIR P S, SAUNDERS A T Jr. Hough transform based ellipse detection algorithm[J]. Pattern Recognition Letters, 1996, 17(7):777-784.

[6]张杰,杨晓飞,赵瑞莲.基于Hough变换圆检测的人眼精确定位方法[J].计算机工程与应用,2005,41(27):43-44.(ZHANG J,YANG X F,ZHAO R L. Eyes detection based on Hough transform[J].Computer Engineering and Applications,2005,41(27):43-44.)

[7]郝明刚,董秀成,黄亚勤.一种精确的人眼瞳孔定位算法[J].计算机工程,2012,38(8):141-143.(HAO M G, DONG X C, HUANG Y Q. Precise human eye pupil localization algorithm[J].Computer Engineering, 2012,38(8):141-143.)

[8]田野,王怀军,方志良.基于形态学重构算法的瞳孔精确检测[J].光电子· 激光,2008,19(3):409-411. (TIAN Y, WANG H J, FANG Z L. The pupil diameter precise measurement based on morphological reconstruction algorithm[J]. Journal of Optoelectronics · Laser, 2008, 19(3): 409-411.)

[9]DAVIES E R. The effect of noise on edge orientation computation[J]. Pattern Recognition Letters, 1987,6(5): 315-322.

[10]IOANNOUA D, HUDAB W, LAINEC A F. Circle recognition through a 2D Hough transform and radius histogramming[J]. Image and Vision Computing, 1999, 17(1): 15-26.

[11]林金龙,石青云.用点Hough变换实现圆检测的方法[J].计算机工程,2003,29(11):17-18. (LIN J L, SHI Q Y. Circle recognition through a point Hough transformation[J]. Computer Engineering, 2003, 29(11): 17-18.)

[12]SONKA M, HLAVAC V, BOYLE R.图像处理、分析与机器视觉[M].艾海舟,苏延超,译.北京:清华大学出版社, 2011:90.(SONKA M, HLAVAC V, BOYLE R. Image Processing, Analysis, and Machine Vision[M].AI H Z, SU Y C, translated. Beijing: Tsinghua University Press,2011: 90.)