SGBM算法实现双目相机视差图计算
3星 · 超过75%的资源 需积分: 50 58 浏览量
更新于2024-09-07
收藏 1KB TXT 举报
计算机视觉视差图(SGBM算法)是一种广泛应用于双目视觉系统中的深度估计方法,它基于结构相似性(SAD)模板匹配原理,用于计算左右两幅图像之间的像素差异。在给出的C++代码片段中,主要展示了如何使用OpenCV库实现SGBM(Stereo Block Matching)算法来生成视差图。
首先,包括必要的头文件,如`#include <opencv2/opencv.hpp>`,引入OpenCV库的接口。`StereoBM`类是OpenCV提供的一个高效且可配置的单应性和深度估计器,适合于实时应用。
代码初始化了两个灰度图像,分别读取左右相机的图像文件"imgL.jpg"和"imgR.jpg"。然后定义了视差图变量`Mat disp`,以及一些关键参数,如最小视差(`mindisparity`)、视差范围(`ndisparities`)、模板窗口大小(`SADWindowSize`)等。这些参数的选择对最终结果有显著影响,例如模板窗口大小会影响匹配精度与速度。
接下来,创建了一个`cv::StereoBM`对象`bm`,并设置了上述参数。预滤波器大小(`setPreFilterSize`)、阈值(`setTextureThreshold`)、唯一性比率(`setUniquenessRatio`)和最大允许的相邻视差差(`setDisp12MaxDiff`)都是用来提高匹配性能和消除噪声的。
为了处理边缘和光照变化,代码使用`copyMakeBorder`函数在图像边缘添加了边界像素,这里使用了复制边界模式(`IPL_BORDER_REPLICATE`)。接着,调用`bm->compute`方法,输入左右图像,计算出视差图`disp`。由于原始视差值可能范围较大,通过`convertTo`函数将其转换为浮点型,并缩放以适应实际应用场景(这里是将像素值范围缩小到1/16,以便后续处理)。
最后,视差图进一步进行8位无符号整数(`CV_8UC1`)的归一化,确保值在0到255之间,便于显示和保存。通过`imwrite`函数将处理后的视差图保存为"results/BM.jpg"。
总结来说,这段代码演示了如何使用SGBM算法在计算机视觉中估计双目相机的视差图,展示了基本的图像读取、参数设置、计算过程以及结果的后处理步骤。这是一种简单但实用的方法,适用于需要快速获得相对深度信息的应用场景。
2022-07-15 上传
2023-08-09 上传
2022-09-24 上传
2021-09-30 上传
2021-09-28 上传
qq_34521859
- 粉丝: 8
- 资源: 15
最新资源
- Aspose资源包:转PDF无水印学习工具
- Go语言控制台输入输出操作教程
- 红外遥控报警器原理及应用详解下载
- 控制卷筒纸侧面位置的先进装置技术解析
- 易语言加解密例程源码详解与实践
- SpringMVC客户管理系统:Hibernate与Bootstrap集成实践
- 深入理解JavaScript Set与WeakSet的使用
- 深入解析接收存储及发送装置的广播技术方法
- zyString模块1.0源码公开-易语言编程利器
- Android记分板UI设计:SimpleScoreboard的简洁与高效
- 量子网格列设置存储组件:开源解决方案
- 全面技术源码合集:CcVita Php Check v1.1
- 中军创易语言抢购软件:付款功能解析
- Python手动实现图像滤波教程
- MATLAB源代码实现基于DFT的量子传输分析
- 开源程序Hukoch.exe:简化食谱管理与导入功能