刘 畅,徐美华,郭爱英
(1.上海大学机电工程与自动化学院,上海200444;2.上海大学新型显示与系统集成教育部重点实验室,上海200444)
近年来,随着计算机视觉的发展,全景图像被广泛应用于医学成像技术、遥感图像技术、虚拟现实世界和车载安全等方面[1].在车载安全方面,全景辅助驾驶系统弥补了驾驶员视觉上存在盲区的不足,市场上也出现了很多全景泊车系统.然而,全景辅助系统仍然面临诸多问题:如何给驾驶员提供方便、全面的视角,拼接图像的质量如何,有无拼接缝和鬼影,拼接速度的快慢等.
在全景拼接算法的发展过程中,学者们的主要是针对拼接算法的运算速度和准确性、构建全景图的视角这两方面进行改进.在构建全景图的设计上,Brown等[2]提出了利用透视变换来自动化拼接的方法,此方法是基于Lowe[3-4]提出的尺度不变特征变换(scale-invariant feature transform,SIFT)特征点来完成拼接,该方法提供了完成的全景拼接方案,但是需要大量图像进行匹配,耗时较长;2008年,Bay等[5]提出了加速稳健特征(speeded up robust features,SURF)算法,这是上述SIFT算法的改进算法,计算速度得到提升,为算法在实时性系统中的应用打下了基础;Joo等[6]则是基于上述SURF特征点,将待拼接图像分为数组栅格,每组栅格给予近处的特征点更高的权重,并进行一次拼接矩阵的运算,提高了拼接算法的准确性.在视角的呈现上,改进方法主要有柱面投影、球面投影以及3D全景模型.李晓辉等[7]使用球面投影的方法完成了25张图像的拼接,然而球面投影上直线的弯曲度太大,对驾驶员有一定误导性;刘冬等[8]对多个视角进行了曲面建模,实现的3D车载环视全景图更符合人的直观感受,但是其对于高于地面的物体存在较为严重的拉伸形变;杨刚等[9]基于参考点的匹配实现了俯视图的拼接,由于每一帧图像不需要重复计算匹配矩阵,故该方法拼接速度较快,方便泊车,但是不适用于呈现更广的视角.
基于上述讨论,通过对柱面投影模型和俯视图模型的研究和整合,本工作提出了2种模式自动切换的全景拼接方案.根据相邻帧之间的特征点位置关系判断行车方向.如果为前进状态,则判断为行车过程,系统自动切换为柱面投影模型,给驾驶员提供广阔的视角;如果为后退状态,则判断为倒车过程,系统切换为俯视图模型,准确呈现地面障碍物以及车道线等信息.另外,将柱面投影的运算速度和拼接效果进行优化,使算法可运用到实时视频拼接中.
全景拼接算法的框图如图1所示.输入图像首先需要进行畸变校正,去除鱼眼摄像头的径向畸变;然后采用柱面投影和透视变换2种方法对畸变后的图像进行视角变换;将得到的图像进行SURF特征点提取和配准,就得到初步的拼接全景图;最后,对重叠区域进行图像融合,就可得到无拼接缝后的完整全景图.
图1 全景拼接算法框图Fig.1 Panoramic stitching algorithm frame
在图像拼接过程中,如果直接对具有一定角度拍摄的图像序列进行拼接,则会破坏实际景物的结构特征[10].为了解决这一问题,需要对原始图像进行柱面投影.柱面投影是将空间看作一个圆柱体,将图像投影到柱面坐标系下.柱面全景图去除了上方和下方2个部分,在水平360◦方向为用户提供环形视觉[11].柱面投影效果如图2所示.
图2 柱面投影示意图Fig.2 Cylindrical projection diagram
对于投影后的图像上任意一点Q(x1,y1),反变换到原图上为P(x,y),焦距f的计算公式为
式中:θ为相机的水平视角,是由环绕一周的图像数量和重合度决定的.将坐标原点移动到图像中心点后,2个对应点变为.由图2可得P′的坐标为
根据式(2)可得原图和投影图之间点的对应关系,对于给定焦距f可以生成相应的柱面投影图.
对摄像机获取的斜投影图像进行2次投影变换得到垂直视角投影图像,所用的方法为透视变换[12].透视变换的效果如图3所示.
图3 透视变换示意图Fig.3 Perspective projection diagram
对于原图像上的一点(x,y),投影后的图像上与之相对应的像素点为(x′,y′).2个点之间存在单应性关系,而这种单应性关系可以表示为
由于单应性矩阵H存在8个自由变量,因此需要至少4组方程才能有解.而每组对应点可以得到2组方程,故需要至少4组对应点才能找到H的解,且4个点中任意3个不能在同一条直线上.对于每组对应点,式(3)可以化简为
将4对点坐标组合,可得
式中:A为8×8的可逆矩阵.根据上述关系,可以求出h即为单应性矩阵H.
在图像拼接部分,选取较快的SURF特征点进行图像拼接,并采用随机抽样一致(random sample consensus,RANSAC)算法[13]去除其中的误匹配.在已经配准的特征点中,令x=[x y]T和x′=[x′y′]T为相邻2幅图像I和I′的特征点对.在实际拼接过程中,特征点对的匹配关系可用透视变换的模型来表示.根据式(3)的单应性可知:
式中:rj为单应性矩阵H的第j行变量.将1组带有噪声的特征点代入上述公式,并将其线性化的方法定义为数字线性磁带(digital linear tape,DLT)技术[14].由03×1=n′×Hn可得
式中:n=[xT1]T.令ai为式(7)中的LHS矩阵的前2行,第i组数据的误差可以表示为‖aih‖.DLT方法最小化所有组数据误差的平方和,即
将ai组合为矩阵A∈R2N×9,式(8)可以表示为
将矩阵A用奇异值分解(singular value decomposition,SVD)方法进行分解,h的最优解为最小特征值的特征向量.将h重构为单应性矩阵H,并将H作用于原图,就可得到拼接后的图像.
多模式的全景拼接方案结合了柱面拼接和俯视图拼接这2种方法的优点,旨在根据车辆的行驶状况的不同选择合适的全景图像的呈现方法,给驾驶员提供更好的视角选择.多模式全景拼接算法具体的实现框图如图4所示.
图4 多模式全景拼接算法框图Fig.4 Frame of multi-mode panoramic stitching algorithm
图像的获取是通过4路鱼眼摄像头来实现的,2种模式下都需要对鱼眼摄像头进行畸变校正.畸变校正采用9×7大小的棋盘来进行的.棋盘网格的角点检测[15]结果如图5所示.
图5 角点检测结果Fig.5 Result of corner detection
根据文献[16]中的张正友标定法可以知道,图像坐标系下的坐标与世界坐标系下的坐标有如下关系:
式中:A为相机的内参数;[R t]为相机外参数;m和M分别表示为图像坐标系和世界坐标系下的坐标;s为一个尺度因子.根据式(10),可以计算出相机的内外参数矩阵的初值.然后利用L-M算法[17]估计出最大似然参数,此步骤的目的是消除噪声点.当计算出内外参数矩阵后就可以根据畸变模型的公式计算出畸变参数,完成畸变校正:
根据相邻2帧图像的特征点的对比,可以判断出车辆的行驶方向.特征点的检测时间较长,如果每一帧都进行特征点的计算与匹配,则会影响拼接算法的实时性,因此每相隔30 s进行一次特征提取.提取到的特征点一方面用于此处车辆行驶方向的判断,另一方面用于下面的特征匹配.
相邻2帧图像之间有重叠区域,根据式(3)可知存在单应性矩阵.将单应性矩阵分解可以得到
式中:HS表示图像的旋转平移;HA为一个上三角矩阵;HP表示图像形变.在HS中R为旋转量;t为平移量.因此H矩阵中的t即为图像之间的平移状况.由于图像噪声可能会导致2帧之间存在平移量,故根据实际车速分别计算出前进与后退状态下的判断阈值α、β.令tT=[x y],以小车右边摄像机所拍图像为参考,根据式(12)可判断出行车方向:
将小车右边摄像机所拍摄的校正后的图像进行对比判断.判断出行车方向后,就对舵机发出控制信号.如果是前进方向,则让舵机与水平面平行;如果是后退方向,则让舵机向下与水平面呈45◦夹角.
根据小车的行驶方向进行相应的视角变换.前进时,为了给驾驶员提供更广阔的视角,采用柱面拼接的方法;倒车时,为了给驾驶员提供地面障碍物及停车线信息,采用透视变换的方法.在拼接前,先根据上述柱面投影和透视变换的方法计算出变换后的特征点与变换前的对应矩阵;而在拼接过程中,只需要根据对应矩阵就可以找到原图上对应点的坐标,这种方法可以提升相邻帧的运算速度,提高实时性.通常,得到的坐标并非整数,因此使用双线性插值法计算该点的像素值.透视变换和柱面投影结果分别如图6、7所示.
图6 透视变换结果Fig.6 Results of perspective transformation
图7 柱面投影效果Fig.7 Results of cylindrical transformation
观察相邻2帧图像,可以看出2帧图像的对应点集中在重叠区域所在的半边,说明相邻2帧图像的特征提取和匹配主要在半边的图像进行,这样可以缩短拼接所需时间.特征点提取与匹配如图8所示.
图8 特征点匹配结果Fig.8 Result of features matching
根据上述DLT算法,可以求出2帧图像的单应性矩阵,然而如果根据单应性矩阵将整幅图像变换到另一帧图像上,则会导致变换后的图像出现重叠区域与非重叠区域比例不一致的情况.文献[18]将图像分成不同区域进行处理.简化后的上述方法可用于拼接效果的优化.简化方法为:对于靠近重叠区域的三分之一采用单应性矩阵H的变换方法,对于远离重叠区域的三分之一采用相似变换,中间区域则采用二者过渡的变换矩阵.具体实现过程:①根据H计算左边三分之一部分各行像素点的位移情况Δx1;②根据相似变换计算右边三分之一,得到每行的位移情况Δx2;③中间三分之一部分各行的位移量是根据Δx1和Δx2加权计算所得,即Δx3=w1Δx1+w2Δx2.由此,可以得到拼接效果更好的全景图像,2种方法的对比如图9、10所示.
图9 根据H矩阵拼接结果Fig.9 Stitching result according to H
图10 改进算法拼接结果Fig.10 Stitching result of optimized method
由图9和10对比可以看出,算法呈现出更好的视角,避免了远离重叠区域一端图像的拉伸情况.另外,针对特征检测时间较长的问题,采取间隔提取特征点的方法,即每隔30 s进行一次特征点的提取,并对单应性矩阵进行修正,这样可在保证准确性的同时提高算法的实时性.
不同图像由于存在颜色亮度差异会出现明显接缝,需要进行融合处理[19].加权平均融合算法类似于直接求平均的算法,但是其在重叠区域不是将像素值进行简单叠加,而是先进行权值运算再叠加求平均,这样可用于图像融合.设I为融合后的图像,I1和I2分别表示为参考图像和待拼接图像,则图像I在(x,y)处的像素值为
式中:w1+w2=1.不加入融合算法和加入融合算法的对比如图11所示.
图11 不加入和加入融合算法对比图Fig.11 Comparison images of without and with fusion algorithm
图11(a)中没有加入融合算法,可以看出明显的拼接缝,而(b)中使用融合算法,拼接缝被修正,效果良好.
为了验证多模式算法,本实验室自行开发了一套多模式车载全景拼接系统(见图12).本系统主要包含小车模型、四路鱼眼摄像头、舵机控制板和PC机等.输入设备为四路鱼眼摄像头,每一个摄像头输入图像尺寸为640×480(像素).算法处理使用的PC机配置如下:Inter Core i5-7300HQ@2.50 GHz;8 G内存.配置的运行环境为Visual Studio 2017平台上基于Opencv3.3,使用C++语言编程实现本算法.实验平台如图12所示.
实验中,小车前进时系统自动切换为行车模式,舵机自动调整角度,与水平面平行,拼接输出的全景图如图13所示.
从图13可以看出,柱面投影将摄像头按照后—左—前—右—后的顺序拼接成为一幅完整的全景图,且每帧图像都较好地保留了原图的视角,相邻图像之间的拼接缝也被处理好了;仅在摄像头近处存在一些视角盲区,这是由于鱼眼相机的视角所限制的.
图12 实验平台示意图Fig.12 Experimental platform diagram
图13 行车模式全景拼接图Fig.13 Panoramic stitching image of forward-mode
小车后退时系统自动切换为倒车模式,舵机自动调整角度,与水平面呈45◦夹角,方向向下.拼接输出的全景图如图14所示.
图14 倒车模式全景拼接图Fig.14 Panoramic stitching image of backward-mode
图14的中心区域用实验用车的图像模拟车身位置,完整呈现了车身周围的俯视图在图像边缘的模糊部分,是由于摄像头畸变校正所得的图像边缘像素点较少.
在实验中,选取3组柱面拼接所需时间的数据(见表1);选取3组俯视图拼接所需时间的数据(见表2).
由于柱面投影中最左边和最右边2帧图像都是车背面摄像头所获图像,即柱面投影是将5帧图像拼接在一起的,因此其图像配准的时间相比俯视图模式要更长.总之,拼接的时间可以满足实时性的要求.经典柱面投影算法运算与改进算法性能比较如表3所示.
表1 行车模式全景拼接所需时间Table 1 Time cost on forward-mode stitching
表2 倒车模式全景拼接所需时间Table 2 Time cost on backward-mode stitching
表3 经典柱面投影算法与改进算法性能比较Table 3 Performance comparison of classical cylindrical projection and improved algorithm
根据柱面投影模型中投影后的点和投影前的点之间存在的对应关系,可以计算出投影后的图像上每一点与投影前图像上对应点的位置关系,其中超出原图范围的点不予考虑.以上述对应点的位移量建立起与图像像素数目一致的位移矩阵,根据此矩阵就可以找到原图上对应点的位置,并利用双线性插值法得到柱面投影图.此步骤仅在初始化过程中进行,而在拼接过程中不需要重复计算,这就加快了这部分算法的实现速度,增强了算法的实时性.
从实验结果来看,拼接图完整地呈现了2种视角下的全景图像,为驾驶员提供了更丰富的路况信息.同时,算法所用的总体时间也满足了实时性的要求,方便驾驶员及时做出调整.
通过对全景视角的优化问题进行研究,本工作提出了一种多模式的全景融合拼接算法.该算法针对全景驾驶辅助系统在视角上无法完整提供驾驶员所需视角的问题,将柱面投影和透视变换下的俯视图模型结合在一起,并根据实际行车状况,选择合适的模型进行全景拼接.另外,对传统的基于一个单应性矩阵的拼接做出改进,优化了柱面投影下的全景图的呈现效果.经过实验证明,该算法也可以满足驾驶辅助算法的实时性要求,具有一定的实际应用价值.未来工作中将继续研究拼接图像之间的精确匹配,消除由一个单应性矩阵映射所带来的鬼影现象,同时还需要进一步提高算法的速度和鲁棒性.