Pour des raisons de compréhension, je veux implémenter un algorithme stéréo en Python (et Numpy), qui calcule une carte de disparités. En tant que données d'image, j'ai utilisé l'ensemble de données d'images Tsukuba de Middlebury *. Pour plus de simplicité, je choisis normalised cross correlation (NCC) ** comme mesure de similarité pour trouver des pixels de correspondance. Je vais supposer un accord scanline. Voici ma mise en œuvre de la CCN:Cartes de disparité avec corrélation croisée normalisée utilisant 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
où le left_patch
et right_patch
sont des patchs 3x3 à partir des images originales. Cela génère des entiers compris entre -1 et 1, ce qui décrit la similarité entre deux pixels. L'idée est maintenant de trouver le pixel le mieux adapté. La disparité entre les deux pixels devrait maintenant être stockée dans une nouvelle image - la carte de disparité. Depuis que j'ai supposé l'accord scanline, je dois seulement chercher dans une rangée d'images. Pour chaque pixel de la ligne, je veux prendre l'indice de la valeur qui maximise la valeur NCC et la stocker comme valeur de disparité. Mon problème est maintenant, que mes résultats sont plutôt bizarres. Mes valeurs de disparité sont autour de 180-200 pixels pour une image de 384x288 pixels. Here l'image résultante.
Pouvez-vous voir l'erreur dans ma pensée?
(*) vision.middlebury.edu/stereo/data/scenes2001/data/anigif/orig/tsukuba_o_a.gif
(**) Procédé de corrélation en deux étapes d'estimation de la profondeur stéréoscopique. - N. Einecke et J. Eggert
le résultat semble assez bizarre, en fait: P – kmario23