【问题标题】:semi global block matching半全局块匹配
【发布时间】:2013-02-08 10:29:53
【问题描述】:

我正在研究 opencv 的半全局块匹配。事实上,我不明白为什么我们需要浏览所有方向来计算成本聚合?有没有人试图限制这条路径(扫描线)的长度?

【问题讨论】:

    标签: opencv matching stereo-3d


    【解决方案1】:

    成本聚合涉及在多个方向上进行搜索,以对您的解决方案实施全局平滑约束。如果没有这些约束,则计算每个像素的视差而不考虑其邻居的估计视差,并且结果通常会包含很多“噪声”,因为匹配过程将返回许多误报。

    假设观察到的表面非常光滑,如果像素与其相邻像素不一致,您可以通过设置为像素分配深度的额外成本来惩罚视差变化。松散地说,这意味着当您尝试估计一个深度并有几个可能的匹配时,您可能会选择与相邻像素的深度估计非常一致的匹配。向更多方向搜索会增加您在成本计算中考虑的邻居数量,并且通常会增加

    OpenCV 没有提供减少此搜索路径长度的方法,但如果您希望算法运行得更快,您可以禁用某些方向,只搜索 5 个路径而不是 8 个(通过设置参数 fullDP 为 false)或通过减小视差搜索范围。

    【讨论】:

    • @shumi 我不知道这个函数是从哪里来的。它是由块匹配例程在内部调用的吗?你对 c++ 语法感到困惑吗?如果是,那么答案很简单:int diff_scale = c < cn ? 0 : 2 正在使用ternary conditional operator(CostType)std::abs(u - v) >> diff_scale); 正在使用bitshift。这在计算机视觉中很常见,用于创建图像金字塔或缩放因子,这就是我想象的情况。
    • 当然,我知道这是什么 ;) 但我认为这部分代码中有些东西不适合,因为我没有看到累积成本和 bitshift 之间的关系。
    猜你喜欢
    • 2010-12-03
    • 1970-01-01
    • 1970-01-01
    • 2021-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    相关资源
    最近更新 更多