0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

深入探讨SGBM参数影响效果

3D视觉工坊 来源:3DCV 2023-06-28 09:29 次阅读

什么是SGBM

SGBM(Semi-Global Block Matching)是一种用于计算双目视觉中视差(disparity)的半全局匹配算法,在OpenCV中的实现为semi-global block matching(SGBM)。它是基于全局匹配算法和局部匹配算法的优缺点,提出了一种折中的方法,既能保证视差图的质量,又能降低计算复杂度。

SGBM的原理

SGBM的原理可以分为以下几个步骤:

预处理:使用水平Sobel算子对左右图像进行边缘检测,得到梯度图像。

匹配代价计算:对于每个像素,计算其在不同视差下与对应像素的匹配代价,通常使用绝对差或平方差作为代价函数。

能量函数最小化:对于每个像素,定义一个能量函数,包括数据项和平滑项。数据项表示匹配代价,平滑项表示相邻像素的视差连续性。使用动态规划的方法,沿着多个方向(通常为8个或16个)计算累积代价,并求取最小值作为最终代价。

视差图生成:对于每个像素,根据最终代价选择最佳视差,并生成视差图。

视差图后处理:对于视差图中的异常值或空洞,使用一些后处理方法进行修复或填充,例如中值滤波、WLS滤波等。

SGBM的参数

SGBM的参数有以下几个:

minDisparity:最小视差值,默认为0。

numDisparities:视差范围,默认为16。必须是16的整数倍。

blockSize:匹配块大小,默认为3。必须是奇数且大于1。

P1:控制视差平滑度的第一个参数,默认为8blockSizeblockSize。P1越大,越倾向于生成连续的视差图。

P2:控制视差平滑度的第二个参数,默认为32blockSizeblockSize。P2越大,越倾向于消除小的视差变化。P2必须大于P1。

disp12MaxDiff:左右一致性检查时允许的最大视差差异,默认为-1,表示不进行检查。

preFilterCap:预处理时截断梯度值的上限,默认为63。

uniquenessRatio:唯一性检查时的阈值,默认为10。表示最佳视差值与次佳视差值之间的比例要大于该阈值才被认为是有效的。

speckleWindowSize:消除噪声斑点时考虑的窗口大小,默认为0,表示不进行消除。

speckleRange:消除噪声斑点时考虑的最大视差变化,默认为0,表示不进行消除。

mode:SGBM算法选择模式,默认为StereoSGBM::MODE_SGBM。可选值有StereoSGBM::MODE_SGBM_3WAY(速度快)、StereoSGBM::MODE_HH4(速度慢)、StereoSGBM::MODE_SGBM(速度中等)、StereoSGBM::MODE_HH(速度慢)。

SGBM的参数变化

下面通过调整每个参数来观察其影响效果:初始值设置:

minDisparity=0
numDisparities=16
blockSize=3
P1=8*blockSize*blockSize
P2=32*blockSize*blockSize
disp12MaxDiff=-1
preFilterCap=63
uniquenessRatio=10
speckleWindowSize=0
speckleRange=0

numDisparities:视差数量越多,能够获取到更多详细的深度信息。但是,增加视差数量也会增加计算量,可能会导致较慢的运行速度以及噪声增多,且增大numDisparities会扩大视差范围,即视差图中可以估计的深度范围增大。如果增大的视差范围超过了场景中实际的深度范围,就会出现黑色区域。黑色区域表示无法进行有效的匹配或估计深度。

0d576484-153f-11ee-962d-dac502259ad0.png

minDisparity:最小视差越大,物体离相机近的程度就会变小。如果提高最小视差,则可能会使视差图被高估,因为物体不可能有大于最小视差的负的视差值。而如果最小视差过低,则可能会受到噪声的影响,产生错误的视差值。

0db0e7de-153f-11ee-962d-dac502259ad0.png

blockSize:所选的窗口大小越大,所包含的像素就越多,从而产生更稳定,但粗略的视差图。减小块大小,可以获得反之,一些锐利但可能嘈杂(即不确定)的视差边缘。

0e1e21d2-153f-11ee-962d-dac502259ad0.png

P1 和 P2:两种参数都是控制视差变化规则的,从而使结果更平滑,增加这些值会使抗噪声能力更强但同时会失去保留锐度的细节。如果P1和P2参数值过小,则会使视差图中出现许多噪声或未对齐的图像。如果参数值太高,将导致平滑的结果,丢失更多的细节和锐度。

0e567582-153f-11ee-962d-dac502259ad0.png

disp12MaxDiff:这个参数用于限制左右视图之间的最大视差数量差异。增加这个值可能会导致插值和未对齐的像素点在图像中显示。但太小的值,则视差较光滑,缺少细节特征。

0ea62276-153f-11ee-962d-dac502259ad0.png

uniquenessRatio:这个参数是用来控制像素值的唯一性,如果唯一性比例越高,则得到的视差图的噪声和未对齐的像素会越小。但如果唯一性比例太高,则有可能会失去细节特征。

0edc63d6-153f-11ee-962d-dac502259ad0.png

speckleWindowSize:这个参数被用来滤除孤立噪点或者离群值,如果窗口太小,则没有过滤到足够的噪声点而窗口太大则会损失一些细节特征。

0f38ea02-153f-11ee-962d-dac502259ad0.png

speckleRange:这个参数规定一个视差变化的阈值,如果发现视差变化超出了这个阈值,则这个像素应该是一些无用的孤立像素。适当调整该参数可以使其过滤掉孤立的杂点和噪声。

0f8ea7da-153f-11ee-962d-dac502259ad0.png

preFilterCap:该参数控制了像素的最大值。如果已经将值限制在负值的范围内,那么它必须和像素值相比较,过滤掉那些值过大的像素点。

0fb931bc-153f-11ee-962d-dac502259ad0.png

mode:SGBM算法的解释模式,分别为SGBM,HHSGBM和SGBM_3WAY。这些模式包含了不同的参数设定,也会影响到视差图的效果。

SGBM:这是默认的解释模式,也是最常用的模式。它代表了Semi-Global Block Matching (SGBM) 算法,该算法利用全局视差的一致性来获得更准确的视差图。

HHSGBM:这代表了H.Hirschmüller的快速近似SGBM算法(H.Hirschmüller's Hierarchical Semi-Global Block Matching),是一种更快速的算法。它在速度上相对于标准SGBM算法有所优化,但可能在某些情况下会牺牲一些准确性。

SGBM_3WAY:这是一种三通道SGBM算法,它将输入图像的三个通道(BGR)分别作为独立的视差图像进行处理。然后,将三个视差图像中的像素最小化,从而得到最终的视差图。这种方法可以改善处理彩色图像时的准确性。

0ffc8052-153f-11ee-962d-dac502259ad0.png —END—





审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 滤波器
    +关注

    关注

    161

    文章

    7799

    浏览量

    178012
  • OpenCV
    +关注

    关注

    31

    文章

    635

    浏览量

    41340

原文标题:SGBM你不知道的秘密:深入探讨SGBM参数影响效果

文章出处:【微信号:3D视觉工坊,微信公众号:3D视觉工坊】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    深入探讨电容的种类和作用

    深入探讨电容的种类和作用     你知道显卡为什么会花屏吗?
    发表于 11-27 15:00 1.5w次阅读

    深入探讨DFM在PCB设计中的注意要点

    深入探讨DFM在PCB设计中的注意要点,大家说自己的经验,交流交流,学习学习。
    发表于 10-24 15:15

    stm32 uart硬件实现及深入探讨(单片机通信学习连载4)

    大家上午好!今天邀请了张角老师,来为大家深入讲解stm32 uart,视频为一个系列,本次为第四期内容,请持续关注,会持续进行更新!前期回顾:第三期:stm32 uart硬件实现及深入探讨(单片机
    发表于 06-29 11:10

    【原创】STM32 UART通信深入探讨

    作者:张角老师(张飞实战电子高级工程师)STM32 UART通信深入探讨在单片机开发过程中,我们常用的通信协议主要有UART,SPI,I2C这几种,是吧。这三种通信协议,本质上都是串口通信,也就是说
    发表于 07-15 11:13

    【视频】 stm32 uart硬件实现及深入探讨3

    大家上午好!今天来为大家深入讲解STM32 uart,视频为一个系列,请持续关注,会持续进行更新!有问题留言交流!上期回顾:stm32 uart硬件实现及深入探讨一键分析设计隐患,首款国产PCB
    发表于 09-17 09:44

    【视频】 stm32 uart硬件实现及深入探讨4

    大家上午好!今天来为大家深入讲解STM32 uart,视频为一个系列,请持续关注,会持续进行更新!有问题留言交流!上期回顾:stm32 uart硬件实现及深入探讨3一键分析设计隐患,首款国产PCB
    发表于 09-22 09:24

    OV7620_OV6620图像采集之深入探讨

    OV7620_OV6620图像采集之深入探讨
    发表于 09-25 16:13 189次下载

    基于OpenCV3.0的BM、SGBM和GC算法对比

    基于OpenCV3.0,对BM、SGBM和GC算法进行了对比测试研究。由于SGBM算法视差效果好速度快的特点,常常被广泛应用和改进,本文针对SGBM算法主要
    的头像 发表于 06-12 15:10 2.1w次阅读

    深入探讨人工智能的实际应用

    导读:本文通过案例分门别类地深入探讨人工智能的实际应用。案例甚多,此处所列举的仅是九牛一毛。本该按行业或业务对这些案例进行分类,但相反我选择按在行业或业务中最可能应用的顺序来分类。
    的头像 发表于 11-11 10:33 2724次阅读
    <b class='flag-5'>深入探讨</b>人工智能的实际应用

    深入探讨超声波风速风向仪

    深入探讨超声波风速风向仪
    发表于 10-27 17:25 15次下载

    深入探讨交通安全统筹信息系统

    深入探讨交通安全统筹信息系统
    发表于 10-29 18:07 0次下载

    深入探讨医疗应用的未来发展趋势

    深入探讨医疗应用的未来发展趋势
    发表于 11-03 08:04 1次下载
    <b class='flag-5'>深入探讨</b>医疗应用的未来发展趋势

    深入探讨RF信号链

    在我们深入探讨之前,我们先来了解RF的实际含义。乍一看,这似乎是一个简单的问题。我们都知道,RF表示射频,此术语的通用定义规定了特定的频率范围:MHz至GHz电磁频谱。
    的头像 发表于 01-03 16:43 1027次阅读

    深入探讨软件定义架构及其意义

    在上期文章中,我们了解了现代GNSS模拟中的软件定义架构,并与传统架构进行了对比,本期文章中我们将继续深入探讨软件定义架构及其意义。
    的头像 发表于 02-08 10:40 724次阅读
    <b class='flag-5'>深入探讨</b>软件定义架构及其意义

    深入探讨Linux系统中的动态链接库机制

    本文将深入探讨Linux系统中的动态链接库机制,这其中包括但不限于全局符号介入、延迟绑定以及地址无关代码等内容。 引言 在软件开发过程中,动态库链接问题时常出现,这可能导致符号冲突,从而引起程序运行
    的头像 发表于 12-18 10:06 90次阅读
    <b class='flag-5'>深入探讨</b>Linux系统中的动态链接库机制