孙万春,张建勋,马 慧,朱佳宝
(1.重庆理工大学 计算机科学与工程学院, 重庆 400054;2.安徽警官职业学院 计算机基础教研室, 合肥 230031)
随着商场及公共场所设施的逐步完善,在各类超市、电影院、室外休息场所都需要进行人员流动信息的采集。依靠采集到的信息[1]不仅能得到不同区域的消费者消费情况、客户偏好、广告需求定位等信息,更能有效地预防因为人流密度过大造成的安全事故的发生。鉴于此,提高和改善实际场景中人数统计工作一直是学者关注的热点。随着计算机视觉研究的不断发展,很多学者针对人头检测提出了各类优化方法,但是如何在不同的场所下提高人头识别率仍然是其中核心问题。目前人头检测的数据源绝大多数来自于监控设备,其提供的视频信息经常会出现分辨率较低、目标重叠、有外界光线干扰等问题,这对检测造成了极大的影响。
夏菁菁等[2]利用形态学的方法提出了一种基于人体骨架特征的人数统计方法,但是该方法对于目标遮挡严重以及人流量较大的场景,不仅不能提取较完整的人体骨架特征,而且运算效率较低,满足不了实际场景需求。赵军伟等[3]为了在实际应用场景中能实时统计人数,针对人头颜色的专一性建立了相关的空间模型,利用人头轮廓具有几何特征的综合特性来提高实时性要求,但是该方法对建立的空间颜色模型依赖性较大,不同区域的差异较大,准确率有待提高。何扬名等[4]在硬件上进行了改进,采用双目摄像头,先通过左视图进行人头区域的检测,再利用右视图进行匹配,以此解决人头识别率的问题。该方法硬件成本要求相对较高,并不适合任何场景,并且在发生人头遮挡以及人头分辨率较低等情况下并不是有效的解决方法。
目前,人数统计工作均基于监控视频[5],但在采集过程中经常会受到各种外界环境的影响,并且为了能尽量保存较为完整的视频数据,会对视频数据信息进行了有损压缩,致使图像中的信息大量丢失,给人头特征的提取带来了较大的困难。
本文提出了轮廓定位下的人头特征提取方法。首先利用人头轮廓具有类椭圆共性,采用轮廓快速定位人头区域,再对定位区域进行拟合采样,最后利用NSCT进行人头特征提取。该方法不仅可以在不变动目前市场上摄像头位置情况下达到检测的要求,同时也能解决仅仅通过某种单一特征方法进行人头识别而造成效果不理想的问题。实验证明:本方法能有效提高人头检测准确率,尤其在一些视频源效果较差的场景中表现较好。
Do等在2002年提出了Contourlet变换,其在小波变换所具有的较好稀疏性能优点的基础上,利用离散域滤波器组达到了最优化、最有效的图像表达。这样,在对图像进行频谱分析的过程中,其不仅在不同尺度和方向上具有各向异性尺度关系[6],同时能更准确地将图像中边缘等几何结构信息分解到各个尺度上的带通方向子带中去,图1是其通过两级实现各方向子带信息变换的结构。
图1 CT变换结构
图1中,Contourlet变换[7]主要通过滤波器组来实现多尺度、多方向的变换。其中,又包含了拉普拉斯金字塔(laplacian pyramid,LP)和方向滤波器组(directional filter bank,DFB)两部分。首先利用LP来完成多尺度方向的变换;其次通过LP分解的低频采样信息和上一级的信号的低通采样进行差值化得出一个带通分量;最后Contourlet变换通过迭代的分解求差,将图像中具有多尺度、多方向的信息进行了灵活的结合。由此可见,该方法在图像稀疏表达上效果较好。
其中: ij表示通过NSCT分解的第j个尺度方向上的低频子带信息; dj,k表示其在第k个方向的子带信息。
图2 NSCT分解框架图
NSCT分解变换能有效提取样本数据信息中人头的特征信息,因为其在多尺度方向具有的特性能更好地提取边缘、轮廓等细节特征。对于人头样本图像首先进行多层分解,本文采用3层分解方式进行。通过式(1) 推理可知,总共会得到8个不同方向的分解结果。
图3是对国际公开的FERET数据集中提取的一幅图像进行了3层分解后得到的各方向、尺度下的人头分解子图。
图3 NSCT3层分解效果
帧间差分法[10]对光线等外界因素变化不敏感,在人群大量集中的动态环境下,能够有助于快速检测出运动目标区域。具体实现方法如下:
式(2)中f( )表示图像二值化函数,t时刻坐标点(x,y)的二值化表示为f(x,y,t),二值化阈值是T,其一般取经验常数,Dt,t-1(x,y,t)表示通过当前帧f(x,y,t)与前一帧f(x,y,t-1)进行差分计算后得到的二值化目标区域。图4为当前帧(t时刻)与前一帧(t-1时刻)通过帧差法所得到的目标区域。
图4 目标分割
人头区域具有一定的轮廓规律性,对目标区域进行轮廓特征判断就是要快速、初步判断目标区域是否是人头,这是关键的一步。因为人头的外围轮廓所包围的面积在一定的约束范围内,可根据经验数据来筛选、判断该区域范围内的人头区域,以减少检测花费的时间。本文算法中用C来表示轮廓[11],即:
式(3)中:P代表人头外围轮廓区域周长;轮廓区域面积用A来表示。因为在学术界并没有像素点区域距离定义的规则标准时,本文定义相邻像素点之间的距离用单元1来表示,故目标轮廓的周长P即为像素点数目。
在对目标轮廓面积A进行计算时,采用类似八方向码来进行边界跟踪,其改进方式是对原八方向码0用8来进行代替,其余不变,1~8分别表示45°、90°、135°、180°、225°、270°、315°、0°,如图5所示。
图5 类八方向跟踪示意图
目标对象边缘范围确定,并对其进行提取,如图6中灰色区域即为轮廓边界范围。
图6 目标定位轮廓边界范围
对于边界的每一个像素点的坐标值定义为Pix[i],其中i表示图中轮廓边界第i个像素点,像素点的起始位置为最左下角的轮廓边界。Pix[i]·x、Pix[i]·y分别表示像素点i在x、y方向的坐标值。位置标定如图7所示。
图7 边界位置标定
对于每一个像素点进行两次矢量标定:前矢量标定和后矢量标定,定义如下:
式(4)中:ai表示像素点之间的方向,参考图5。本文中对两次标定分别定义为SF和SL,其中:SF表示当前像素点和前一个像素点之间的位置关系,SL则表示当前像素点与后一个像素点之间的位置关系。SF标注定义如下所示:
(5)
SL标注定义为:
(6)
其中,当i-1=0或者i+1>N时,定义如下:
由式(5)-(7)可分别计算得到前一像素点和后一像素点矢量标注值,计算结果如图8所示。
图8中两个矢量值进行求和,计算结果见图9。
对于图9,如果S[i]的值不为±1,则按照式(8)进行判断:
图8 前、后矢量标注
图9 前、后矢量标注相加
如果S[i]的值为±1,这里先定义Sx[i]:
假设S[i]的值为k,那么对于S[i]=±1,判断如下:
经过上述流程计算的最终结果如图10所示。
图10 最终矢量标注
依据图10,轮廓区域面积计算方法定义如下:
其中:S[i]表示图10中的结果;N表示S[i]为1的个数。根据式(3)推知任意一个图形的人头轮廓区域C的最小值为4π,最大值为:
其中w和h分别表示视频图像的像素宽度和高度。由于人头的轮廓区域图像一般不会大于整个监控图像的1/4,所以本文阈值T应满足:
利用阈值T判断便可快速进行人头的目标快速定位。
轮廓区域定位能够快速定位出可能符合人头特征形状的目标区域,但是对于类圆的干扰仍然不能进行有效的筛选,如图11所示。对定位出的目标区域进行拟合、采样至标准库像素,本文选择32像素×32像素标准。
图11 人头目标区域拟合、采样
为了能对提取到的人头特征进行识别,本文采用了支持向量机下的基于统计学理论模型识别方法[12],由一定范围的观测样本值和任意采样区间对比得到最优值空间,凭借此与其他类样本之间的差别得到最大泛化,其基本原理:用于计算的特征参数经过非线性算法转换到一个多维空间,再通过内积函数构造出所需要的最优化空间。SVM下人头特征识别流程如图12所示。
图12 人头识别流程
1) 实验环境
DELL Windows 10系统,基于VS2012开发环境,采用Opencv2.4.13图像处理库。Intel i5-3470,3.20GHz,8GB 内存空间。
2) 数据集
为了验证本文算法的有效性,测试视频的帧来源于国际上公认的数据库PETS2009的Dataset S2:Person Count and Density Estimation。该数据库包含了若干使用单相机、固定斜向下拍摄的视频。视频帧率为7帧/s。本文选用数据集S2中的两段视频来验证算法的有效性。其中:视频段1是数据集S2里的S2.L3.Time_14-41.View_ 001,共包含240帧图片,特点是人群正对摄像头从远处不断靠近摄像头行走;视频段2是数据集S2里的S2.L3.Time_14-41.View_004,共包含240帧图片,特点是人群背对摄像头向教学楼方向走去,慢慢远离摄像头。实验结果如图13所示。
图13 人头识别效果
从图13可知:单个人虽然处于远视角,但是仍然能较好地进行识别;当出现两个人互相遮挡时,仍然能够进行正确的判断;在严重遮挡情况下,人头轮廓出现了重叠,存在一定的检测误差。
对PETS中的数据集进行测试,图14是现实中人数和采用本文算法检测到的人头数对比。
图15给出了本文提取方法同文献[2]和文献[4]两种特征人头检测召回率性能比较结果。
由图15可知:在稀疏密度人群下,本文算法在识别率方面取得了较好的效果。另外,本文算法先通过轮廓定位人头,再利用NSCT特征提取感兴趣的区域,相比文献[2]和[4],本文方法在视频监控图像的分辨率较低的场景中人头检测的效果更佳。
图14 实际人头与估计人头对比
图15 几种算法检测率对比
本文针对监控视频下的人头检测领域,首次将NSCT特征同人头轮廓进行了相融合,发挥其各自的优势。首先,依据人头类椭圆共性,利用轮廓快速进行人头定位,但该方法速度较快,存在较大误差。为了解决该问题,对定位区域进行拟合、采样处理。其次,使用NSCT人头特征提取,对传统监控视频下的人头分辨率较低时识别效果不理想的问题提供了有效的解决方法,即利用NSCT在目标区域细节提取上的优势来进行特征提取,从而避免了因分辨率较低带来的信息缺失等问题。最后,用传统的机器学习分类判断人头。实验证明:本文提出的算法取得比较好的结果,特别在分辨率低、图像模糊的视频中表现不错。但本文算法在人群密度较高场所下的人头识别率较低,以后的工作中会考虑通过线性回归模型的人数统计方法来解决该类问题。