2017-12-13 5 views
0

ich diesen Code zu verwenden, versuchen Kameraposition zu finden, indem flaches Bild im Bild lokalisieren:solvePnP/solvePnPRansac nicht gibt gute Kameraposition Schätzung

https://docs.opencv.org/3.3.1/d1/de0/tutorial_py_feature_homography.html

Für dieses Bild, um es korrekt funktioniert:

enter image description here

und findet das Muster. Ich benutze cv2.projectPoints Bild über Hintergrundbild zu zeichnen:

enter image description here

Aber manchmal solvePnP verrückt Ergebnisse zurück, zum Beispiel für dieses Bild:

enter image description here

ich verrückt Bildposition, wenn ich neu projiziert das Muster:

enter image description here

Für diesen Fall ich SIFT Punkte überprüft haben, sehen sie richtig und Spiel:

enter image description here

Ich versuchte solvePnPRansac statt solvePnP zu verwenden, aber es hilft nicht, ist geschätzte Position noch seltsam. Was könnte der Grund sein und wie kann ich dieses Problem lösen?

+0

Was möchten Sie genau erreichen? 'solvePnP' findet eine Objektpose aus 3D-2D-Punktkorrespondenzen. und von Ihnen haben Sie gezeigt, dass Sie überhaupt keine 3D-Punkte haben. Der von Ihnen geteilte Python-Code dient zur Berechnung der Homografiematrix, die die perspektivische Transformation zwischen dem Objekt in der Szene und dem trainImage (dem oben links stehenden) ist Ecke des letzten Bildes) –

+0

Ich muss die Kameraposition finden. Ich habe 3D-Punkte, weil ich weiß, dass ein Stück Papier auf dem Tisch ist, dh z = 0, also habe ich Array von 3D-Punkten und auch Array von 2D-Punkten auf dem Musterbild, so kann ich Projektion rvec und tvec zu finden Kameraposition im Raum. –

Antwort

0

Ok, ich habe es geschafft, die Pose-Schätzung in diesem Fall zu verbessern, indem ich die Verzerrungsmatrix auf np.array ([]) setze, weil ich das Bild bereits vor SIFT korrigiere. Gleiches gilt für cv2.projectPoints. Auch für diese Funktion müssen keine Verzerrungskoeffizienten bereitgestellt werden.