张泽宏,徐贵力,徐 扬,程月华,王正盛
(南京航空航天大学自动化学院,江苏 南京 210016)
阴影作为运动目标检测中一个普遍存在的干扰,如何将其消除是运动前景检测[1]中的一个重要环节。阴影检测[2]主要分2大类:基于阴影模型的检测方法和基于特征的检测方法。基于模型的检测方法通过检测场景、光照变化规律、运动车辆等先验信息建立阴影模型或车辆模型,从而实现车辆目标与阴影区域的区分。这类方法需要提前获取场景及目标的信息,阴影模型需要随场景变换而重新建立,此外道路车辆种类的多样化、路况的复杂也给目标模型的建立增大了难度,因此该类方法仅适合用于理论实验,不具备实用性。基于特征的阴影检测方法则是通过目标与阴影存在明显差异的特征对阴影区域的分割。高广珠等[3]从亮度特征出发,提出一种基于归一化互相关系数的阴影检测方法,利用阴影像素点的邻域在亮度变化上的一致性区分运动目标和阴影。该方法能够有效检测出阴影区域,但对于运动目标本身的平滑阴影区域与路面投影阴影区域没有区分能力,易造成误判。Cucchiara等[4]利用阴影区域相对背景仅存在亮度变化而色度变化小的特点,提出了基于HSV颜色空间的阴影检测算法[5],该方法易对运动目标本身与背景接近的像素造成误判。Mcfeely等[6]在Cucchiara的方法上进行了改进,融入了阴影纹理特征,但对于目标本身的平滑阴影区域仍没有足够的区分度,易在运动前景内部误检进而形成空洞。朱周等[7]提出一种基于超像素[8-10]和支持向量机[11-13]的阴影检测方法,利用超像素分割将图像分割成若干超像素,先利用HSV颜色空间的判别条件去除部分非阴影超像素块,再对剩下的超像素块利用SVM支持向量机去除误检,该方法的检测效果受超像素分割的影响,分割越精确则阴影检测效果越好,对全图进行精确的超像素分割将带来巨大的计算量,实时性不好。
环境光投射到物体上,反射光被相机镜头捕获,形成了检测用的图像。部分环境光在投射过程中被遮挡,使其原本应投射到的区域与其他区域出现了亮度变化,由此产生了阴影。区域在被阴影覆盖前后仅存在亮度上的差异,基于归一化互相关系数的阴影检测算法,正是利用这一点实现对阴影的检测。
归一化互相关[14]在信号处理领域常用来衡量2个信号的相似程度。对长度为N的2个离散信号x(n)和y(n),定义ρ:
(1)
ρ为x(n)和y(n)的互相关系数。根据柯西-施瓦茨不等式,有|ρ|≤1。其中ρ=1时,有x(n)=y(n);ρ=0时,x(n)与y(n)不相关。
为了确定单个像素点属于阴影还是运动前景,对被识别为前景的像素点,将以其为中心的(2m+1)·(2m+1)的正方形区域作为取值区域。以取值区域内当前帧的像素灰度值作为信号x(n),对应的背景区域内的像素值作为信号y(n),按式(1)计算归一化互相关系数ρ。ρ反映了2个信号的相关程度。对于阴影区域,x(n)与y(n)同一区域在不同亮度下的灰度显示,x(n)与y(n)具有较好的相关性,而运动前景区域则不具备该特征。将背景帧定义为Ib,当前帧定义为If,对于其上一个像素点A(x,y),根据式(1),其对应的归一化互相关系数NCC(x,y)可以表示为:
NCC(x,y)=
(2)
NCC(x,y)的值越接近1,则点A(x,y)对阴影像素的隶属度越高。图1为归一化互相关系数法去除阴影的效果图。
从图1的处理效果可以看出,归一化互相关系数对阴影有一定的检测区分能力,但对于体积较大的深色车辆,往往会有大量的像素点被误判为阴影像素点,这部分区域与阴影区域有着相似的特性:区域灰度值相对于背景是均匀减少的,这使得归一化互相关系数无法将其与阴影区分开来。针对这一点,采用对称交叉熵作为阴影区域的辅助判断条件。
图1 归一化互相关系数法去除阴影
熵最初是用来描述“能量退化”的物质状态参数之一,香农将之引申到信道通信的过程中创立了“信息论”学科,这里熵被用来衡量信息的多寡,又称香农熵[15]、信息熵。对随机分布P,定义P分布的信息熵:
(3)
其中,pi表示随机分布P中各个值出现几率,K是与单位选取相关的常数。交叉熵[16]是信息论中的另一个重要概念,被用来衡量2个随机分布的差异性。交叉熵又称相对熵、KL散度,对随机分布P和Q,定义P和Q的交叉熵为:
(4)
根据吉布斯不等式可知,D(P‖Q)≥0,当且仅当P与Q完全一致时等号成立。由于交叉熵不具备对称性,亦即D(P‖Q)≠D(Q‖P),交叉熵的对称形式为:
(5)
由式(5)可知对称交叉熵[17]具有更广泛的应用。交叉熵可以用来衡量2个随机分布之间的距离,即两者之间的相似程度。参考归一化互相关系数去阴影方法的处理思想,将当前帧内像素点的邻域像素值,及其对应背景帧内的像素值作为随机分布输入,计算该像素点对应的局部对称交叉熵,若先对邻域内的像素值进行局部归一化,则亮度的影响可以被抑制,纹理特征则被保留下来。阴影区域在消除了光照影响后与对应的背景区域具有较高的相似度,局部对称交叉熵值较小,而运动前景则因对称交叉熵较大而被区分出来。
在图像的RGB三通道中分别计算像素点的局部对称交叉熵。并取其均值作为判别像素点属于阴影还是运动前景的衡量标准。定义背景帧为Ib,当前帧为If,对于其上一个像素点A(x,y),将以其为中心的(2m+1)·(2m+1)的正方形区域邻域,根据式(5),A的局部相对交叉熵表示为:
(6)
式(6)中,Ncb、Ncf分别为经过局部归一化处理的点A的邻域像素值,按照式(7)计算:
(7)
局部对称交叉熵是一种抑制亮度因素、通过纹理等特征实现阴影与运动前景区分的衡量标准,与利用亮度变化进行阴影判别的归一化互相关系数可以起到很好的互补作用。融合局部对称交叉熵和归一化互相关系数进行阴影检测,可以获得更好的阴影提取效果,如图2所示。
图2 改进的阴影去除算法
经过阴影去除操作后,车辆目标的阴影得到了抑制,但仍有部分运动目标区域在阴影去除中被误检。通过观察发现,经过改进后的阴影检测算法去除阴影后形成的运动目标空洞往往出现在运动目标的内部,处于被大部分运动前景包围的状态。针对这一点,采用一种基于轮廓像素点邻域信息的阴影误检去除方法对阴影去除形成的运动目标空洞进行恢复,以期获得更加完整的运动前景。
经过改进算法的阴影检测后,在保留更好前景的同时保证了阴影去除的效果。但是,仍有部分像素点被错误地去除了。由于保留的前景较为完整,这种被误判的像素块产生了与阴影像素块区别较明显的邻域特征。图3是利用运动目标提取、阴影去除的处理结果。
(a) 原始图像 (b) 前景检测
(c) 阴影去除 (d) 去除部分的不同成分图3 运动前景检测及阴影去除分析
如图3(d)所示,图3(b)中检测到的运动目标前景被分成了3个部分,其中灰度值最大的部分为经过阴影去除算法处理后保留下的运动前景部分;灰度值最小的部分为阴影区域;灰度值居中的部分为算法误判的区域。将图3(b)与图3(c)做异或运算,这时得到的区域即为图3(d)中灰度值较小的2个部分。对这2部分区域进行轮廓检测,并将其轮廓的组成划分为2类:与背景连接的轮廓像素及和运动前景连接的轮廓像素。计算与背景连接的部分的轮廓像素点与轮廓总数的比值λ,显然,阴影区域由于同时与背景和运动前景2个区域接触,λ的值较大;而误判区域通常被前景区域包围(或半包围),λ的值较小。这个比值可以成为区分误判区域和阴影区域的筛选条件。具体的实现方法如下:
步骤1将原始运动前景和经过阴影去除处理的运动前景做异或运算,提取待确定阴影区域,同时拷贝原始运动前景作为处理图像。
步骤2对步骤1获得的图像进行轮廓检测。
步骤3对步骤2中获得的所有轮廓进行遍历,对每个轮廓的每个像素点,在原始运动前景图像内遍历像素点的3×3邻域,若邻域内有零值,则判定该像素点为与背景连接的像素点,对应计数值加1;否则跳过该像素点。
步骤4计算每个轮廓与背景连接部分的轮廓像素点与轮廓总数的比值λ,若λ>TH,则该轮廓为阴影轮廓,将处理图像中轮廓对应的包含区域置零,否则跳过该轮廓处理下一轮廓。图4是不同TH下阴影轮廓的结果。
当TH取值较小时,并不能很好地区分误检区域与真实阴影区域。当TH=0.7时能较好地进行区分。
图4 不同TH下阴影轮廓的结果
经过上述步骤处理后,原始运动前景图像中的阴影区域被去除,误判区域则被恢复为前景,这样最终得到的处理图像即为经过阴影去除且不含误判的运动前景图像。如图5所示,算法很好地恢复了误判的阴影区域,且对正常的阴影去除没有造成影响。
针对阴影去除问题,分别与归一化互相关系数方法、SVM支持向量机方法进行对比,实验采用的视频分辨率为270×480,结果如图6所示。
从实验结果中可以看出,归一化互相关系数方法、SVM支持向量机方法和本文方法都实现了有效的阴影去除,但归一化互相关系数方法因原理上的缺陷在去除阴影的同时将运动前景的一部分误判为阴影,从而导致了阴影去除之后的运动前景断裂和空洞。SVM支持向量机方法的误检比归一化互相关系数方法要好,当仍存在局部区域误检的情况,其检测的运动前景区域仍然不完整。此外,受超像素分割结果的影响,SVM支持向量机方法去除阴影后的运动前景与目标在轮廓上存在一定的误差。本文算法将归一化互相关系数结合对称交叉熵作为阴影像素的判断条件,同时在阴影检测完成后,根据阴影区域的邻域信息判断阴影提取的可靠性,进而滤除误提取的阴影区域。从实验结果中可以看出,本文方法的阴影去除效果更好,保留的运动前景更加精确、完整。
为了进一步验证本文阴影去除算法的有效性和实时性,选取不同光照条件下的含阴影的视频进行测试比较,计算经过阴影去除算法处理后的运动前景与前景真值的像素个数比值作为前景保留率,以衡量阴影去除算法的效果,实验结果如表1所示。
表1 阴影去除对比试验结果
测试集算法每帧平均前景保留率/%每帧平均耗时/ms视频1归一化互相关系数方法52.51.34SVM支持向量机方法85.3786.52本文算法91.25.26视频2归一化互相关系数方法48.21.57SVM支持向量机方法83.6754.23本文算法90.34.78
从表1可以看出,在实时性方面,SVM支持向量机方法需要先对图像进行超像素分割,然后利用SVM支持向量机对超像素进行分类判断阴影,因此耗时最长;归一化互相关系数方法,对每个像素的邻域进行操作,耗时较少,但提取的运动前景较差,存在误判;本文算法在归一化互相关系数方法的基础上进行改进,融入了对称交叉熵作为判断标准,且对提取的前景进行了基于阴影区域邻域信息的误检去除和恢复,提高了检测精度,获得的运动前景更加完整准确,前景保留率相比归一化互相关系数方法提高40.4%,相比SVM支持向量机方法提高6.3%,在实时性上略逊于归一化互相关系数方法,但明显优于SVM支持向量机方法,耗时仅为其1/153,可以满足实际应用的实时性要求。
针对阴影区域被误检为运动前景的问题,设计了一种融合归一化互相关系数和对称交叉熵的阴影检测方法。计算前景像素点邻域的归一化互相关系数和局部对称交叉熵,分别与经验阈值比较判断像素点属于阴影还是运动前景。针对阴影去除后运动前景存在空洞断裂的问题,设计了一种基于轮廓像素点邻域信息的阴影误检去除方法。检测阴影去除区域的轮廓,计算去除的阴影区域和运动前景区域重合的边缘长度,根据重合长度与轮廓总长度的比值判断阴影区域的邻域状态,从而确定该去除区域是误检还是有效去除,对误检区域进行恢复,最终获得完整的运动前景。实验结果表明,本文算法能够在消除阴影干扰的同时更加准确、完整地保留运动前景,前景保留率相比归一化互相关系数方法提高40.4%,相比SVM支持向量机方法提高6.3%,耗时约为SVM支持向量机方法的1/153。