SGBM算法
时间: 2025-04-20 16:36:57 浏览: 42
### SGBD Semi-Global Block Matching (SGBM) 算法介绍
Semi-Global Block Matching (SGBM) 是一种用于立体视觉中的密集匹配算法,旨在通过比较来自两个不同视角的图像来计算视差图。该方法基于全局优化策略,在保持局部特征的同时考虑整个图像区域的信息。
#### 原理概述
SGBM 方法的核心在于构建能量函数并对其进行最小化处理。具体来说,对于每一对像素点 \( p \in I_L, q \in I_R\) ,其中\(I_L\) 和 \(I_R\) 表示左、右相机拍摄到的两幅图片,则定义如下形式的能量项:
\[ E(d)=E_{data}(d)+λ_1·E_{smoothness}(d)+ λ_2·E_{uniqueness}(d)\]
这里,
- 数据一致性成本 \(E_{data}\),衡量的是当假设某一点具有特定视差 d 时所造成的亮度差异;
- 平滑度惩罚项 \(E_{smoothness}\),用来抑制不合理的突变情况发生;
- 单一性约束 \(E_{uniqueness}\), 防止同一位置存在多个可能解的情况出现;
参数 \(λ_1\) 和 \(λ_2\) 控制着各项之间的相对重要程度[^1]。
#### 实现方式
为了高效求解上述最优化问题,通常采用动态规划的方法沿着八个方向分别扫描整张图像,并累积路径上的代价值形成最终的成本矩阵 C(x,y,d) 。之后再利用亚像素插值技术获取更加精确的结果。
```cpp
// OpenCV 中实现 SGBM 的简单例子
cv::Ptr<cv::StereoSGBM> sgbm = cv:: StereoSGBM ::create(
minDisparity,
numDisparities,
blockSize,
P1,
P2,
disp12MaxDiff,
preFilterCap,
uniquenessRatio,
speckleWindowSize,
speckleRange);
sgbm->compute(imgL, imgR, disparity_SGBM);
```
这段代码展示了如何使用OpenCV库创建一个 `StereoSGBM` 对象来进行视差估计操作。
#### 应用场景
SGBM 被广泛应用于自动驾驶汽车环境感知系统中,帮助车辆理解周围三维空间结构;同时也适用于机器人导航领域内的障碍物检测任务以及增强现实设备里的深度信息采集等方面的工作。
阅读全文
相关推荐


















