【问题标题】:Disparity Map Block Matching视差图块匹配
【发布时间】:2018-09-06 12:54:46
【问题描述】:

我正在编写一个使用块匹配的视差匹配算法,但我不确定如何在辅助图像中找到相应的像素值。

给定一个一定大小的方形窗口,有哪些技术可以找到相应的像素?我需要使用特征匹配算法还是有更简单的方法,例如对像素值求和并确定它们是否在某个阈值内,或者可能将像素值转换为二进制字符串,其中值大于或小于中心像素?

【问题讨论】:

    标签: computer-vision disparity-mapping


    【解决方案1】:

    我将假设您在谈论 Stereo Disparity,在这种情况下,您可能希望使用简单的 Sum of Absolute Differences(在此处继续之前阅读该 wiki 文章)。在阅读更多内容之前,您还应该阅读Chris McCormick 的本教程。

    旁注: SAD 不是唯一的方法,但它确实很常见,应该可以解决您的问题。

    你已经有了正确的想法。制作窗口,移动窗口,求和像素,找到最小值。所以我会给你我认为可能有帮助的东西:

    开始:

    如果您有彩色图像,首先您需要将它们转换为黑白。在 python 中,您可能会为每个像素使用一个像这样的简单函数,其中x 是一个包含 RGB 的像素。

    def rgb_to_bw(x):
        return int(x[0]*0.299 + x[1]*0.587 + x[2]*0.114)
    

    您会希望它是黑白的,以使 SAD 更易于计算。如果您想知道为什么不从中丢失重要信息,您可能有兴趣了解Bayer Filter 是什么。拜耳滤波器(通常为 RGGB)也解释了像素的红色、绿色和蓝色部分的倍增比。

    计算 SAD:

    您已经提到您有一个一定大小的窗口,这正是您想要做的。假设这个窗口的大小是n x n。您的左侧图像WL 中还有一些窗口,右侧图像WR 中也有一些窗口。这个想法是找到具有最小 SAD 的对。

    因此,对于窗口(x,y) 中某个位置的每个左窗口像素pl,您将获得右窗口像素pr 的差的绝对值,也位于(x,y)。您还需要一些运行值,即这些绝对差异的总和。在 sudo 代码中:

    SAD = 0
    from x = 0 to n:
       from y = 0 to n:
           SAD = SAD + absolute_value|pl - pr|
    

    计算这对窗口WLWR 的 SAD 后,您需要将WR“滑动”到新位置并计算另一个 SAD。您想找到具有最小 SAD 的 WLWR 对 - 您可以将其视为最相似的窗口。换句话说,具有最小 SAD 的 WLWR 是“匹配的”。当您拥有当前WL 的最小 SAD 时,您将“滑动”WL 并重复。

    视差由匹配的WLWR 之间的距离计算。对于可视化,您可以将此距离缩放到0-255 之间并将其输出到另一个图像。我在下面发布了 3 张图片来向您展示这一点。

    典型结果:

    左图: 右图: 计算的差异(从左图):

    您可以在这里获取测试图像:http://vision.middlebury.edu/stereo/data/scenes2003/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-10
      • 1970-01-01
      • 1970-01-01
      • 2019-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-11
      相关资源
      最近更新 更多