立体匹配算法的学习

2021/7/27 12:35:41

本文主要是介绍立体匹配算法的学习,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

立体匹配算法的学习

    • 难点
    • 分类
    • 立体匹配流程
    • Mc-CNN流程
    • DataSets

难点

颜色/亮度在不同区域和光照/阴影条件下可能有差异或噪声。同时可能有区域发光为立体匹配增加难度
其他难点:倾斜面,透视变形,弱纹理区域,重复纹理,透明物体,遮挡和深度不连续的区域。

分类

  1. 局部方法(non-local):局部滤波(Box filter,Bilateral Filter,Guided
    filter),minimum spanning tree(MST),Full image filter

  2. 半全局算法:semi
    global matching

  3. 全局算法: graph cut,Belief propagation

直接块匹配:以像素点为中心,做一个遍历滑窗,寻找最优解。(问题:存在冗余计算)

立体匹配流程

匹配代价计算 → \to → 代价聚合 → \to → 视差计算 → \to → 视差优化/后处理

代价函数计算左右图两个像素之间的匹配代价cost,cost越大,代表两个像素对应点的可能性越低。

代价函数的常用算法有:

  • AD代价 absolute difference 灰度值直接相减取绝对值。
  • BT代价 在AD代价的基础上考虑了采样误差
  • AD+Gradient
  • Cencus(与8邻域进行简单比较,进行异或运算,计算汉明距离)
  • NCC(对线性变化具有不变性),计算两个矩阵形成的向量归一化后的点积(夹角余弦值)
  • AD+Cencus(同时考虑光线的变化和噪声)
  • CNN对两个图像块进行卷积处理,归一化后点积输出similarity score

Mc-CNN流程

在这里插入图片描述

代价空间 cost volumn
设视差范围为d,则对于每个d=0,1,……,建立一个m*n的平面,平面上每个值对面左图每个点在这个d下的cost
代价空间和Sliding windows的关系:(51:50)

Box filtering 对每块的C直接进行均值滤波
Box filtering的assumption:当前块没点的disparity相等
Box filtering的缺点:对边界的响应很差,窗口很大的话效果很差,不具有保边性,窗口很小的话受噪声影响很大。

双边滤波Bilateral filter:综合引入颜色+空间距离,自适应权重
颜色差异大的权重小,颜色差异小的权重大,具有保边性。
窗口可以开大,匹配稳定.
在这里插入图片描述

Cross-based local stereo matching 自适应形状
对于给定的点,当临近的点与中心点像素差小于阈值时,区域延伸,得到十字臂

用积分图方式加速计算
在这里插入图片描述

Semi-Global Matching
能量函数E(D) 加入了平滑项
对邻域像素点差异较小值引入惩罚项p1,对邻域像素点差异较大值引入惩罚项p2
现用上述方法计算代价空间
再进行代价聚合过程:
计算各个方向上的路径代价Lr(p,d)
对各个方向加和进行代价聚合。
WinnerTakeAll获得所有代价:在代价空间中每个点选取该通道下最低代价聚合的Disparity值作为输出的Disparity

Disparity propagation(Patch Match)
对于很多场景,很多区域都可以近似用一个平面来建模
为了找到每个区域的平面参数,对每个像素赋予随机的平面参数(随机初始化),希望每个区域至少有一个像素的初始平面接近真实平面。然后通过传播算法把正确的平面参数传递给这个区域的其它像素。

视察优化/后处理
左右一致性检测(LRC)
(x1,y)向右匹配,得到(x2,y),再向左匹配得到(x21,y),如果|x21-x1|>T,则未通过一致性检测

The minimum/the second minimum cost

Speckle filter
为了移出噪声点,对视察图做一个联通区域提取(如果某相邻两个像素的视察值之差小于某个预先设定的阈值,则可以认为这两个像素属于同一个区域)

亚像素差值
对差值结果进行多项式差值
还有处理方法如中值滤波等。

DataSets

Midlebury Stereo 3.0
Kitti 2012/2015
ETH3D
Robust Vision challenge



这篇关于立体匹配算法的学习的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程