gpt4 book ai didi

python-3.x - 什么是 OpenCV 中实现的立体 BM 和 SGBM 算法中的散斑

转载 作者:行者123 更新时间:2023-12-02 16:36:56 28 4
gpt4 key购买 nike

在应用 OpenCV 中实现的立体 BM 和 SGBM 算法时,我遇到了“散斑噪声”的概念,它由散斑滤波器过滤,由其“speckleWindowSize”和“speckleRange 参数”表征 => 参见 openCV 的文档 link to OpenCV doc

首先,什么是 Blob 噪声,是什么原因造成的?

其次,在上面的链接中,您可以找到以下定义(它们并没有真正解释任何东西,只是给出了似乎无处可寻的范围):

“speckleWindowSize:平滑视差区域的最大尺寸,以考虑其噪声散斑并使其无效。将其设置为 0 以禁用散斑过滤。否则,将其设置在 50-200 范围内的某个位置。”

“speckleRange : 每个连通分量内的最大视差变化。如果你做散斑过滤,将参数设置为正值,它会隐式乘以 16。通常,1 或 2 就足够了。”

而 Gary Bradski 和 Adrian Kaehler 着名的“Learning OpenCV”一书为 speckleWindowSize 提供了完全不同的范围:

“基于 block 的匹配在对象边界附近存在问题,因为匹配窗口在一侧捕捉前景,在另一侧捕捉背景。这会导致局部区域的大小差异,我们称之为散斑。为了防止这些边界匹配时,我们可以通过设置 speckleWindowSize 在散斑窗口(大小范围从 5×5 到 21×21)上设置散斑检测器,对于 9×9 窗口,默认设置为 9。在散斑窗口内,只要检测到的最小和最大差异在 speckleRange 范围内,就允许匹配(默认范围设置为 4)。”

通过测试,似乎我可以有效地达到 200 个窗口大小,但如果以像素表示,那不是一个巨大的窗口吗?

此外,上面的文字解释了 Blob 是什么。据我了解,我们只是有小的背景差异值和大的前景值,这正是应该的......?因此,我不明白为什么它被认为是噪音以及为什么我们应该过滤它?

任何帮助,将不胜感激,

谢谢你。

最佳答案

在使用任何提供的视差算法时,如果应用后过滤,可能会获得更好的结果。立体图像视差图的典型问题区域为 对象边缘 , 阴影区域 , 纹理区域 来自视差图的计算方式。
您可以查看this tutorial其中一种类型的后过滤应用于 BM 视差算法。
“Learning OpenCV”是一本很棒的书,您从中引用的内容可以清楚地回答您的问题。
这会导致我们称之为散斑的大小差异的局部区域。
Example disparity map without filtering and with it
我从 the question at answers.opencv.org 拍摄了一张图片.
散斑 是一个统计差异之间存在巨大差异的区域,应被视为噪声(并已过滤) . Blob 很可能出现在问题区域。
算法的散斑相关参数手动设置的原因是该参数在不同的场景和设置之间会有很大差异。因此,speckleWindowSize 没有一个最优选择。和 speckleRange以满足任何开发人员的要求。您可以使用靠近相机的大物体(如图像上)或远离相机且靠近背景的小物体(鸟瞰道路场景中的汽车)等。因此您应该设置适合您特定相机设置的参数(或如果相机设置可能会有所不同,请为您的用户提供调整它们的界面)。
考虑手指周围和手掌内部的区域。有 Blob (尤其是手掌内的区域)。在这种情况下,视差的差异是噪声,应该被过滤掉。选择很大speckleWindowSize (蓝色矩形)会导致手指等小而重要的细节丢失。最好选择更小的speckleWindowSize (红色矩形)及更大 speckleRange因为视差变化似乎很大。

关于python-3.x - 什么是 OpenCV 中实现的立体 BM 和 SGBM 算法中的散斑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56953811/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com