web-dev-qa-db-fra.com

Python / OpenCV: calcul d'une carte de profondeur à partir d'images stéréo

J'ai deux images stéréo que j'aimerais utiliser pour calculer une carte de profondeur. Bien que je ne connaisse malheureusement pas C/C++, je connais python-- alors quand j'ai trouvé ce tutoriel , j'étais optimiste.

Malheureusement, le didacticiel semble quelque peu obsolète. Il doit non seulement être modifié pour fonctionner (renommer 'createStereoBM' en 'StereoBM') mais quand il s'exécute, il ne donne pas un bon résultat, même sur les images stéréo d'exemple qui ont été utilisées dans le tutoriel lui-même .

Voici un exemple:

image-leftimage-right

import numpy as np
import cv2
from matplotlib import pyplot as plt

imgL = cv2.imread('Yeuna9x.png',0)
imgR = cv2.imread('SuXT483.png',0)

stereo = cv2.StereoBM(1, 16, 15)
disparity = stereo.compute(imgL, imgR)

plt.imshow(disparity,'gray')
plt.show()

Le résultat:

the result

Cela semble très différent de ce que réalise l'auteur du tutoriel:

good result
(source: opencv.org )

Ajuster les paramètres n'améliore pas les choses. Toute la documentation que j'ai pu trouver concerne la version C originale du code openCV, pas l'équivalent de la bibliothèque python. Je n'ai malheureusement pas pu l'utiliser pour améliorer les choses.

Toute aide serait appréciée!

13
jwdink

Vous avez les images dans le mauvais sens.

Regardez les images, l'étain derrière la lampe vous permet de déterminer l'emplacement des caméras des deux images,

Changez juste ceci:

#  v
imgR = cv2.imread('Yeuna9x.png',0)
imgL = cv2.imread('SuXT483.png',0)
#  ^

Si vous regardez l'image dans le tutoriel qui, selon eux, est le cadre left, c'est la même que votre right.

Voici mon résultat après le changement.

enter image description here

20
will

Il est possible que vous deviez continuer à ajuster les paramètres de l'algorithme de correspondance de blocs.

jetez un oeil à cet article de blog: https://erget.wordpress.com/2014/03/13/building-an-interactive-gui-with-opencv/

L'auteur de l'article a composé un ensemble de classes pour simplifier le processus de calibrage des caméras que le didacticiel opencv. Ces classes sont disponibles sous forme de package pypi: https://github.com/erget/StereoVision

J'espère que cela t'aides :)

0
samkhan13