2017-03-19 10 views
1

理解のため、私は視差マップを計算するPython(およびNumpy)でステレオアルゴリズムを実装したいと考えています。画像データとして、私はMiddlebury *のつくば画像データセットを使用しました。簡単にするため、対応ピクセルを見つけるための類似度としてnormalised cross correlation (NCC) **を選択します。私はスキャンラインの合意を前提とします。 ここに私の実装NCC:left_patchright_patchは、元の画像から、いくつかの3x3のパッチでPythonを使用した正規化相互相関を使用した視差マップ

 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 

。これは-1と1の間の整数を出力します。これは2つのピクセル間の類似性を表します。 アイデアは今、最適なピクセルを見つけることです。 2つのピクセル間の視差は、新しい画像、すなわち視差マップに格納されるはずです。 私はスキャンライン契約を前提としていたので、1つのイメージ行で検索するだけで済みます。行の各ピクセルについて、NCC値を最大化する値のインデックスを取得し、それを視差値として保存したいと考えています。 私の問題は今、私の結果はかなり奇妙です。私の視差値は、384x288ピクセルの画像では約180-200ピクセルです。 Here画像になります。

私の考えに間違いがありますか?

(*)

(**) vision.middlebury.edu/stereo/data/scenes2001/data/anigif/orig/tsukuba_o_a.gif 立体奥行き推定のための二段階相関方法。 - N. Einecke and J. Eggert

+0

実際には、結果はかなり奇妙に見えます。P – kmario23

答えて

0

分子を正しく計算していないようです。

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

これらの式は同等です。あなたはあなたの表現に期待することができ、期待の線形性のためにnp.mean(left_patch * right_patch) - left_mu * right_muと評価されます。実験的にチェックアウトすることもできます。数値的な安定性のために結果に若干の違いがあるかもしれませんが、この問題は発生しません。 – Kochoba

関連する問題