基于FPGA平台的实时人眼检测系统设计*
2012-09-08李秀圣郭伟峻
李秀圣,郭伟峻
(1.潍坊学院,山东 潍坊 261061;2.中兴通讯股份有限公司,陕西 西安 710065)
人眼检测系统在疲劳驾驶、人脸识别、人机交互、视频监控等方面具有广泛的应用[1]。目前,用于人眼检测的方法主要包括积分投影、模板匹配和统计的方法[2]。其中,积分投影法实现的系统对人脸的姿态非常敏感,特别是在人眼处的波峰和波谷位置,导致检测准确率低;而基于模板匹配和统计的方法难以在硬件上实现。在实现平台上,大部分人眼检测系统基于PC机实现,存在体积大、功耗高的缺点;小部分系统基于DSP平台实现[3],但指令的执行以串行方式进行,难以满足系统实时检测的要求。
FPGA具有数据并行处理的特点,指令执行速度快,易于满足实时性检测的要求。并且可以通过硬件描述语言结合FPGA内部资源进行逻辑电路设计,而不需要附加专用芯片,利于实现系统的小型化[4],基于以上考虑,本系统选取FPGA作为硬件实现平台。在系统实现方法上,根据人眼对不同波长的红外光具有不同反射率的原理,对分别在850nm和940nm两种波长的红外光照射下获得的人脸图像进行差分,然后通过图像处理,结合改进的复杂度算法最终获得人眼位置。
1 系统结构及工作原理
系统的硬件结构主要由CMOS图像传感器、红外光源、FPGA、视频编码芯片、VGA接口及若干存储器等组成,其中红外光源由内外两圈环形的LED灯产生,外圈是波长为940nm的红外LED灯,内圈是波长为850nm的红外LED灯。
系统工作流程如图1所示,CMOS图像传感器经12C配置电路初始化后输出行有效信号、帧有效信号、像素时钟信号及数据信号。人眼瞳孔对波长为940nm红外光的反射率为40%,对波长为850nm红外光的反射率是90%[5],通过控制两圈不同波长的LED灯随图像帧频率而交替闪烁即可获得相邻的两帧亮、暗图像;然后利用图像差分法对上述两帧图像进行差分,即可获得具有亮瞳孔效应、人脸突出、几乎没有背景影响的红外图像;再通过对差分图像进行分割、积分投影等处理即能准确定位人脸;最后对定位的人脸区域利用改进的复杂度算法进行人眼定位。
帧缓冲模块由SDRAM控制器和3个FIFO组成,其中SDRAM控制器负责外部SDRAM的度读、写操作,Write_FIFO用于数据输入、Read_FIFO1和Read_FIFO2用于输出两帧相邻的图像数据,系统检测后的图像利用VGA控制器显示在显示器上。
图1 系统工作流程图
2 人脸检测模块
用于人脸检测的算法流程如图2所示。
图2 人脸检测算法处理流程
图3 差分后的图像与灰度拉伸后的图像对比
2.1 灰度拉伸
进行灰度拉伸的目的是提高目标图像与背景之间的对比度,以便于图像进行分割处理[6]。具体实现过称为:从系统中取出一帧差分后的图像进行灰度拉伸,将像素灰度值处于[20,255]区间的像素点线性映射到[0,255]区间,灰度值小于20的像素点映射为0。两者的对比如图3所示,可见经灰度拉伸后提高了与差分图像之间的对比度。
2.2 图像分割
图像分割的关键是选取恰当的阈值,这样才能有效的将目标图像从背景中分割出来。本设计采用自适应阈值法中的最大类间方差法实现阈值选取[7]。设一副图像的灰度值为0~(l-1),灰度值为i的像素个数为ni,总像素个数为N,则各像素值的概率Pi=ni/N。设以灰度值t将图像中的像素按灰度值分为两个区域,则最大类间方差的表达式为:
使得σ2最大的值即为图像分割的最佳阈值。最大类间方差算法是一种全局性的算法,计算出的阈值会在处理的两帧图像期间出现,通过实现测得系统的处理速度可达30帧/秒,故可将当前帧的分割阈值用于下一帧,而不必设计专门的当前帧存储电路,从而降低硬件实现的复杂度,分割后的图像如图4所示。
2.3 积分投影
通过图像分割处理,可以将人脸区域从背景中进行分离,这样就可以利用积分投影的方法得到人脸的边界。在区间[x1,x2]和[y1,y2]内的水平积分投影函数和垂直积分投影函数分别表示为[9]:
通过实验发现,人脸左右边界的积分投影值为人脸垂直方向积分投影值最大值的0.1~0.2倍,上边界的积分投影值为人脸水平方向积分投影值最大值的0.2~0.3倍,人脸的下边界可以通过上边界和左右边界之间的距离确定,本设计中人脸的下边界为上边界加左右边界的距离,其定位结果如图5所示。
图4 阈值分割后的图像
图5 人脸区域定位结果图像
3 人眼检测模块
通过观察差分后的红外图像,可知瞳孔周围的灰度值变化最为频繁,故人眼的检测采用复杂度算法来实现。同时,对定位出的人脸区域进行人眼检测,不仅缩小了检测范围,加快检测速度,而且还排除了人脸区域外的干扰,提高了人眼检测的精度。
图像复杂度的数学定义为:设图像块的大小为行列,灰度值为I(x,y),∂I/∂x为I(x,y)沿x方向的梯度,可以用差分Δx=I(x+1,y)-I(x,y)近似,则图像块的复杂度为[10]:
本设计选取的图像块大小为3*3,如图6所示。经实验发现,相邻两点间进行复杂度的计算没有取得理想效果,通过对复杂度算法进行改进,在3*3的图像块中选取4个像素点,使用公式Com=|x11-x33|+|x13-x31|进行复杂度计算,能够得到较好的效果。
图6 实验选取的3*3图像块
图7 人眼定位结果及在VGA上的图像显示
在FPGA中采用行缓冲和流水线处理方式,3*3图像窗口的构造通过调用移位寄存器的IP核Shift register实现,输入和输出的数据位宽为8位,3个taps,每个taps的宽度为752。3*3的图像窗口在时钟上升沿到来时在图像上滑动,直至扫描完整帧图像。人眼定位结果图像及在VGA上的显示如图7所示。
4 结束语
利用人眼对不同波长的红外光具有不同反射率的原理,结合图像差分方法在FPGA平台上实现了人眼检测系统。利用FPGA处理速度快、资源丰富的特点使设计的系统具备小型化、功耗低、成本低、高速化等优点,处理速度达到30帧/秒,检测的精度在90%以上,满足实时性检测的要求。
[1]葛如海,陈彦博,刘志强.基于计算机视觉的驾驶疲劳识别方法的研究[J].中国安全科学学报,2006,16(9):134-138.
[2]唐琎,许海柱,王立.图像中人眼检测技术综述[J].计算机应用研究,2008,25(4):961-965.
[3]张希坤.视线跟踪关键技术研究及其在TI-DSP DM642上的实现与优化[D].西安:西北工业大学,2005.
[4]Amir A,Zimet L,Sangiovanni-Vincentelli A,et al.An embedded system for an eye-detection sensor[J].Computer Vision and Image Understanding,2005,98(1):104-123.
[5]田娥,莫易敏,廖张华,等.基于红外光源的驾驶员实时检测[J].计算机工程,2007,33(7):255-257.
[6]陈芳,姚建刚,杨迎建,等.灰度拉伸及边缘扫描在红外图像分割中的应用[J].计算机工程与应用,2009,45(14):167-169.
[7]胡斌,宫宁生.一种改进的 Otsu阈值分割算法[J].微电子学与计算机,2009,26(12):153-155.
[8]Huang D Y,Wang C H.Optimal multi-level thresholding using a two-stage Otsu optimization approach[J].Pattern Recognition Letters,2009,30(3):275-284.
[9]Zhou Z H,Geng X.Projection functions for eye detection[J].Pattern Recognition,2004,37(5):1049-1056.
[10]崔连延,徐林,顾树生.基于复杂度和最佳阈值的人眼定位方法[J].控制工程,2008,15(1):11-14.