立体匹配|Stereo Matching


立体匹配也称 视差估计双目深度估计

  • 输入:一对在统一时刻捕捉的,经过 极线校正 的左右图像 IlIr
  • 输出:参考图像(一般选为左图)每个像素对应的视差值对应的视差图d
  • 根据公式 z = b*f / d可获得深度图
    • b: 两相机光心距离
    • f: 相机光心到成像平面的焦距
    • d: 两相机的视差

[image:A80FEC97-D194-433C-8DA7-C4C0011926A8-1168-000045CA68B4D991/28E158B3-774D-40E8-ABDF-A3A9D0D967C7.png]


背景概念

对极几何

对极几何|Epipolar Geometry_double_ZZZ的博客-CSDN博客

视觉模型

  • 汇聚式[image:4D97B735-DFE9-426D-8838-4045190C3809-1168-000046035D0CF608/C795C128-B747-495C-894E-3AC51351DD66.png]

  • 平行式[image:7A2EDAEC-5F16-4CBC-B3D6-F3CA5A0EE224-1168-000046024ADA02A4/6636A6BC-0BD4-4462-BC55-A6395523F2E0.png]

平行式立体视觉模型中,两摄像机光轴平行,因此左右图像间对极线互相平行,且位于相同的图像平面上,因此视差矢量平行于图像的水平线,使得时差矢量退化为标量


基本流程

匹配代价计算 -> 代价聚合 -> 视差计算 -> 视差优化

匹配代价计算

  • 目的:通过匹配代价函数计算待 匹配像素候选像素 间的相关性,匹配代价越小说明相关性越大

在右图里寻找哪个像素对应左图中的这里,得到了视差,就可以根据焦距和光心距离计算到深度了

  • 细节:会将视察搜索的范围限定在Dmin~Dmax间,因此对于参考图像的每一个像素,用一个W*H*D的三维矩阵(DSI - Disparity Space Image)存储视差范围内每个像素的匹配代价
  • 算法
    • 摄影测量:灰度绝对值差 AD、灰度绝对值之和 SAD、归一化相关系数 NCC
    • CV:互信息 MI、Census变换 CT、Rank变换 RT、BT等
      [image:EC121661-4B60-4BB8-B9C8-DF6369D54885-1168-000046FC2702728C/5818297E-A449-4033-99C6-D31735883F2D.png]

代价聚合

  • 上一步计算出匹配代价的问题:只考虑了局部信息,通过两个像素邻域内一定大小窗口内的像素信息计算代价值,但这很容易受到噪声影响,当影像处于弱纹理或重复纹理区域(有意义信息很少,噪声影响很大的区域),代价值极有可能无法准确反映像素之间的相关性
  • 根本目的:考虑全局信息,对DSI进行优化,让优化过的代价值能准确的反映像素之间的相关性
  • 大致步骤:类似于 视差传播
    1. 信噪比高的区域初始匹配效果很好,原始代价就能很好的反映相关性,可以更准确的得到最优视差值
    2. 通过建立邻接像素之间的关系,每个像素在某个视差下的新代价值会根据相邻像素在统一视差或附近视差下的代价值重新计算(如相邻像素应该具有连续的视差值)
    3. 传播至信噪比低、匹配效果不太好的区域
    4. 最终得到新的矩阵S
  • 常用方法:扫描线发、动态规划法、SGM算法中的路径聚合法
    [image:495077BD-ABE7-4091-8F3A-AD9A0DF2926E-1168-00004F35AA05454E/AA74D9D2-BD2B-44F5-AB5C-31ED189683A4.png]

注:这一步极为关键,直接决定了算法的准确性

视差计算

使用赢家通吃算法(WTA, Winner-Takes-All)对代价矩阵S选择最小代价值对应的视差值作为最佳视差

再次注:因为这部没什么本质性的操作,因此要求聚合效果非常好

在这里插入图片描述

视差优化

  • 目的:对上一步得到的视差图进行进一步优化,改善视差图的质量,主要包括 剔除错误视差适当平滑子像素精度优化
  • 算法
    • 剔除因为遮挡和噪声而导致的错误视差:左右一致性检查算法(Left-Right Check)
    • 剔除孤立异常点:剔除小连通区域算法
    • 对视差图进行平滑:中值滤波(Median Filter)、双边滤波等平滑算法(Bilateral Filter)
    • 其他提高视差图质量的方法:鲁棒平面拟合(Robust Plane Fitting)、亮度一致性约束(Intensity Consistent)、局部一致性约束(Locally Consistent)等
  • 子像素精度优化:由于WTA算法得到的视差值是整像素精度,可以对其进一步子像素细化
    • 一元二次曲线拟合算法:通过最优视差下的代价以及左右两个视差下的代价值拟合一条一元二次曲线,取二次曲线的极小值点代表的视差值作为精细化后的子像素视差值
      -[image:FF525B64-7A4E-4501-9515-D6ACE73BEAFD-1168-0000500F7F812D2A/F2D7DB9A-DBE2-47B6-9105-7E35E653DD55.png]

References

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在Matlab中,立体匹配是一种用于处理立体图像的技术,它通过比较两幅图像中的像素来确定它们之间的对应关系。立体匹配的目的是找到在两幅图像中具有相同视差(即在图像中的位置差异)的像素对。 在立体匹配中,通常使用的方法是计算两个像素窗口之间的差异,例如通过计算窗口中像素之间的差的平方和。然后,对于每个像素,选择与之具有最小差异的像素作为对应像素。 立体匹配的过程可以分为以下几个步骤: 1. 加载两幅立体图像,并对其进行预处理,例如去除噪声、调整图像亮度和对比度等。 2. 选择一个像素窗口大小,并在两幅图像中滑动这个窗口,计算窗口中像素之间的差异。 3. 对于每个像素,选择与之具有最小差异的像素作为对应像素,并将其保存为视差图。 4. 可以使用不同的算法来进行立体匹配,例如基于区域的方法、基于特征的方法、基于能量优化的方法等。 5. 最后,可以根据视差图生成一个三维深度图,以显示立体图像中物体的深度信息。 需要注意的是,在进行立体匹配之前,需要满足一些假设条件,例如两个相机的焦距相同、相机水平对齐在相同的高度等。这些假设可以简化立体匹配的过程,但在真实的立体图像中可能并不适用。 总的来说,立体匹配是一种用于处理立体图像的技术,它通过比较两幅图像中的像素确定它们之间的对应关系。在Matlab中,可以使用不同的算法和方法来进行立体匹配,并生成视差图和深度图。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

doubleZ0108

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值