姜文涛,刘 江,贺峻峰,聂伟乐,周国良,卫 宏,闫 丽
(西安应用光学研究所,西安 710000)
目前图像拼接[1]方式主要有两种:第一种是通过单个镜头和单个相机,通过旋转相机将拍摄到的序列图像顺次拼接得到广角图像[2]。由于只使用了一个镜头和一个传感器,为了得到实时的全景图像需要高速旋转的装置来带动相机,尽管如此得到的拼接图像仍会存在扫描延时。第二种是通过多个镜头和多个相机根据视场角设计相对结构关系,使相机组覆盖更大的区域,再利用图像算法进行配准计算,找到重叠区域,进行重叠区域对齐、变换、融合,组成一幅视野宽广的场景图像[3]。本文仅研究第二种拼接方式。
针对多路高清视频的海量数据及拼接系统的实时性要求,本文选取Jetson平台为图像处理器。通过获取的图像进行标定计算出每路高清相机的内参及外参,再根据图像重叠区域的配准计算进行数据融合和图像变换,最后根据相机的位置关系选择适合显示的投影变换,合并中间计算过程生成复合变换模型,利用嵌入式平台实时处理多路的图像变化和拼接后图像显示。
基于特征点提取的图像配准算法相对全局灰度运算的方法如光流、灰度投影等,精度更高,在图像拼接中普遍使用。SIFT是对图像平移旋转缩放等符合透视变换模型,最为经典,精确度最高的算法,然而其计算量巨大,耗时很长,在一些强实时场景下无法使用,因此,最近一些年在SIFT之后,产生了大量特征点描述子,包括SURF、FAST、BRISK、BRIEF以及最新的ORB等,其均是在某一方面对SIFT进行简化,总体性能相比SIFT均有一定差距,但大大提高了SIFT的计算实时性[4],在本文的传感器拼接中,因传感器位置固定后,只需一次配准,对实时性无明确要求,故为保证拼接精度,本研究依然采用SIFT特征匹配作为图像配准算法。
高斯卷积核作为实现尺度变换过程中唯一的变换核已经被Koendetink证明,再后来高斯卷积作为唯一的线性核也被Lindeberg等人证明了。因此,基于高斯卷积核实现原始图像的尺度变换,获取图像在多尺度空间的表示序列,再在不同尺度的空间内对序列进行特征提取,是尺度空间理论的核心内容。
Lowe在2004年提出了高斯差函数DoG(Difference of Gaussian),由高斯卷积核在不同尺度和图像卷积运算生成,可以提高检测尺度空间中稳定特征点位置的有效率。在提取特征点的过程中,通过高斯核和图像在不同尺度下的卷积搭建金字塔,再利用相邻尺度的空间函数之差搭建DoG高斯金字塔子塔,然后在DoG空间进行极值检测。由于DoG值对噪声和边缘较敏感,检测得到的局部极值点要通过对一些低对比度及不稳定的候选点进行精确定位才能作为特征点[5],特征点提取如图1和图2所示。
k-d tree(short for k-dimensional tree)提供了一种待查和查询记录之间最符合记录的高效机制,因此降低了查找最佳匹配的计算量。该搜索算法可以近似为递归算法,通过轮换使用识别器和各维度的关键码进行比较,逐步在搜索的时候缩小范围,最终找到需要的点[6]。
k-d tree算法在检查结点的时候会花费大量的时间,最后能满足最近邻条件的只有很少一部分节点。当k-d tree的方法用在高维度数据的时候,任何查询都可能使大部分节点被访问和比较,搜索效率会下降甚至会不停地搜索。针对k-d tree算法在高维度空间的搜索效率低的缺点,本研究采用BBF(Best Bin First)方法[7]。
通过对叶子结点设置最大值可以缩短搜索时间,这个改进对k-d tree找到最近邻点有一定的提高,但叶子结点的检查顺序还只是根据k-d tree的结构来决定的。以结点和被查询结点的距离递增顺序来检索结点的改进方法解决了未考虑被查询点的位置的问题,结点和被查询结点的距离是指它们之间的最短距离。同时BBF算法对超时进行了限定,在优先级的队列中当所有节点都经过检查或超过设定时间时,检索算法会返回并找出最佳结果作为近似的最近邻。特征匹配点对检测如图3所示。
SIFT特征向量生成后首先需要进行匹配,也就是相似性度量,即采用欧式距离、马氏距离等距离函数匹配特征之间的相似性程度。其次是消除错配,任何特征描述和相似度量都无法完全避免错配,此步骤主要根据各种约束对错配点对进行消除。这里消除错误的匹配点对,对候选点中最佳匹配点进行特征向量匹配,最后得到所需的图像特征向量,是利用RANSAC随机样本的一致性算法实现的。
RANSAC称为随机抽样一致性算法,它是通过估计数学模型参数的一种迭代算法[8]。其主要特点是,正确概率会随着模型的参数随着迭代次数的增加逐步得到提高。主要思路是,通过采样和验证的策略,反复选择数据中一组随机局内点,合成一个大概率适用于局内点的模型。每次迭代从数据集的采样模型中选取需要的最少数目特征点并计算模型参数,再在数据集中经过统计得到符合该模型参数的特征点数量,符合样本最多的参数则是模型的最终参数值。即:内点是符合模型的特征点,外点是不符合模型的特征点。消除错匹配点对的图像配准图如图4所示。
目前投影模型主要有平面投影、柱面投影、球面投影及墨卡托投影等,针对日后半球全景显示的研究,本研究使用了球面投影。
基准坐标系定义了一个原点为视点,其中的任意一点P(U,V,W)在相机坐标系中对应点设为P′(U′,V′,W′),它们的对应关系可以用下面的变换来表示:
(U′,V′,W′)T=R×(U,V,W)T
(1)
其中:R为三维单位正交矩阵,表示R矩阵的方法有很多,通常有方向角和四元组。相机方向角都包含俯仰角和偏转角,绕相机的光轴旋转的角,分别用α、β、γ表示[9]。本文旋转变换的矩阵使用的方向角表示方法如下,R表示为:
(2)
实景图像的基本度量单位一般统一为像素,为了计算球体半径,文本采用等距离匹配算法对相机的焦距进行估计。设f是相机的焦距,∅是相机旋转一次光轴的夹角,di是相邻照片的交点至照片的位移,则满足下列公式:
(3)
若覆盖球面的n幅图像由多个同型号相机进行拍摄,则有:
(4)
f值根据序列图像di值求得后就得到了球面模型的半径,然后把各层图像投影到半径为f的球面模型上。
球面投影[10]的反变换是把球面拼接图像生成可观察到的视图,推导得出:
(5)
这就是球面反投影公式。输入图像的像素点经过该投影变换后一般都是有小数,这些结果映射在非整数坐标的输出图像位置。所以数据在投影变换过程中不具有连续性,会出现由锯齿现象而导致变形,本文采用双线性插值算法解决投影过程的变形。球面投影算法仿真结果如图5所示。
本文利用NVIDIA公司低功耗高性能嵌入式平台实现全景图像拼接。Jetson TX2集成的6核CPU,由2个丹佛加4个A57组成,GPU部分采用Pascal架构,拥有256个CUDA,并且板载了8G内存。拼接设计基于OpenCV[11]对算法进行优化,利用CPU对特征提取、最佳点配准、反投影变换进行计算及公式优化合并,最终得到复合矩阵变换模型,再用GPU完成图像变换及拼接图显示。本文设计了多路高清图像实时拼接显示,相机采用小米运动相机实时输出1 280×720分辨率的广角图像,拼接显示图像分辨率为1 920×1 080。由于输入视频设置为720P@60 Hz彩色图像,经计算1路高清相机的数据率为1.24 Gb/s,4路相机即为4.96 Gb/s。因此同时采集对数据总线读取和图像处理开销都很大,本文将图像格式由RGB转变为YUV4∶2∶2,即一个像素对应16bit位宽,减小了33%图像输入的数据量。多相机结构模型及拼接显示如图6~图11所示。
图6显示两个白色相机和绿色相机分别水平夹角50度,在分别参照安装面夹角20度,四个相机覆盖超大视场,最终拼接图像如图7所示;图8显示4个相机两两夹角45°,可以覆盖超过180°超宽视场,最终拼接图像如图9所示;图10显示3个白色相机两两夹角45°,两个绿色相机和中间白色相机两两夹角60°,可以覆盖半球视场,最终拼接图像如图11所示。
提出了一种基于SIFT特征提取的改进算法,并利用Jetson平台实现了全景图像拼接的设计。利用复合矩阵变换模型实现了重叠区的图像融合和投影拼接显示,简化了图像处理过程,利用嵌入式平台可以在线处理并实时显示拼接后的高清图像,具有很强的实用性。