2

視差マップを作成するためのコードに取り組んでいます。

画像をグレースケールに変換してロード/保存する以上の目的でOpenCVを使用したくありません。

これまでのところ、このウェブサイトで説明されているアルゴリズムを実装することができました。絶対差の合計 (SAD) を使用するバージョンのアルゴリズムを使用しています。実装をテストするために、このデータセットのステレオ画像を使用しています。

これが私のコードです:

import cv2
import numpy as np

# Load the stereo images
img = cv2.imread('bow-view1.png')
img2 = cv2.imread('bow-view5.png')
# convert stereo images to grayscale
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
gray2 = cv2.cvtColor(img2,cv2.COLOR_BGR2GRAY)
# get the size of the images
# l -> lines
# c -> columns
# v -> channel (RGB)
l,c,v = img.shape

# initialize arrays
minSAD = np.ones((l,c)) * 1000
sad = np.ones((l,c))
winsad = np.ones((l,c))
disp = np.zeros((l,c))

max_shift = 30

# set size of the SAD window
w_l = 2
w_c = 2

for shift in range(max_shift):
    print("New Shift: %d"%(shift))
    for u in range(0,l):
        for v in range(0,c):
            # calculate SAD
            if(u+shift < l):
                sad[u,v] = np.abs((int(gray[u,v]) - int(gray2[u+shift,v])))
            sum_sad = 0
            for d in range(w_l):
                for e in range(w_c):
                    if(u+d < l and v+e < c):
                        sum_sad +=  sad[u+d,v+e]

            winsad[u,v] = sum_sad
            # Save disparity
            if(sad[u,v] < minSAD[u,v]):
                minSAD[u,v] = winsad[u,v]
                disp[u,v] = shift

print("Process Complete")
# write disparity map to image  
cv2.imwrite('outputHT/disparity/sad.png',disp)
print("Disparity Map Generated")

これは、そのコードによって生成された出力です。 コードによって生成された視差マップ。

これに似た(または非常に近い)出力が得られるはずです。 ここに画像の説明を入力

(SAD ステップで) いくつかのウィンドウ サイズを試しましたが、このような結果やすべて黒の画像が表示され続けます。

私が問題を理解するのに役立つ、または少なくとも正しい方向に私を向けるのに役立つ答えは非常に高く評価されます!

4

1 に答える 1