基于双目视觉的车前行人检测方法研究

2024-01-18 12:07王正家王思宇景嘉宝
无线电工程 2024年1期
关键词:立体匹配视差中心点

王正家,王思宇*,景嘉宝

(1.湖北工业大学 机械工程学院,湖北 武汉 430068;2.现代制造质量工程湖北省重点实验室,湖北 武汉 430068)

0 引言

随着汽车的普及,人们的研究热点已向无人驾驶汽车方面转移。有许多公司,如国外的苹果、特斯拉和谷歌;国内的小米、百度和乐视等都想在此领域更进一步。视觉感知作为汽车安全驾驶的首要手段已得到越来越多的研究[1],而利用视觉系统实现对车前行人的检测,无论对驾驶者还是对行人的安全都起着至关重要的作用。基于可见光图像中的行人检测会受到障碍物遮挡、阴影、光照条件和行人姿态等因素的影响[2],继而降低检测的精度,以致于使用视觉系统实现较为准确的行人检测变得困难重重。经过长时间的研究,学者们对行人检测提出了各种方法。

现有行人检测视觉设备主要分为单目相机与双目相机,利用单目相机实现行人检测的过程主要是利用大量的特征信息训练行人检测分类器,如形状特征、纹理特征、上下文特征和梯度特征[3]。使用梯度特征信息的单目相机有着较好的检测效果,Dalal等[4]使用线性支持向量机(Support Vector Machine,SVM)和梯度直方图(Histogram of Gradients,HOG)特征结合的方式实现了行人检测;Dollár等[5]利用HOG与颜色信息相结合的方法,在Dalal等研究的基础上进一步提高了单目相机对于行人检测的精度。后续又有大量学者针对单目相机的算法进一步改进与创新,但是基于单目相机检测获取的行人特征信息较少,依靠标定后的单目相机并不能准确完成行人检测,所以基于双目相机的行人检测也得到越来越多的研究[6]。双目相机中最为多见的应用是利用景深图获取感兴趣区域(Region of Interest,ROI)。Zhao等[7]通过对ROI进行聚类获得车前区域,Labayrade等[8]基于视差图提出了V-视差算法,V-视差算法能够加深道路中几何结构的表达。后续又有学者,如Broggi等[9]、Shashua等[10]在V-视差算法的基础上,将采集后图像划分为x、y两方向进行视差计算,可以获得高于地面的物体信息。上述算法的缺点是需要对车前图像内所有信息进行分析与处理,大大降低了算法的时效性。Benenson等[11]将重点转移到行人检测模型的训练,缩短了算法针对行人检测的时间,极大地提高了算法的时效性。此类算法的后续发展如Mitzel等[12]在进行多目标检测时,更好地利用了景深图获取ROI,通过减少分类器的检测区域来提高检测效率。Hilado等[13]进一步改进分类器,基于HOG,分别训练SVM和Adaboost,在实现过程中,首先将输入信息经过Adaboost,若判断图像中包含行人信息,则使用SVM检查。上述算法的缺点是在获取景深图阶段的处理较为简略,难以获取车前图像中更优的ROI。Franke等[14]结合光流信息和图像帧间运动,通过分析运动轨迹与间隔时间获取景深图。此类算法的缺点是计算量较大,难以确保车前行人检测的时效性。在使用双目相机获取景深图的过程中,立体匹配算法是至关重要的,算法的优劣决定着生成景深图的好坏。常规的立体匹配算法分为3种:局部、全局和半全局立体匹配算法[15]。局部立体匹配算法侧重达到局部最优解,以牺牲全局为代价来提高匹配速率,缺点是未考虑全局信息,匹配效果较差;全局立体匹配算法集合了待处理图像的全部像素,算法考虑了全局信息,以达到更好的匹配效果,缺点是计算量过大,降低了图像匹配速率;半全局立体匹配(Semi-Global Matching,SGM)算法结合了局部、全局立体匹配算法的优点,尽可能地确保了匹配的精度与匹配的速率。

综上所述,本文使用改进后的SGM算法来更好地获取ROI,提出了结合PatchMatch[16]的Census自适应窗口变换的SGM算法,在代价匹配阶段使用自适应窗口Census计算,减少了图像中像素信息较少区域的计算量,并提高了图像中像素信息较多区域的计算量;在代价聚合阶段,用PatchMatch与SGM结合的方法,使用顺时针和逆时针相结合的方式替换了常规的8或16路径聚合,提高了聚合效率;在视差优化阶段,利用左右一致性原则剔除误差点,并通过高斯滤波实现视差优化,生成景深图。在获取ROI后,针对图像中的HOG进行降维处理,减少非行人信息对行人信息的干扰,并通过训练SVM训练器,最终实现行人检测。实验证明,本文方法可以实现车前行人检测,在提高检测精度的基础上确保时效性,并能较好地克服外界(如光照、阴影等)影响因素。本文算法具备一定的实用价值。

1 基于立体匹配的行人检测方法

1.1 双目视觉三维测量原理

双目视觉的三维模型如图1所示。图1中的三维模型两摄像头光轴平行、成像平面共面、高度一致,是较为理想的成像模型。P点可通过左右视图的点P′(u,v)、P″(u′,v′)计算得出三维坐标。将基准定为左相机,则点P(xc,yc,zc)计算如下:

(1)

图1 双目视觉三维模型Fig.1 3D model of binocular vision

式中:点P的视差大小为u-u′,相机参数为(u0,v0,ax,ay),左右相机基线距离为b。

通过式(1)分析,在获取道路中行人信息的所有点的视差值以及相机参数的前提下,可以很轻松地完成对道路中行人的检测。但由于相机本身的缺陷,如相机位置安装有误、镜片工艺等因素,导致左右相机中光轴不平行、输出图像发生畸变,所以需要对左右相机实现立体标定和相机标定[17]。

1.2 左右相机标定

本文采用张氏标定法[18]对左右相机实现立体标定,相机标定结果如表1和表2所示。

表1 立体标定结果Tab.1 Stereo calibration results

表2 左右相机标定结果Tab.2 Left and right camera calibration results

依照左右相机标定实现对车道行人图像的立体校正。校正前行人图像如图2所示,通过水平线投影发现图像中行人存在左右图像不对齐及图像畸形现象。校正后行人图像如图3所示,通过水平线投影发现左右图像中行人处于同一水平线且观感上无图像畸变产生。

图2 相机标定前行人图像Fig.2 Pedestrian image before camera calibration

图3 相机标定后行人图像Fig.3 Pedestrian image after camera calibration

2 改进的立体匹配算法

在行人检测领域,行人检测算法可以分为2个步骤:① ROI的提取;② 行人检测算法。其中ROI的提取是依靠双目视觉中立体匹配算法来完成的,利用立体匹配算法生成的视差图中的干扰部分来划分并提取ROI,通过减小被检测区域来降低行人检测的复杂度,同时避免检测区域的错误信息的干扰。

立体匹配算法通过左相机生成的中心点像素及邻域信息,在右相机寻找一致的特征点信息进行代价匹配,并通过视差计算和相机内固定参数的转换来获取视差图。道路中的行人信息有着相似度高和纹理弱的特点,因此选用何种立体匹配算法对更为准确和高效地提取行人信息至关重要。

根据算法特点可以将立体匹配算法划分为全局、半全局和局部匹配算法以及基于机器学习的匹配算法[19]。

全局匹配算法的优点是通过对全图的考量与计算,显著提高了算法的匹配精度,缺点是计算量过大,不能保证算法实现的时效性;局部匹配算法的优点是提高了计算的实时性,缺点是计算方式较为单一,针对弱纹理区域的匹配精度较低;深度学习算法的优点是针对误匹配率有着较大程度的降低,缺点是算法实现需要建立在大量的数据学习的基础上,大大提高了算法实现的复杂度。综上所述,本文选用融合全局、局部匹配优点的半全局立体匹配算法,该算法在保证匹配时效性的基础上,有着较好的匹配精度,但对应用环境进行分析后,该算法仍有一定的改进空间。

参考上述问题,提出了结合PatchMatch算法的Census自适应窗口变换的半全局立体匹配算法,算法流程如图4所示。改进后算法在确保匹配时效性的基础上,针对弱纹理以及无纹理区域有着较好的匹配精度。

图4 改进后的半全局立体匹配算法流程Fig.4 Flowchart of improved semi-global stereo matching algorithm

使用双目相机采集待匹配图像,对待匹配图像进行自适应窗口的Census代价匹配,在待匹配图像的强纹理、较强纹理区域使用7 pixel×7 pixel、 9 pixel×9 pixel的窗口进行Census变换;使用0°、50°、100°和150°顺时针方向的一次空间迭代和200°、250°、300°和350°逆时针方向的二次空间迭代结合的方式对代价匹配完的图像进行代价的聚合;利用双曲线拟合算法对处理后图像进行现实化还原,将现实化还原后的深度图借助左右一致性原则进行误差点的剔除;使用高斯滤波算法减少环境噪声对深度图的干扰;输出已匹配图像。

2.1 初始视差的获取

2.1.1 代价匹配

SGM算法在代价匹配阶段使用互信息算法,但是互信息算法由于自身机制的限制,针对某一像素点进行代价匹配时,无法考虑该像素点的临近像素对代价匹配的影响,且对于不均匀光照的场景,无法确保匹配精度。因此,本文在代价匹配阶段使用Census变换,该变换算法可以减少临近像素点对中心像素点的影响,且不容易受到不均匀光照的干扰。Census算法的本质是对窗口内的所有像素进行Census变换,并采用汉明距离实现代价匹配。

但分析Census变换后,该算法仍有一定的局限性:

① 算法实现依赖窗口中心点的像素信息,如果中心点像素受到外界干扰则会导致误匹配,降低匹配精度;

② 窗口中心点如果处在弱纹理及无纹理区域,则代价计算的值误差较大,同时也会导致误匹配。

针对上述算法的局限性,本文提出改进后的Census自适应窗口算法,在不明显提高算法实现繁杂性的基础上,首先,通过Census变换,将窗口内的中心点像素通过式(2)编码成0和1构成的二进制比特串:

(2)

式中:TCensus(a)为由窗口变换产生的中心点像素a的比特串,Ma为像素a的领域,I(a)为窗口内中心点的灰度值,I(b)为领域内的像素点b的灰度值,⊗为按位连接符。判断函数ζ[.]可展开为:

(3)

其次,使用中心像素点临近的左、右、上、下4点的像素平均值来代替窗口中心点的灰度值。

IP(x,y)=(Ia(x,y+1)+Ia(x,y-1)+

Ia(x+1,y)+Ia(x-1,y))/4,

(4)

式中:(x,y)为窗口中心点,Ia(x,y)为窗口中心点灰度值,(x,y+1)、(x,y-1)为中心点上下临近点,(x+1,y)、(x-1,y)为中心点左右临近点。通过公式计算均值后,将中心点的灰度值与均值对比。最后,将阈值与比较的灰度值的绝对值进行对比,确定改进后中心点的灰度值信息。

(5)

式中:T∂为式中自定义的阈值,通过对多幅图像的实验对比,阈值的合理区间为[10,20],本文选取的阈值大小为13。

基于以上计算,可以将式(3)更改为:

(6)

实现自适应窗口算法的思想是当前窗口中像素平均值较大时直接使用当前窗口,而当前窗口中像素平均值不够大时,选择增大匹配窗口来获得更多像素信息,从而提高匹配精度。

在完成窗口中心点的灰度值计算后,通过窗口灰度值均方差确定窗口大小,均方差计算如下:

(7)

式中:M为初始窗口内像素的总数,ai为领域内各个像素,I(ai)为领域内各个像素对应的灰度值,N(a)为初始窗口的灰度值。

通过对式(7)的结果判断,假如结果较大,代表窗口内的灰度值变化明显,则选用尺寸小的窗口;假如结果较小,代表窗口内的灰度值变化不明显,则选用较大的窗口。由文献[20]可知,9 pixel×9 pixel的窗口大小适用于Census变换,于是本文选择9 pixel×9 pixel为初始窗口,同时设定3个阈值T1、T2和T3,其次选择4种不同尺寸的变换窗口来实现窗口自适应。设定以像素点I(a)为中心的自适应窗口WAdopt(a):

(8)

最后,计算替换完窗口中心点像素和窗口大小后,利用式(9)完成代价匹配:

Ccen(a)=Hamming[CL(a),CR(a-d)],d∈[dmin,dmax],

(9)

式中:CL(a)为左图比特串,CR(a-d)为视差为d的右图比特串,[dmin,dmax]为视差范围。

2.1.2 代价聚合

参考PatchMatch算法将待匹配图像映射初始化、匹配传递和随机搜索的核心思想,将常规的SGM算法8路径或16路径聚合更改为4角度(0°、50°、100°和150°)顺时针和4角度(200°、250°、300°和350°)逆时针的2次空间迭代的方式进行路径聚合。改进后的代价聚合算法能有效地降低立体匹配算法的视差候选数量,以此提高算法的实时性。

首先,在PatchMatch算法的初始化阶段,将梯度信息和色彩空间的变化聚合为一类,避免了在同一匹配区域内,由于视差不连续导致匹配精度降低。接着,利用PatchMatch算法和SGM算法相结合的方式,针对n个最佳视差候选完成代价聚合,以此减少代价聚合的视差选择。

① 给予已校正的图像给定n个不同的视差随机值drandom(x,y,n),该值为[dmin,dmax]。

② 使用2次顺序相反的空间传播更新每个像素n的随机初始视差,第一次传播采取从左上角到右下角的顺序,先为像素点a(x,y)搭建视差候选集sum(d),此集合由drandom(x,y,n)和dreset(a-r,n)组成,dreset(a-r,n)代表a(x,y)在0°、50°、100°和150°路径上a(x,y)临近像素更新的n个最优视差。剔除sum(d)的重复值后,利用递归的方法来计算视差d和各个路径方位r的代价路径Lr(a,d):

(10)

2.2 最优视差的获取

① 双曲线拟合视差选择

为了确保获取的道路行人信息符合现实[21],在此阶段选用抛物线拟合的算法,此算法的实质是由目前视差值的临近视差组成一条抛物线,亚像素级视差则是抛物线的最低点。

② 视差优化

在视差优化阶段,采用左右一致性检测、高斯滤波对过程优化视差。高斯滤波是为了图像平滑,防止图像锯齿的产生:

Is+1=G*D*Is,

(11)

式中:G为高斯滤波,D为下采样,方法为选取当前尺度图像偶数行列像素点;Is为当前尺度图像,Is+1为高斯采样图像。

为了更好地评估改进后的半全局立体匹配算法,检验改进后算法在弱纹理及无纹理区域的检测准确性,选用middlebury样本库中不同纹理的图像,分别使用SGM、PatchMatch、AD-Census[22]和PMSGM[23]进行对比实验。不同匹配算法进成的视差图如图5所示,匹配误差大于1的区域用黑点标记。通过实验可证,本文算法在弱纹理及无纹理区域有着更好的匹配精度。

图5 不同匹配算法生成的视差图Fig.5 Parallax generated by different matching algorithms

为了更好地验证本文算法的有效性,选择10组视差图进行算法的对比,其中包括弱纹理图像Bowling2、Flowerpots,重复纹理图像Cloth2和Wood2。从表3可以看出,本文算法误匹配率仅为1.97%,优于其他立体匹配算法。

表3 不同半全局立体算法在非遮挡区域的误匹配率Tab.3 Mismatch rates of different semi-global stereo algorithms in non-occluded areas

通过middlebury样本库的实验对比,并不能真实反映本文的立体匹配算法的有效性,因此,需要采集现实场景下的行人图像进行对比实验。

实验选用的对比算法为SGM算法和PatchMatch算法,因为本文的立体匹配算法是基于上述二者的改进,需要使用同一场景下的行人图像进行实验对比,进一步体现本文算法的有效性。

对比实验效果如图6所示,图6(a)为现实场景下的行人图像原图,图6(b)为使用SGM算法立体匹配后的深度图,图6(c)为PatchMatch算法立体匹配后的深度图,图6(d)为本文立体匹配算法后的深度图。

图6 现实场景下的对比实验Fig.6 Comparative experiment in a real scene

对原图进行3种算法的立体匹配之后可以看出,相比于SGM算法和PatchMatch算法,本文算法生成的深度图对于行人轮廓的还原效果更佳,能清晰地观察到行人的轮廓与姿态,且对图像中的反光区域有着更好的处理效果。

进一步分析对比实验结果,针对算法时效性的考量,PatchMatch算法的处理时间优于SGM算法,本文算法在生成深度图效果更佳的基础上,处理时间比PatchMatch算法缩短了8.9%。

通过对现实场景下的实验分析,证明了本文算法的有效性。

3 优化的SVM算法

3.1 降维HOG特征

使用改进后的半全局立体匹配算法生成视差图确定ROI后,利用优化后的SVM算法完成对车道行人的提取。HOG特征[24]提取过程中几乎不会受到大范围光照的影响,车道行人在移动或是姿势发生变化时,HOG仍能有效地提取特征信息,但HOG提取的特征中维度较高,会识别大量的非行人信息,因此本文选用PCA对HOG算法进行降低维度的处理。

① 输入u个样本u×v的矩阵,其中,v为3 800,

(12)

对此样本进行预处理,计算每一列的均值:

(13)

式中:g取值[1,u]。

② 使用矩阵中每列的值减去均值,获得含零的样本矩阵X,对此求矩阵的协方差并求协方差矩阵的特征向量和特征值:

(14)

AθS=λSθS,

(15)

式中:A为协方差矩阵,λS为特征值,θS为特征向量。

③ 最后将v维矩阵降到k维(u>k),并将λS由大到小排列,最终输出降维后的HOG特征:

X′=XSv×k,

(16)

式中:X′为降维后的样本,Sv×k为前k个特征向量组成的矩阵。

④ 对输入图像利用Gamma算法进行颜色归一。

⑤ 计算包含方向和大小的梯度信息。

⑥ 统计梯度直方图。

⑦ 串联特征描述子,输入特征信息。

3.2 训练SVM分类器

3.2.1 线性可分

将分开的样本矩阵超平面叙述为式(17),并在此基础上求最优解为式(18),其约束条件为式(19):

式中:b为偏移向量,当样本中包含行人头肩信息时,β=1,当样本中不包含行人头肩信息时β=-1。

针对式(18)选用拉格朗日方法进行优化得:

(20)

式中:α为拉格朗日系数。对X′和b求导并置零,将结果带入式(20),若最优解存在,则可得分类函数为:

式中:

(22)

3.2.2 线性不可分

针对线性不可分的问题,选取核函数为K(x·xj),此时的分类函数可写为:

(23)

4 实验与分析

行人检测算法的流程如图7所示。本文对比实验在Intel i7-7700CPU@3.60 GHz,内存16 GB,操作系统Windows 10,显卡英伟达GTX1060的电脑上搭配实验环境。使用OpenCV软件编写行人检测系统。车前行人样本图库选择不同场景下的道路行人图片建立。图库中包含完整行人样本2 000张,不包含行人肩部以上图片7 000张,将2种样本统一到尺寸大小为64 pixel×128 pixel。首先利用降维的HOG对样本库进行行人特征采集,接着将特征样本输入SVM分类器进行训练,得到训练好的SVM分类器,最后使用改进后的立体匹配算法进行行人检测,检查是否能够获得精确的行人信息,如果未达到要求,重新训练SVM分类器,检测行人信息,并将完整的行人信息框选出来。

图7 行人检测系统整体算法流程Fig.7 Overall algorithm flowchart of pedestrian detection system

本文在对于提取ROI的立体匹配算法有了较大的改进,并在样本学习阶段使用了降维的HOG特征提取,大大减少了背景冗杂信息的提取,从而进一步提高了检测精度和时效性。

为了验证本文算法的有效性,选取传统的HOG算法、改进的Adaboost结合帧间差分算法[25]、改进的HOG融合SVM算法[26]和多步态SVM算法[27]。对比实验选用样图如图8所示。

图8 各算法行人检测的效果Fig.8 Rendering of pedestrian detection of each algorithm

本文算法相比于HOG算法和改进的Adaboost结合帧间差分算法,在行人检测的准确率上有着较大幅度的提高,对于紧密人群有着更高的识别率,且相比于上述2种算法,本文算法的时效性有了较大的提升;本文算法相比于改进的HOG融合SVM算法和多步态SVM算法,在确保行人检测时间与上述算法无较大差异的前提下,在行人携带大物件或行人被与衣物相同颜色障碍物遮挡时,有着更优的识别效果。

实验结果可知,当车前道路行人较少时,每张图片的平均检测时间为18~25 ms;当车前道路行人较多时,每张图片的平均检测时间为75~82 ms,能够基本达到车前行人检测的时效性要求。在行人动作较小、未拿大件物品时,检测正确率达到97%,而经典的HOG算法检测时效性差,文献[25]的方法虽然相比于HOG算法检测精度和时效性有了一定的提高,但仍需进一步改进;文献[26-27]的方法相比于前2种算法,在行人检测的识别率上有了大幅的提升,但是在行人携带大件物品或是被与衣物相同颜色障碍物遮挡的情况下,行人的检测识别率仍需进一步改进。

为了进一步证明本文算法的有效性和鲁棒性,实验选用600张行人待检测图片进行3种算法的对比实验,其中包含雾霾等恶劣天气的道路行人图片,如图9~图11所示,选用3幅雾天图像进行展示,验证本文算法的鲁棒性。

图9 鲁棒性效果验证图1Fig.9 Robustness effect verification of figure 1

图10 鲁棒性效果验证图2Fig.10 Robustness effect verification of figure 2

图11 鲁棒性效果验证图3Fig.11 Robustness effect verification of figure 3

行人检测算法结果比较如表4所示。

表4 行人检测算法结果比较Tab.4 Comparison of pedestrian detection algorithm results

本系统适用于车辆起步阶段或是行车中的车前行人检测,系统中的SVM样本包含的行人场景较为广泛,所以分类器的鲁棒性较强,在恶劣气候影响光照、行人动作过大和障碍物遮挡行人的情况下,检测精度和检测时间都能基本达到要求。

5 结束语

实验表明,本文提出的改进后立体匹配和优化SVM算法针对车前行人有着较好的检测效果,相比于实验对比的其他几类算法有着更高的检测精度和更优的检测效率且鲁棒性较好,对于车前复杂场景下的行人可以更为有效的检测。本文算法可以实现行人的跟踪与定位,适用于针对道路行车安全以及汽车安全的辅助驾驶系统。在下一步的研究中,将着重于检测不同场景下的行人,进一步提高算法适用性,同时增强算法的实用度。

猜你喜欢
立体匹配视差中心点
基于自适应窗的立体相机视差图优化方法研究
Scratch 3.9更新了什么?
如何设置造型中心点?
基于梯度域引导滤波的视差精炼迭代算法
影像立体匹配中的凸优化理论研究
基于互补不变特征的倾斜影像高精度立体匹配
基于分割树的视差图修复算法研究
改进导向滤波器立体匹配算法
汉字艺术结构解析(二)中心点处笔画应紧奏
立体视差对瞳孔直径影响的研究