双目视觉之立体匹配

  1. 引言
    立体匹配—匹配两个不同摄像机视图中的三维点—只能在两摄像机的重叠视图内的可视区域上才能被计算。如果知道了摄像机的物理坐标或者场景中物体的大小,就可以通过两个不同摄像机视图中的匹配点之间的三角测量视差值d = xl - xr来求取深度。

  2. opencv实现了两种立体匹配算法:块匹配算法和半全局块匹配算法。

    1. 块匹配算法(block matching,BM)
      该算法使用了叫“绝对误差之和”的小窗口来查找左右两幅立体校正图像之间的匹配点。这个算法只搜寻两个图像之间的强匹配(强纹理)。因此,在一个强纹理场景中,例如出现在室外的森林中,每一个像素都有可计算的深度。在一个弱纹理场景中,例如一个室内走廊,只能计算出很少点的深度。对于处理非畸变的校正立体图像,块匹配立体匹配算法有以下三个步骤:

      1. 预过滤,使图像亮度归一化并加强图像纹理
      2. 沿着水平极线用SAD窗口进行匹配
      3. 再过滤,去除坏的匹配点

      在预过滤中,输入图像被归一化处理,从而减少了亮度差异,也增强了图像纹理。这个过程通过在整幅图像上移动窗口来实现,窗口的大小可以是55、77(默认值)……、21*21(最大)。窗口的中心像素Ic由min[max(Ic-Iavg,Icap),Icap],Iavg是窗口的平均值,Icap是一个整数范围,默认值为30。
      匹配过程通过滑动SAD窗口完成。对于左图像中的每个特征,要在右图像中对应行进行寻找,以实现最优匹配。校正之后,每一行就是一条极线,因此右图像上的匹配位置就一定会在左图像的相同行上(即具有相同的y坐标)。如果特征有足够多可检测的纹理,并且位于右摄像机视图内,就可以找出该匹配的位置。如下图所示:
      在这里插入图片描述
      如果左特征像素位于(x0,y0),那么对于水平前向平行的摄像机排列,匹配点(如果有)一定会在相同行或x0左侧找到。如下图所示:
      在这里插入图片描述
      对于前向平行的摄像机来说,x0是零视差,并且左边的视差更大,对两个摄像机之间有夹角的情况,匹配点则可能出现负的视差(位于x0右侧)。
      然后通过预先选择的视差数进行视差搜索,以像素计数(默认为64像素)。视差具有一个离散的亚像素精度,等于低于单个像素级别的4位分辨率。当输出图像是一个32位浮点图像时,将返回非整型视差。当输出一个图像是一个16位整型时,视差将以4位定点形式返回(即乘以16并舍入为整数)。
      设置最小视差和待查找的视差个数建立一个双目视界,这个三维体被被立体算法的搜索范围所覆盖。
      下图展示了由三种不同视差(20、17、16)限制开始的5像素的视差搜索范围。如图中所示,每组不同的视差限制和视差个数都产生了不同深度可知的双眼视界。在这个范围之外就不能获得深度,在深度图上会出现一个深度未知的“黑洞”。缩小摄像机间的极线距离T、减小焦距长度、增加立体视差的搜索范围或者增大像素宽度,都可以使双目视差变得更大。
      在这里插入图片描述
      双目视界内部的对应有一个内置约束,称为“顺序约束”,他简单地规定了特征从左视图到右视图转换时顺序保持一致。可能会有缺失。这是因为有遮挡和噪声地缘故,使得左图像上的特征在右图像上不能发现,但是发现它们的顺序保持不变。同样地,右图像上也可能有一些特征在左摄像机上不能识别(这些称为“插入”),但是插入不会改变特征地顺序,尽管这些特征可能会扩散。
      下图过程反应了水平扫描线上匹配特征地顺序约束
      在这里插入图片描述
      给定允许地最小视差增量,通过下面公式,能确定可以获得最小深度范围精度。
      在这里插入图片描述
      在匹配之后,就要开始进行过滤处理。匹配值经常具有一个特点,就是强烈地中央被副瓣所包围。一旦确定了两个视图的待选特征匹配,就可用后过滤来错误匹配。

    2. 半全局块匹配算法(semi-global block matching,SGBM)
      SGBM主要在两个方面与BM算法不同。第一个是使用Birchfield-Tomasi度量在子像素水平上进行匹配。第二个不同是SGBM视图基于所计算的深度信息来强制实现全局平滑约束,它通过感兴趣区域的许多一维平滑度约束进行考虑。

参考文献:Adrian Kaehler,Gary Bradski,Learning Opencv3[M],清华大学出版社,2018.7


下面的是笔者的微信公众号,欢迎关注,会持续更新c++、python、tensorflow、机器学习、深度学习、计算机视觉等系列文章,公众号中内含300+本pdf电子书籍,肯定有你需要的一本,关注公众号即可领取哦。
在这里插入图片描述
如果你对JAVA方面感兴趣,可以关注下面JAVAERS公众号,陪你一起学习,一起成长,一起分享JAVA路上的诗和远方。在公众号里面都是JAVA这个世界的朋友,公众号每天会有技术类文章,面经干货,也有进阶架构的电子书籍,如Spring实战、SpringBoot实战、高性能MySQL、深入理解JVM、RabbitMQ实战、Redis设计与实现等等一些高质量书籍,关注公众号即可领取哦。
在这里插入图片描述

发布了46 篇原创文章 · 获赞 187 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/Xiao_Jie123/article/details/105323423