双目立体匹配算法SGM步骤拆解

这篇具有很好参考价值的文章主要介绍了双目立体匹配算法SGM步骤拆解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        立体匹配是立体视觉研究中的关键部分,其目标是在两个或多个视点中匹配相应像素点,计算视差。双目摄像头类似人眼的工作原理,对同一目标可以形成视差,用来感知三维世界,由于成本远低于激光雷达,因此在自动驾驶领域被广泛研究。

        SGM(semi-global matching)是一种用于计算双目视觉中视差的半全局匹配算法。在OpenCV中的实现为semi-global block matching(SGBM)。

        SGBM的思路是:通过选取每个像素点的disparity,组成一个disparity map,设置一个和disparity map相关的全局能量函数,使这个能量函数最小化,以达到求解每个像素最优disparity的目的。

        本文梳理了SGM算法的各步骤的实现细节,帮助快速理解算法中每一步到底在做什么。已知,左右两张矫正过的双目相机图片。left_img, right_img。

1,图像前处理,Census变换

        left_img, right_img按(5*5)窗口,stride=1滑动,得到各自Census变换的二维矩阵。其中,原图像的左右各补pad=2,维持滑动之后二维数组宽高不变。

        census变换是指,窗口所有数据依次和其中心点数据相比,大于为1,小于等于为0,窗口按照左右,上下的顺序,组成一个5*5=25长度的二进制序列,即为该窗口的census变换数。

        汉明距离是指,两个二进制数异或操作,即不同的bit对应个数。

census变换与汉明距离示意图:

双目立体匹配算法SGM步骤拆解

2,代价计算

        以左图为标准,计算右图和左图同样坐标位置的census值的汉明(hamming)距离。设置视差范围d,得到一个h,w,d的三维矩阵cost。

        视差范围d在第三维,这样对应:逐行遍历,假设P的二维坐标为(x,y),点P的d_range代价计算为:

cost[x,y,0]     =hanming_dis(L[x,y], R[x,y])

cost[x,y,1]     =hanming_dis(L[x,y], R[x-1,y])

cost[x,y,2]     =hanming_dis(L[x,y], R[x-2,y])

cost[x,y,d-1]  =hanming_dis(L[x,y], R[x-(d-1),y])

双目立体匹配算法SGM步骤拆解

3, 代价聚合

        如果没有代价聚合,得到的视差图有很多噪声,所以,分别计算每个像素不同角度的代价值,然后加权综合考虑,会得到很大的优化。经典聚合策略有:4路径聚合,8路径聚合,16路径聚合。

        下图左边是按不同方向聚合的示意图,右图是以左→右聚合为例,像素P在d视差上的代价计算示意图。 

双目立体匹配算法SGM步骤拆解  双目立体匹配算法SGM步骤拆解

        这一步需要根据选择几路径,来更新每个路径的代价矩阵。

左右的话,P-r就是同一行的前一个像素,或者同一行的后一个像素

上下的话,P-r就是同一列的上一行像素,或者同一列的下一行像素

p1,p2是超参数;  C(p,d)表示p像素,d视差的代价,        

双目立体匹配算法SGM步骤拆解

        如果是4路径聚合的话,就是左右,右左,上下,下上的四个路径的代价矩阵对应坐标位置值相加,就是最终聚合的代价矩阵。 

4, 视差计算

        采用WTA(Winner Takes All)赢家通吃算法。就是每个像素位置在所有视差范围内找到一个代价值最小值,其所在的index就是该像素的最终视差,是一个二维矩阵。

双目立体匹配算法SGM步骤拆解

 

5,视差优化

优化目的:

  • 提高精度
  •  剔除错误
  •  弱纹理区优化
  • 填补空洞

提高精度:前面的视差计算步骤中,我们选择最小代价值对应的视差值,它是一个整数值(整数值我们才能有离散化的视差空间W H D WHDWHD),即整像素级精度,而实际应用中整像素精度基本无法满足需求,必须优化到子像素精度才有意义。

剔除错误:即剔除错误的视差值,比如a像素本应和b像素是同名点,而结果却是a像素和c像素是同名点,这就是错误的视差值。造成错误匹配的原因有遮挡、弱纹理等,所谓错误是永恒的,完美是不存在的。

弱纹理区优化:弱纹理区域是所有立体匹配都会面对的难题,极端情况下,一块白墙,怎么找同名点?SGM提出的是一种基于图像分割+平面拟合的处理弱纹理的方法。

填补空洞:剔除错误匹配后,被剔除的像素会造成无效值空洞,如何填补使视差图更加完整也是优化所研究的内容。

优化手段

子像素拟合,一致性检查,唯一性约束,剔除小连通区,中值滤波

参考:(博文很细致,有具体代码实现)

【码上实战】【立体匹配系列】经典SGM:(1)框架与类设计_李迎松~的博客-CSDN博客_sgm立体匹配文章来源地址https://www.toymoban.com/news/detail-465300.html

到了这里,关于双目立体匹配算法SGM步骤拆解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用opencv做双目测距(相机标定+立体匹配+测距)

    最近在做双目测距,觉得有必要记录点东西,所以我的第一篇博客就这么诞生啦~ 双目测距属于立体视觉这一块,我觉得应该有很多人踩过这个坑了,但网上的资料依旧是云里雾里的,要么是理论讲一大堆,最后发现还不知道怎么做,要么就是直接代码一贴,让你懵逼。 所以

    2024年01月20日
    浏览(38)
  • 双目立体视觉(一) 基本原理和步骤

    目录 一、双目立体视觉系统的四个基本步骤 二、各步骤原理 1、相机标定 2、立体校正 3、立体匹配 相机标定 主要包含两部分内容: 单相机的内参标定和双目相机的外参标定,前者可以获得每个相机的焦距、光心、畸变系数等参数,后者可以获得双目相机之间的相机坐标系的

    2024年02月14日
    浏览(44)
  • 双目立体视觉:SAD算法

    SAD(Sum of absolute differences)是一种图像匹配算法。基本思想:差的绝对值之和。此算法常用于图像块匹配,将每个像素对应数值之差的绝对值求和,据此评估两个图像块的相似度。该算法快速、但并不精确,通常用于多级处理的初步筛选。 常见的立体匹配算法主要包括以下四步

    2024年02月06日
    浏览(55)
  • 双目立体匹配中的极线约束(Epipolar Constraint),基础矩阵(Fundamental Matrix),本质矩阵(Essential Matrix),对极几何(2D-2D)

    考虑一个SLAM中一个常见的问题:如果两个相机在不同位置拍摄同一个物体,或者一个运动的相机在不同时刻拍摄同一物体,我们有理由相信两张图片中各点存在着某种几何关系,这种关系可以用对极几何来描述。对极几何描述了两帧图像中各像素的射影关系(或者说是各匹配

    2024年02月05日
    浏览(41)
  • 双目立体标定与极线校正【双目立体视觉几何】

       在这篇博文中,我们来了解一下立体标定的过程。双目相机各自经过相机标定后,该如何把两个相机统一起来,获得物体三维信息呢?    那么在双目立体视觉中,通过把左右相机平面旋转到一个平面内,且行对齐,旋转后的左右相机平面具有相同的焦距f,且具有相同

    2024年02月10日
    浏览(57)
  • 基于MVS的三维重建算法学习笔记(三)— 立体匹配概述

    本人书写本系列博客目的是为了记录我学习三维重建领域相关知识的过程和心得,不涉及任何商业意图,欢迎互相交流,批评指正。 在之前的博客中简单介绍过立体匹配,它是MVS稠密重建中的重要环节,而在这篇博客中,将详细的介绍立体匹配的相关概念,其中详细的过程和

    2024年02月11日
    浏览(45)
  • 双目立体视觉空间坐标精度分析

    参考链接:https://zhuanlan.zhihu.com/p/362718946 本文主要参考链接博主的理论推导,并按照自己的理解作分析和修正 双目立体视觉系统的精度由那些因素决定? X/Y/Z三个方向的精度都是一样的吗?如果不是一样,哪个方向精度更好呢? 最常见的情况下,双目立体视觉的最终输出是

    2024年02月10日
    浏览(38)
  • 计算机视觉之三维重建(5)---双目立体视觉

     如下图即是一个平行视图。特点:(1) 两个平面平行。 (2) 基线平行于图像平面,极点 e e e 和 e ′ e\\\' e ′ 位于无穷远处。  1. 对于基础矩阵我们有另一个表达式: F = e ′ × K ′ R K − 1 F=e\\\'×K\\\'RK^{−1} F = e ′ × K ′ R K − 1 ,推导过程如下所示。  2. 在平行视图情况下,极点

    2024年04月12日
    浏览(50)
  • ZYNQ ARM+FPGA双目立体视觉控制器设计与实现(一)

    通过 ZYNQ 板卡实现 FPGA+ARM 架构的双目立体视觉系统 本设计采用实验室自主开发的 Zynq-7020 板卡,提出了基于 FPGA+ARM 架构的双 目立体视觉的软硬件系统设计方案。根据对系统软硬件功能划分, PL(FPGA) 端主要实现 了双目摄像头图像的采集存储和 HDMI 显示, PS(ARM) 端主要实现了

    2024年02月10日
    浏览(53)
  • 使用python-opencv对双目摄像头进行立体视觉图像矫正,去畸变

            1、一张棋盘图         可以直接从opencv官方github下载,这是一个拥有10*7个格子的棋盘,共有 9*6个角点,每个格子24mm ,本文所使用的就是这一个棋盘。你需要将它打印在A4纸上用于后续使用。(也可以根据官方教程自行设置棋盘大小OpenCV: Create calibration pattern)

    2024年02月10日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包