- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在应用 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”是一本很棒的书,您从中引用的内容可以清楚地回答您的问题。
这会导致我们称之为散斑的大小差异的局部区域。
我从 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/
问题故障解决记录 -- Java RMI Connection refused to host: x.x.x.x .... 在学习JavaRMI时,我遇到了以下情况 问题原因:可
我正在玩 Rank-N-type 并尝试输入 x x .但我发现这两个函数可以以相同的方式输入,这很不直观。 f :: (forall a b. a -> b) -> c f x = x x g ::
这个问题已经有答案了: How do you compare two version Strings in Java? (31 个回答) 已关闭 8 年前。 有谁知道如何在Java中比较两个版本字符串
这个问题已经有答案了: How do the post increment (i++) and pre increment (++i) operators work in Java? (14 个回答)
下面是带有 -n 和 -r 选项的 netstat 命令的输出,其中目标字段显示压缩地址 (127.1/16)。我想知道 netstat 命令是否有任何方法或选项可以显示整个目标 IP (127.1.
我知道要证明 : (¬ ∀ x, p x) → (∃ x, ¬ p x) 证明是: theorem : (¬ ∀ x, p x) → (∃ x, ¬ p x) := begin intro n
x * x 如何通过将其存储在“auto 变量”中来更改?我认为它应该仍然是相同的,并且我的测试表明类型、大小和值显然都是相同的。 但即使 x * x == (xx = x * x) 也是错误的。什么
假设,我们这样表达: someIQueryable.Where(x => x.SomeBoolProperty) someIQueryable.Where(x => !x.SomeBoolProper
我有一个字符串 1234X5678 我使用这个正则表达式来匹配模式 .X|..X|X. 我得到了 34X 问题是为什么我没有得到 4X 或 X5? 为什么正则表达式选择执行第二种模式? 最佳答案 这里
我的一个 friend 在面试时遇到了这个问题 找到使该函数返回真值的 x 值 function f(x) { return (x++ !== x) && (x++ === x); } 面试官
这个问题在这里已经有了答案: 10年前关闭。 Possible Duplicate: Isn't it easier to work with foo when it is represented b
我是 android 的新手,我一直在练习开发一个针对 2.2 版本的应用程序,我需要帮助了解如何将我的应用程序扩展到其他版本,即 1.x、2.3.x、3 .x 和 4.x.x,以及一些针对屏幕分辨率
为什么案例 1 给我们 :error: TypeError: x is undefined on line... //case 1 var x; x.push(x); console.log(x);
代码优先: # CASE 01 def test1(x): x += x print x l = [100] test1(l) print l CASE01 输出: [100, 100
我正在努力温习我的大计算。如果我有将所有项目移至 'i' 2 个空格右侧的函数,我有一个如下所示的公式: (n -1) + (n - 2) + (n - 3) ... (n - n) 第一次迭代我必须
给定 IP 字符串(如 x.x.x.x/x),我如何或将如何计算 IP 的范围最常见的情况可能是 198.162.1.1/24但可以是任何东西,因为法律允许的任何东西。 我要带198.162.1.1/
在我作为初学者努力编写干净的 Javascript 代码时,我最近阅读了 this article当我偶然发现这一段时,关于 JavaScript 中的命名空间: The code at the ve
我正在编写一个脚本,我希望避免污染 DOM 的其余部分,它将是一个用于收集一些基本访问者分析数据的第 3 方脚本。 我通常使用以下内容创建一个伪“命名空间”: var x = x || {}; 我正在
我尝试运行我的test_container_services.py套件,但遇到了以下问题: docker.errors.APIError:500服务器错误:内部服务器错误(“ b'{” message
是否存在这两个 if 语句会产生不同结果的情况? if(x as X != null) { // Do something } if(x is X) { // Do something } 编
我是一名优秀的程序员,十分优秀!