【问题标题】:Disparity maps with Normalized Cross Correlation using Python使用 Python 进行归一化互相关的视差图
【发布时间】: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_patchright_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


【解决方案1】:

您似乎没有正确计算分子。应该是:

num = np.mean( (left_patch - left_mu) * (right_patch - right_mu) )

【讨论】:

  • 表达式是等价的。您可以对您的表达式进行期望,并且由于期望的线性,它将评估为 np.mean(left_patchright_patch) - left_muright_mu。您也可以通过实验检查它。由于数值稳定性,结果可能会略有不同,但不会导致此问题。
猜你喜欢
  • 1970-01-01
  • 2017-07-24
  • 1970-01-01
  • 1970-01-01
  • 2020-07-22
  • 2020-03-10
  • 2017-01-01
  • 1970-01-01
  • 2014-08-02
相关资源
最近更新 更多