校正过的图像对Meanshift分割图像窗口匹配代价计算WTA算法匹配求初始视差图一致性约束视差校验图像模块拟合置信传播优化视差图输出视差图图4.12算法流程图
㈠局部匹配求初始视差图
由于优化方式不同,立体匹配通常可以分为局部匹配和全局匹配算法
[17]
。本文首先采用
局部匹配算法求得初始视差图。要判断两个像素点的相似度,仅凭单个像素显然是不够的。当两个像素块反映同一个场景时,这两个像素块的像素值就会比较相似。最常见的图像块是边长为奇数的正方形,关键点位置就是正方形的中心,可通过比较两个块内像素的匹配代价函数,来衡量两个正方形图像块的相似度。经典的局部匹配代价函数有绝对误差和算法SAD、误差平方和算法SSD和归一化积相关算法NCC。
MNi,j?s?1?t?1S(s,t)?E(Si,j)?T(s,t?E(T))R(i,j)?MNi,jMN2i,j2S(s,t)?E(S)??s?1?t?1?S?1?t?1?T(s,t)?E(T)?
?? (3.2)
i,jE(S)、E(T)分别表示(i,j)处子图、模板的平均灰度值。 其中,
算法SAD和SSD实现较简单,运行时间短,但容易受到光线等影响,影响匹配精度,因此本文采用NCC算法求初始视差图。
得到初始视差值后,为剔除匹配不正确的点,本文采用一致性校验法校验视差图,即先以左摄像头采集图片作为目标图片,右摄像头采集图片作为待匹配图,在右图求得与左图像素点匹配的点后,再以右摄像头图片作为目标图片,在左图求得与右图像素点匹配的点,若两次匹配后找到的点一致,则视为正确的匹配点,若不一致,则一定至少有一次匹配是错误的,则剔除该点得到的视差值。
(二)利用meanshift分割图片的分割结果拟合各像素块
经过meanshift分割图片后视各图片模块在同一平面,根据各区域内校验后仍为正确的视觉点,计算出各区域内的视觉方程,并组成视觉模板集。
(三)通过置信传播算法,进行全局最优分配
第二步中获取的视觉平面模板只是根据各个区域内部视差分布而获得的,并没有考虑区域间的相互作用,存在较大误差,之后需要使用置信传播算法对其进行全局匹配,将每个视觉模板作为一个节点,利用全局的置信传播进行不断的迭代推算,直到最终收敛。 利用surf算子的特征提取立体匹配算法匹配
立体图像对直方图均衡化特征点匹配匹配点优化求特征点视差对离散视差图插值输出视差图图4.13算法流程图
(一)直方图均衡化
普通摄像头拍摄的照片常常会出现这样的情况,在某些强度值出现的频率比其他强度值高,呈现出来的照片会是灰蒙蒙的。通常情况下,一张图片各像素的强度值都均衡分布,才
会被认为是一张质量高的图片。在这种情况下,便需要用直方图均衡化使图片的直方图居于平稳。
但是直方图均衡化也有它的缺点,就是容易模糊掉有的像素点,而在图像本真像素非常重要的双目视觉立体匹配中,我们无法确定直方图均衡化对匹配的影响是否会利大于弊。于是本文用OpenCV3.0中提供的equalizeHist函数进行直方图均衡化处理,比较均衡化前后对立体匹配的影响。
(a)直方图均衡化前立体匹配结果
(b)直方图均衡化后立体匹配结果
图4.14直方图均衡化前后立体匹配结果的比较
分别对A、B、C三组不同立体图像对进行试验,所得结果如下,其中,A(1)、B(1)、C(1)分别为直方图均衡化前的匹配结果,A(2)、B(2)、C(2)为对应的立体图像对直方图均衡化后的匹配结果。
表4.5 直方图均衡化前后立体匹配结果比较
实验图片
总特征点数
正确匹配数
正确率
A(1) A(2) B(1) B(2) C(1) C(2)
16 51 9 12 22 46
10 45 8 11 15 36
62.5% 88.24% 88.89% 91.67% 68.18% 78.26%
由表4.5可得,直方图均衡化后surf算子特征点匹配数增多,正确率提高。
(二)匹配特征点后优化,排除匹配错误的点,得到离散的视差图,通过双线性插值得到最终视差图。
特征点优化利用的是RANSAC算法,该算法利用少量数据集,对特定的数学实体进行估算,利用不少于8个匹配对来估算基础矩阵,剩下的匹配对均以这个基础矩阵为标准来衡量,不满足时则舍弃。因此当8个匹配对自身正确率不高时,留下的支撑对也会越来越少,因此找到正确的8个匹配对很重要。本文利用OpenCV3.0的findFundamentalMat()函数找到正确的基础矩阵。运行效果如下图所示:
(a)RANSAC优化前匹配结果
(b)RANSAC极线优化后匹配结果
图4.15 RANSAC优化前后对比
去掉匹配错误的点后,就可以求特征点的视差了,由于之前已经完成校正,因此两张图
相关推荐: