我正在使用块匹配编写视差匹配算法,但我不确定如何在次映像中找到相应的像素值。
给定一个大小的方形窗口,有哪些技术可以找到相应的像素?我是否需要使用特征匹配算法,或者是否有更简单的方法,例如对像素值求和并确定它们是否在某个阈值内,或者可能将像素值转换为二进制字符串,其值大于或小于中心像素?
答案 0 :(得分:2)
我会假设您正在谈论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的那对。
因此,对于窗口pl
中某个位置的每个左窗口像素(x,y)
,右侧窗口像素pr
的差值绝对值也位于(x,y)
}。你还需要一些运行值,这是这些绝对差值的总和。在sudo代码中:
SAD = 0
from x = 0 to n:
from y = 0 to n:
SAD = SAD + absolute_value|pl - pr|
在计算这对窗口的SAD后,WL
和WR
您需要"滑动" WR
到新位置并计算另一个SAD。您希望找到具有最小SAD的WL
和WR
对 - 您可以将其视为最相似的窗口。换句话说,具有最小SAD的WL
和WR
与#34;匹配"。当你拥有当前WL
的最小SAD时,你将"滑动" WL
并重复。
视差是根据匹配的WL
和WR
之间的距离计算的。对于可视化,您可以将此距离缩放到0-255
之间并将其输出到另一个图像。我在下面发布了3张图片给你看。
典型结果:
您可以在此处获取测试图片:http://vision.middlebury.edu/stereo/data/scenes2003/