在 opencv3 上进行视差映射的 cv2.StereoSGBM_create() 和 cv2.StereoBM_create() 函数有啥区别?

Posted

技术标签:

【中文标题】在 opencv3 上进行视差映射的 cv2.StereoSGBM_create() 和 cv2.StereoBM_create() 函数有啥区别?【英文标题】:What is the difference between cv2.StereoSGBM_create() and cv2.StereoBM_create() functions for disparity mapping on opencv3?在 opencv3 上进行视差映射的 cv2.StereoSGBM_create() 和 cv2.StereoBM_create() 函数有什么区别? 【发布时间】:2019-01-16 09:23:15 【问题描述】:

我正在尝试了解 opencv 的视差映射函数,我遇到了两种方法 cv2.StereoSGBM_create 和 cv2.StereoBM_create 我不太了解其中的区别。

还有,numDisparities 或 setSpeckleRange 等函数的属性是什么

【问题讨论】:

对于 SGBM,请参阅:Stereo Processing by Semi-Global Matching and Mutual Information。对于BM,你应该有一些信息和参考here。 @Catree 还有更多的视差映射功能吗? cv::cuda 中还有更多功能,概述如下:docs.opencv.org/3.4.1/d2/d6e/classcv_1_1StereoMatcher.html 【参考方案1】:

所有参数的定义在文档页面底部here

在块匹配或cv2.StereoBM_create() 中,通过比较每个“块”像素的绝对差之和 (SAD) 来计算视差。在半全局块匹配或cv2.StereoSGBM_create() 中,会在相邻块上施加类似的差异。这会创建更完整的视差图,但计算成本更高。

讨论'block matching'的论文

讨论'semi-global block matching'的论文

【讨论】:

以上是关于在 opencv3 上进行视差映射的 cv2.StereoSGBM_create() 和 cv2.StereoBM_create() 函数有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

移动 Safari 视差滚动不起作用

视差映射期间奇怪的分层效果

OpenGL核心之视差映射

Playing with OpenCV

Playing with OpenCV

Unity URP Shader 实现几种视差映射