sgbm参数设置

本文介绍了SGBM(StereoSGBM)算法的基本原理和关键参数,包括minDisparity、numDisparities、blockSize、P1、P2等,并提供了相关学习资源和opencv中SGBM算法参数的数值选取建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转自
https://blog.youkuaiyun.com/zhubaohua_bupt/article/details/51866567
https://blog.youkuaiyun.com/cxgincsu/article/details/74451940
https://blog.youkuaiyun.com/u010369450/article/details/78839345


SGBM相关学习链接:

1,原始文献:Heiko Hirschmuller. Stereo processing by semiglobal matching and mutual information.Pattern Analysis and Machine Intelligence, IEEE Transactions on, 30(2):328–341, 2008.

2,cv::StereoSGBM Class Reference

3,opencvSGBM版半全局立体匹配算法的研究


SGBM的基本原理

SGBM的基本步骤涉及:预处理、代价计算、动态规划以及后处理


StereoSGBM的原型


 
 
 
  1. static Ptr<StereoSGBM> cv::StereoSGBM::create
  2. (
  3. int minDisparity = 0,
  4. int numDisparities = 16,
  5. int blockSize = 3,
  6. int P1 = 0,
  7. int P2 = 0,
  8. int disp12MaxDiff = 0,
  9. int preFilterCap = 0,
<think>好的,我现在需要介绍SGBM算法参数设置。首先,我应该回忆一下SGBM的基本概念,它是立体匹配算法中的一种,属于半全局块匹配算法,是OpenCV中实现的。接下来,用户可能想知道参数的作用及如何调整。 首先,SGBM的主要参数有哪些?我记得有minDisparity、numDisparities、blockSize、P1、P2、disp12MaxDiff、preFilterCap、uniquenessRatio、speckleWindowSize、speckleRange,还有mode等。每个参数的意义和影响需要解释清楚。 比如,minDisparity是最小视差,通常设为0,但如果有先验知识可以调整。numDisparities是视差范围,必须是16的倍数。blockSize是匹配块的大小,影响平滑度和细节。P1和P2控制平滑性惩罚,P2应大于P1。disp12MaxDiff是左右视差检查的阈值。preFilterCap预处理滤波器的截断值,uniquenessRatio唯一性比率,speckleWindowSize和speckleRange用于后处理过滤斑点。mode可以选择不同的模式,如SGBM或HH。 需要分点说明每个参数,可能还要给出典型值和调整建议。例如,numDisparities太大增加计算量,太小可能丢失远处物体。blockSize过大会模糊边缘,过小噪声多。P1和P2影响视差图的平滑度,需要根据图像纹理调整。 还要注意参数之间的相互影响,比如调整numDisparities可能需要调整其他参数。另外,可能需要给出一个示例参数设置,帮助用户理解如何组合这些参数。 需要确保用中文,结构清晰,术语正确,使用LaTeX公式时注意行内和独立格式。比如,视差计算中的公式可能需要用$$...$$,但简单的变量用$...$。例如,匹配代价计算中的块匹配可能用$blockSize \times blockSize$。 还要检查是否有遗漏的重要参数,或者是否需要解释算法流程中的参数作用。例如,预处理步骤中的preFilterCap,或者后处理中的去噪参数。此外,可能需要注意版本差异,比如OpenCV中不同版本的参数是否有变化。 最后,总结参数调节的一般步骤,帮助用户系统地调整参数,比如先确定视差范围,再调整块大小,然后处理平滑度和噪声等。同时提醒用户根据实际场景进行测试,因为不同场景的最佳参数可能不同。</think>SGBM(Semi-Global Block Matching)算法是立体视觉中常用的视差图计算算法,其参数设置直接影响匹配效果和计算效率。以下是对关键参数的系统介绍及设置建议: --- ### **1. 基础参数** #### **(1) `minDisparity`(最小视差)** - **作用**:定义搜索视差的最小值,通常设为$0$(左图像素在右图相同位置开始搜索)。 - **调整建议**:若场景中最近物体视差已知,可适当调整以缩小搜索范围。 #### **(2) `numDisparities`(视差范围)** - **作用**:定义最大视差值与最小视差值的差,需为$16$的整数倍,即$numDisparities = 16 \times k$。 - **公式**:视差搜索范围 $[minDisparity, minDisparity + numDisparities)$。 - **调整建议**:根据场景深度调整,值越大计算量越高。典型值:$64$($k=4$)或$128$($k=8$)。 #### **(3) `blockSize`(块大小)** - **作用**:匹配时使用的局部窗口大小(奇数),影响平滑度和细节保留。 - **公式**:代价计算基于$blockSize \times blockSize$窗口的像素差异。 - **调整建议**:小值(如$3$)保留细节但噪声多;大值(如$11$)平滑但可能模糊边缘。 --- ### **2. 惩罚参数** #### **(1) `P1`, `P2`(平滑性惩罚项)** - **作用**:控制视差变化的平滑性,$P2 > P1$。 - `P1`:惩罚相邻像素视差变化$1$的代价。 - `P2`:惩罚视差变化超过$1$的代价。 - **公式**:$$P1 = \alpha \cdot blockSize^2, \quad P2 = \beta \cdot blockSize^2$$ - **调整建议**:默认$P1=8 \cdot blockSize^2$, $P2=32 \cdot blockSize^2$,纹理复杂场景可增大$P2$。 #### **(2) `uniquenessRatio`(唯一性比率)** - **作用**:判断匹配唯一性的阈值,抑制模糊匹配。 - **公式**:若最佳匹配代价与次佳匹配代价的比率小于$(1 + uniquenessRatio/100)$,则视差有效。 - **调整建议**:典型值$5-15$,值越大匹配越严格。 --- ### **3. 后处理参数** #### **(1) `speckleWindowSize`(斑点滤波窗口)** - **作用**:滤除小于此窗口尺寸的孤立视差异常区域。 - **调整建议**:设为$100-200$,过大可能误删有效区域。 #### **(2) `speckleRange`(斑点视差范围)** - **作用**:定义同一连通区域内视差的最大允许变化。 - **调整建议**:通常设为$1$或$2$,严格过滤噪声。 #### **(3) `disp12MaxDiff`(左右一致性检查阈值)** - **作用**:左右视差图一致性检查的最大允许差异。 - **调整建议**:典型值$0$(严格)或$1$,过大可能保留错误匹配。 --- ### **4. 其他参数** #### **(1) `preFilterCap`(预处理截断值)** - **作用**:预处理阶段像素值截断阈值,增强鲁棒性。 - **调整建议**:典型值$31$或$63$,光照变化大时增大。 #### **(2) `mode`(算法模式)** - **选项**:`cv2.STEREO_SGBM_MODE_SGBM`(默认)或`cv2.STEREO_SGBM_MODE_HH`(全分辨率,速度慢)。 - **建议**:默认模式适用于实时性要求,HH模式精度更高。 --- ### **示例参数配置(OpenCV-Python)** ```python import cv2 stereo = cv2.StereoSGBM_create( minDisparity=0, numDisparities=64, # 16*4 blockSize=11, P1=8*11*11, P2=32*11*11, disp12MaxDiff=1, uniquenessRatio=10, speckleWindowSize=100, speckleRange=1, preFilterCap=63, mode=cv2.STEREO_SGBM_MODE_SGBM ) ``` --- ### **调试建议** 1. **优先固定**:先确定`numDisparities`和`blockSize`,再调整平滑性参数`P1/P2`。 2. **后处理优化**:通过`speckleWindowSize`和`speckleRange`去除噪声。 3. **平衡速度与精度**:`mode`和`blockSize`显著影响计算速度,需权衡场景需求。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值