在 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() 函数有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章