2016-05-04 11 views
1

Wie überprüft man in OpenCV Stereo, ob ein bestimmter 3D-Punkt (x, y, z) auf eine linke/rechte Bildebene projiziert werden kann? Ich habe Kameraparameter kalibriert, die von StereoRectify erhalten wurden.OpenCV-Stereo: Wie überprüfe ich die Gültigkeit eines 3D-Punktes (x, y, z)?

Genauer gesagt möchte ich ProjectPoints mit "gültigen" 3D-Punkten verwenden. Ich möchte ungültige Punkte aus dem ursprünglichen Satz von 3D-Punkten entfernen.

Danke!


@ bearbeitet 2016-05-06

In Bezug auf die „Gültigkeit“: Ich fand, dass projectPoints sehr seltsame Werte zurückgegeben, wenn ich ein paar 3D-Punkte gab, die definitiv äußeren Bereich des Bildes waren. Zum Beispiel wurden Punkte auf einer großen Kegelfläche, die in 3D definiert wurde, nicht korrekt in Punkte auf dem Bild konvertiert, wie ich es erwartet hatte.

+0

Können Sie definieren, was Sie meinen, wenn Sie einen gültigen Punkt sagen? – BHawk

+0

Bitte beachten Sie diese http://stackoverflow.com/questions/33668659/get-textured-pointcloud-with-block-matching-algorithm/33672238#33672238 –

Antwort

1

Meine Lösung war die Vermeidung von ProjectPoints. Da die projectPoints-Funktion die Projektion von 3D auf 2D unter Berücksichtigung von Kameraparametern beinhaltet, ist es ein wenig kompliziert. Anstatt projectPoints zu verwenden, projizierte ich 3D-Punkte auf die korrigierten Bilder nur mit den Projektionsmatrizen, die durch StereoRectify erhalten wurden.