2017-01-25 2 views
0

Je tente d'extraire la carte de disparité des objets de premier plan dans une image. Les objets de premier plan sont extraits en utilisant la couleur et le but final est de déterminer les coordonnées des objets extraits. Ci-dessous l'image masquée gauche de la vue avec des objets rougeâtres extraitcarte Disparity à partir d'images masquées de premier plan

enter image description here

et puis il y a l'image de droite

enter image description here

L'arrière-plan est essentiellement une fenêtre géante que je veux être ignoré et je me soucie seulement de trouver la position des objets rougeâtres (ou n'importe quelle couleur que je choisirai plus tard).

Après avoir joué avec les paramètres de l'algorithme de SGBM dans l'exemple OpenCV, principalement

int SADWindowSize 
int minDisparity 
int numberOfDisparities 

Je n'étais pas en mesure d'obtenir des résultats satisfaisants, plus exactement l'algorithme n'a pas été en mesure de traiter très bien avec l'uniforme texture des parties masquées. Je vais poster deux exemples pour illustrer. Le SADWindowSize est le seul paramètre varié dans ces exemples car il donne les résultats les plus distinctifs.

Exemple 1: avec une plus petite taille de la fenêtre = 9 et le nombre de disparités = 64

enter image description here

Exemple 2: avec une plus petite taille de la fenêtre = 23 et le nombre de disparités = 64

enter image description here

La plus grande taille de la fenêtre donne plus de résultats barbouillés qui ne sont pas souhaitables.

La question: Est-ce une mauvaise approche pour masquer l'arrière-plan lors du calcul de la carte de disparité? Une autre approche possible est de calculer la carte de disparité puis d'appliquer le masque mais je ne suis pas sûr de la plausibilité des résultats dans ce cas.

Notez que les caméras et les images calibrées et (masques) et sont rectifiées.

Répondre

2

Masking avant de calculer la carte de profondeur n'a pas de sens, parce que l'algorithme a besoin de comparer l'espace indiqué pour trouver des pixels correspondants. L'utilisation d'un masque cause un manque d'informations en raison du grand nombre de pixels noirs. Donc, ce que vous essayez est intuitif pour nous, mais l'application ne peut pas facilement déterminer quels pixels représentent le même point.

Je ne suis pas sûr, mais si vous utilisez un masque pour une vue à gauche sur la disparité vous devriez obtenir ce que vous vous attendez. Ou masquer une sortie de reprojectImageTo3D().

+0

votre logique est juste, j'ai raté ce point. Je vous remercie. –