【发布时间】:2017-03-19 21:27:24
【问题描述】:
为了便于理解,我想在 Python(和 Numpy)中实现一个立体算法,用于计算视差图。作为图像数据,我使用了来自 Middlebury* 的筑波图像数据集。为简单起见,我选择normalised cross correlation (NCC)** 作为相似性度量来查找对应像素。我将承担扫描线协议。 这里是我实现的 NCC:
left_mu = np.mean(left_patch)
right_mu = np.mean(right_patch)
left_sigma = np.sqrt(np.mean((left_patch - left_mu)**2))
right_sigma = np.sqrt(np.mean((right_patch - right_mu)**2))
patch = left_patch * right_patch
mu = left_mu * right_mu
num = np.mean(patch) - mu
denom = left_sigma * right_sigma
ncc = num/denom
left_patch 和 right_patch 是原始图像的一些 3x3 补丁。这会输出介于 -1 和 1 之间的整数,它描述了两个像素之间的相似性。
现在的想法是找到最适合的像素。两个像素之间的视差现在应该存储在一个新的图像中——视差图。
由于我假设扫描线一致,我只需要在一个图像行中搜索。对于行中的每个像素,我想取最大化 NCC 值的值的索引并将其存储为视差值。
我现在的问题是,我的结果很奇怪。对于 384x288 像素的图像,我的视差值约为 180-200 像素。 Here 生成的图像。
你能看出我想法的错误吗?
(*) vision.middlebury.edu/stereo/data/scenes2001/data/anigif/orig/tsukuba_o_a.gif
(**) 立体深度估计的两阶段相关方法。 - N. Einecke 和 J. Eggert
【问题讨论】:
-
结果看起来很奇怪,实际上:P
标签: python numpy computer-vision disparity-mapping