李奇林 白成杰
(山东师范大学物理与电子科学学院 济南 250014)
人脸跟踪作为视频图像处理的一个重要研究方向,对后期的人体面部信息提取、处理、理解等具有先导作用,也被用作人脸识别的辅助方法,其用途广泛。
目前比较成熟的人脸跟踪算法主要分为两类,第一类是传统的经典跟踪算法,包括基于点的跟踪、基于统计的跟踪、基于轮廓的跟踪等[1],这类方法所建立的数学模型相对简单,运用单纯的目标跟踪理论,技术已经比较成熟,实际应用已经非常广泛;第二类是综合跟踪算法,包括基于机器学习的跟踪算法和目标检测与跟踪综合算法等[2],这一类算法综合运用了机器学习、检测、识别等多种手段,已经不再是单纯的目标跟踪,在提高跟踪效果的同时,对运算速度较为敏感,算法复杂度方面也有待进一步改进。
基于扫描聚类的人脸跟踪算法是经典跟踪算法中的一种,其以人脸的颜色为基础,建立包含人脸特征的颜色容器,通过像素点与容器的比对,得到人脸跟踪的基本依据,最终获得人脸目标的移动踪迹等信息。
算法以初始时所选定人脸的颜色直方图生成为基础,提取出人脸图像中具有代表性的部分颜色信息,将这部分信息作为人脸的特征,在后续图像中寻找与该特征最相近的区域,作为人脸可能存在的范围,然后将人的脸部与图像中的其他部分进行区分,从而达到识别和跟踪人脸的目的,其框架如图1所示。
算法的核心部分由四个步骤构成:
1)按照一定的条件,对选定的人脸部分图像进行扫描,做出各颜色区间的像素点数统计,并以此为基础创建一个颜色直方图来表示人脸的特征;
2)在后续视频图像的每一帧中,按照一定判决规则,对每一个像素点进行计算,从而确定像素点“属于人脸区域的可能性”;
3)综合判决结果,并对结果进行相应处理后,在每个视频帧中对最有可能存在人脸的范围进行标记,计算人脸的位置;
4)将得到的位置信息显示出来,体现在视频上为:移动人脸标识框的位置、大小和角度。
图1 算法框架
在解决人脸跟踪问题时,首先要解决目标物圈定和标记的问题。对跟踪目标物标定有多种方法,主要分为中心点位置的标记和几何区域的标记两种[3],通常按照目标外形特点来决定具体采用何种方式。
在跟踪人脸的过程中,依据人脸的脸型特点,使用类似椭圆的形状来进行标记,同时按照具体的情形,对椭圆进行局部、细微的修正,以求更加贴合人脸轮廓。在最开始划定人脸区域时,是由鼠标对算法进行初始化的,而在之后的跟踪过程中,就可以由算法自行更新人脸区域。
对目标图像创建一个表示人脸的颜色直方图,是实施算法的前提。假设人脸部颜色与背景颜色是不同的,因此,人脸部图像的颜色能够代表人脸的特征并包含有从背景中区分出人脸的信息。在[1,N])。[4]
经归一化后,即可得到一个用于描述人脸颜色特征的颜色直方图,在跟踪的过程中保持不变,作为后续视频帧中人脸跟踪的唯一依据。
在对人脸跟踪进行初始化时,首先创建颜色直方图,然后计算人脸概率。而在接下来每一帧的视频处理中,基于初始化时所创建的颜色直方图,分别计算人脸概率。
所谓“各像素点可能属于人脸的概率”,实际上是依据颜色直方图进行的视频图像处理。在直方图中,例如图2实例,某一种颜色像素点所占比例最高,就意味着这一种像素的随机选择落在该容器里的概率是最高的。而其他颜色像素点所占比例相对较低,这意味着这些像素的随机选择落在该容器里的概率是相对较低的[5]。而这个概率,即为“可能属于人脸的概率”。具体的概率值,则是将直方图所统计的各颜色概率值作为基准,并通过像素点颜色的索引获得的。圈定包含人脸的目标图像后,对图像内的所有像素点进行数学统计,按照不同的颜色区间,将统计数据以颜色直方图的形式体现出来。直方图中包含了人脸部图像的部分颜色信息,利用颜色直方图即可代表人脸的特征。
设一幅图像包含M个像素,图像的颜色空间被量化成N个不同颜色,颜色直方图H定义为:pi=hi(0<i<N,i∈Z),pi为颜色直方图中第 i个区间对应的值,hi为第i种颜色在整幅图像中具有
图2 生成颜色直方图实例
以图2颜色直方图为例,其中各颜色的色度值分别为:x1,x2,x3,…,xN-2,xN-1,xN,各颜色所占比例分别为:p1,p2,p3,…,pN-2,pN-1,
这样,即可建立一个颜色与概率值的映射函数,通过每一个颜色值都可以查询到对应的概率值。对于像素点属于人脸范围的概率估计,就是根据这个函数完成的。
当新的视频帧到达时,帧中的每一个像素点都将会被检测,按照其色度值和颜色直方图为像素点分配概率值。在计算各像素点可能属于人脸的概率后,即生成了一个视频帧图像中可能存在人脸的像素点分布矩阵。
在前一帧的目标标记位置基础上,需要对当前帧中的目标位置进行更新和重新标记。由于在计算人脸概率是对所有像素点分别进行操作的,因此图像中的概率分布处在分散的状态,无法进行直接的标记。但是,人脸目标的实际位置必然是在人脸概率值较高的区域中心位置,当以一定阈值对人脸概率进行二值化后,即可得到离散的像素点[6]。人脸目标也就在这些像素点最为密集的区域。为了达到标记人脸位置的目的,需要首先对图像进行区域收敛。在这里,将采用聚类的方法对要追踪的区域进行收敛[7]。
对像素点区域进行收敛,分如下几个步骤进行[8]:1)首先在图像中选择聚类的个数k;2)任意产生k个聚类并确定聚类中心;3)对每个点确定其聚类中心点;4)计算其聚类新中心;5)重复以上步骤,直到所确定的中心点不再发生改变。
在聚类过程中,由于在可能存在人脸的图像中,人脸位置始终保持集中在概率值较大的像素区域,所以根据原先的目标位置并计算一个聚类区域中的概率值来得出新位置,即可将目标区域转变到新的位置。
平 台 :PC 机 ,处 理 器 :Intel(R)Core(TM)i7-4790CPU@3.60GHz,RAM8GB,操作系统:Windows 7(64bit),编程语言:C++,编程工具:Microsoft Visual Studio 2010,视觉库:OpenCV 2.4.10。
视频数据可以采用在线获取和离线导入[9]两种形式。离线导入即把已经保存的本地视频进行读取并处理,优势在于可以使用特定效果的视频资料(特别是经典的数据集)进行测试以及与其他算法进行效果对比;缺点在于测试具有局限性,且针对特定场合和需求的数据集很难完全符合要求。
在线获取即使用视频采集设备实时获取目标视频,优势在于可以针对特定场合和需求进行有针对性的测试,操作简便,程序实现后,可以进行实地实况的测试,具有更高的实践价值;缺点在于没有标准数据集对不同的算法实现效果对比。
在算法实现中,采取在线获取的方式,使用OpenCV提供的摄像头接口函数获取实时视频,等待进行视频处理并测试结果。视频信息如下:Format:wmv2,Bit rate:302 kb/s,Width:640 pixels,Height:480 pixels,Display aspect ratio:4:3,Frame rate mode:Variable,Nominal frame rate:30.000 FPS,Bit depth:8 bits。
在人脸目标的运动过程中,面部的颜色信息变化不会太大,主要是光线强度引起的亮度变化,这也是算法具有良好鲁棒性的原因之一。但是由于RGB颜色空间对光照亮度变化比较敏感,光照强度的变化会引起R、G、B三个颜色分量的剧烈变化,为了减少光照亮度变化对跟踪效果的影响,算法将图像由RGB颜色空间转化到HSV颜色空间进行后续处理。
设(r,g,b)分别是一个颜色的红、绿和蓝坐标,它们的值是在0~1之间的实数。设max等于r、g和b中的最大者,min等于这些值中的最小者。要找到在HSV空间中的(h,s,v)值(这里的h∈[0,360]是角度的色相角,而s,v∈[0,1]是饱和度和亮度),其计算公式为
程序利用Windows系统的消息处理机制,采取鼠标框选的方式对跟踪模型进行初始化,鼠标操作时向操作系统发送ON_BN_CLICKED消息,然后交由消息处理函数作出响应。将消息传递过程封装成相对独立的模块并与主程序相互传递一定的控制信息和框选位置的顶点坐标。每次鼠标在视频区域进行拖拽操作时,都会重新初始化目标模型。
对目标模型进行初始化时,首先选择初始搜索窗口,使窗口恰好包含整个跟踪目标,然后对窗口中每个像素点的色调值进行采样,从而得到目标的颜色直方图,将直方图保存下来作为目标的颜色直方图模型。
生成直方图的过程分两步完成,首先使用OpenCV库函数cvCreateHist()来创建一个直方图,然后使用函数cvCalcHist()计算出人脸区域的颜色直方图。同时,为了便于验证,可以使用函数cvRectangle()将直方图的具体内容显示出来,如图3所示。
图3 初始化颜色模型
色度在HSV颜色模型中用于描述一个像素的颜色,直方图中包含了11个颜色区间,由图3(b)可以看出,黄色的像素点占了大多数,这是因为图3(a)中的人脸部在正常光照下通常呈现黄色。由于人种之间肤色的差异,在初始化阶段得到的直方图会有一定差异。此外有一些其他颜色区间的值,一部分是人脸颜色特征中的少量颜色,而另一部分则是由背景像素点和面部装饰物造成的。
跟踪模块即算法核心部分,是在已经被初始化的目标颜色直方图模型基础上进行的视频图像处理。在跟踪过程中,对视频图像处理区域中的每一个像素点,通过查询目标的颜色直方图模型,可以得到该像素为目标像素的概率,图像处理区域之外的其他区域作为概率为0的区域。
经上述处理,视频图像转换为目标颜色概率分布图,也称为目标颜色投影图。为便于显示,应将投影图转化为8位的灰度投影图,概率为1的像素值设为255,概率为0的像素值设为0,其他像素也转换为相应的灰度值。所以,灰度投影图中越亮的像素表明该像素为目标像素的可能性越大。
对得到的灰度值图像使用聚类算法,即可得到人脸目标的位置。在OpenCV中,cvCamShift()函数[11]可实现该功能,只需每次读入新的视频帧后调用该函数即可。在得到人脸目标的具体信息后,调用函数cvShowImage(),在显示区域将人脸准确标识出来,并将详细数据以文件的形式进行保存或进行显示。
为了评价算法,分别对正常情况下的人脸运动、人脸与摄像头距离变化、人头部倾斜、摄像头角度倾斜、外部光照变化、人脸超出摄像头视界范围、增减遮挡物等情况进行了测试。
一般情况是指没有光线变化、摄像头抖动、人脸部没有遮挡物等正常情况。人脸在摄像机视野范围内进行上下左右平移时,该算法都能够准确和及时地跟踪到人脸区域。图4所示是一般情况下的部分结果。
图4 一般情况下部分结果
实验中,对一般情况进行了多次测试,并对跟踪保持时间、帧率等数据做了结果记录与统计,其中部分结果统计如表1所示。
表1 一般情况下跟踪结果统计
所谓特殊情况是指一般情况之外的其他情况。图5中当人脸与摄像机距离发生变化时,人脸在视野中的大小会发生变化,这时,该算法也能够很好地跟踪人脸位置并随人脸大小的变化调整标记大小。
图5 距离发生变化
图6是打开40W暖色调卤素灯前后的跟踪情况,当外部光照发生变化时,该算法依然能够适应新的光照环境继续跟踪。
图6 外部光照发生变化
图7中人脸偏离摄像机视野,有一部分已经超出视界范围,此时算法会对在视野中的剩余部分人脸目标进行跟踪和标记。图8中摄像机发生抖动,此时的背景和人脸处于倾斜状态,算法也能够迅速适应这一变化,成功跟踪人脸目标。
图7 脸部超出摄像头视界
图8 摄像机倾斜
图9中,人在摄像机视野中低头的动作使得人脸目标发生形变,这时候的跟踪结果能够随人脸的轮廓变化调整标记的形状和大小。图10中,人头部倾斜,跟踪结果也能够很好地适应新的人脸位置与形状,将标记角度进行调整,使之更加贴合人脸轮廓。
图9 低头
图10 头部倾斜
在图11(a)中,人脸部的装饰物被摘掉,导致新的人脸模型发生变化,但是该变化在一定范围内时,依然能够准确地跟踪到人脸位置;图11(b)中,用口罩将人脸的口鼻部遮挡住后,人脸的形状发生变化,也能够继续跟踪。
综合多种测试结果表明,在正常光照条件下,对人脸目标模型进行初始化后,目标标识的坐标随人脸位置的移动而变化,目标标识的范围随人脸与摄像头距离的变化而变化,目标椭圆形标识的倾斜角度随人头部或者摄像头的倾斜而变化,目标椭圆标识的形状随人脸形状的变化而变化。当人脸超出摄像头视界时,跟踪依然能够在视界中的人脸部分继续进行;当人脸部和人脸周围少量装饰物改变时,目标标识也能够及时进行跟踪,且跟踪的更新速度非常快。由此可见,使用该方法进行人脸目标的跟踪,是具有较强鲁棒性的。
图11 减少和增加遮挡物
提出了一种基于扫描聚类的人脸跟踪视觉算法,实现了对视频中人脸目标的跟踪,具有较强的鲁棒性,对于脸部的形变具有良好适应能力,是一种实用性较强的跟踪算法。同时,该算法也有其局限性,对背景颜色有一定的限制,要求背景色与人脸颜色有所不同,算法在这方面有待进一步改进和优化。