【发布时间】:2018-09-06 12:54:46
【问题描述】:
我正在编写一个使用块匹配的视差匹配算法,但我不确定如何在辅助图像中找到相应的像素值。
给定一个一定大小的方形窗口,有哪些技术可以找到相应的像素?我需要使用特征匹配算法还是有更简单的方法,例如对像素值求和并确定它们是否在某个阈值内,或者可能将像素值转换为二进制字符串,其中值大于或小于中心像素?
【问题讨论】:
标签: computer-vision disparity-mapping
我正在编写一个使用块匹配的视差匹配算法,但我不确定如何在辅助图像中找到相应的像素值。
给定一个一定大小的方形窗口,有哪些技术可以找到相应的像素?我需要使用特征匹配算法还是有更简单的方法,例如对像素值求和并确定它们是否在某个阈值内,或者可能将像素值转换为二进制字符串,其中值大于或小于中心像素?
【问题讨论】:
标签: computer-vision disparity-mapping
我将假设您在谈论 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|
计算这对窗口WL 和WR 的 SAD 后,您需要将WR“滑动”到新位置并计算另一个 SAD。您想找到具有最小 SAD 的 WL 和 WR 对 - 您可以将其视为最相似的窗口。换句话说,具有最小 SAD 的 WL 和 WR 是“匹配的”。当您拥有当前WL 的最小 SAD 时,您将“滑动”WL 并重复。
视差由匹配的WL 和WR 之间的距离计算。对于可视化,您可以将此距离缩放到0-255 之间并将其输出到另一个图像。我在下面发布了 3 张图片来向您展示这一点。
典型结果:
您可以在这里获取测试图像:http://vision.middlebury.edu/stereo/data/scenes2003/
【讨论】: