理解のため、私は視差マップを計算するPython(およびNumpy)でステレオアルゴリズムを実装したいと考えています。画像データとして、私はMiddlebury *のつくば画像データセットを使用しました。簡単にするため、対応ピクセルを見つけるための類似度としてnormalised cross correlation (NCC) **を選択します。私はスキャンラインの合意を前提とします。 ここに私の実装NCC:left_patch
とright_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
実際には、結果はかなり奇妙に見えます。P – kmario23