7

ich den Quellcode der Funktion solvePnP() in OpenCV Lesen, wenn die flags param Standardwert SOLVEPNP_ITERATIVE verwendet, es cvFindExtrinsicCameraParams2 rief, in dem FIRST verwendet es das DLT Algorithmus (wenn wir einen nicht-planaren Satz von 3D-Punkten), um die 6DOF-Kamerapose zu initialisieren, und SECOND verwendet CvLevMarq solver, um den Reprojektionsfehler zu minimieren.Warum direkte lineare Transformation (DLT) kann nicht die optimale Kamera extrinsics geben?

Meine Frage ist: die DLT formt das Problem als lineares Least-Square-Problem und löst es mit SVD-Zerlegung, es scheint eine optimale Lösung zu sein, warum verwenden wir danach immer noch die Lev-Marq-iterative Methode?

Oder, was ist das Problem/die Einschränkung des DLT-Algorithmus minderwertig? Warum ergibt die geschlossene Lösung eine LOCAL Mindestanforderung an die Kostenfunktion?

+0

Ich denke, es ist üblich, einen zusätzlichen Schritt irgendeiner Art von nichtlinearer Verfeinerung zu der extrinsischen Schätzung hinzuzufügen, die iterativ durchgeführt wird. Siehe hier: http://www.epixea.com/research/multi-view-coding-thesese9.html – Dan

+0

@Dan thx für Ihren Link, ich weiß, es ist üblich, genau wie der 'CvLevMarq' Solver in opencv tat. Ich meine, DLT scheint eine Art von Closed-Form-Minimierung ** der Kostenfunktion zu sein, warum ist es immer noch unterlegen (lokales Minimum)? – zhangxaochen

Antwort

4

Wenn Sie die Lösung für ein Problem finden möchten, besteht der erste Schritt darin, dieses Problem mathematisch auszudrücken, und Sie können dann vorhandene mathematische Werkzeuge verwenden, um eine Lösung für Ihre Gleichungen zu finden. Interessante Probleme können jedoch gewöhnlich auf viele verschiedene mathematische Arten ausgedrückt werden, von denen jeder zu einer etwas anderen Lösung führen kann. Es braucht dann Arbeit, um die verschiedenen Methoden zu analysieren, um zu verstehen, welche die stabilste/genaueste/effizienteste/etc Lösung bietet.

Im Fall des PnP-Problems wollen wir die Kamera-Pose finden, die Assoziationen zwischen 3D-Punkten und ihrer Projektionen-Bildebene aufweist.

Eine erste Möglichkeit, dieses Problem mathematisch auszudrücken, besteht darin, es als ein lineares Problem der kleinsten Quadrate zu interpretieren. Dieser Ansatz ist als DLT-Ansatz bekannt und er ist interessant, da lineare Kleinste-Quadrate eine Lösung in geschlossener Form haben, die robust unter Verwendung der Singulärwertzerlegung gefunden werden kann. Dieser Ansatz geht jedoch davon aus, dass die Kamerapose P 12 Freiheitsgrade hat, wenn sie wirklich nur 6 hat (3 für die 3D-Rotation plus 3 für die 3D-Translation). Um aus dem Ergebnis dieses Ansatzes eine 6DOF-Kamerapose zu erhalten, ist eine Approximation erforderlich (die nicht durch die lineare Kostenfunktion des DLT abgedeckt ist), was zu einer ungenauen Lösung führt. Eine zweite Möglichkeit, das PnP-Problem mathematisch auszudrücken, besteht darin, den geometrischen Fehler als eine Kostenfunktion zu verwenden und die Kamerapose zu finden, die den geometrischen Fehler minimiert.

Da der geometrische Fehler nichtlinear ist, wird bei diesem Ansatz die Lösung mit iterativen Solvern wie dem Levenberg Marquardt-Algorithmus geschätzt. Solche Algorithmen können die 6 Freiheitsgrade der Kamerapose berücksichtigen, was zu genauen Lösungen führt. Da es sich jedoch um iterative Ansätze handelt, müssen sie mit einer ersten Schätzung der Lösung versehen werden, die in der Praxis häufig mit dem DLT-Ansatz erhalten wird.

Nun, um den Titel Ihrer Frage zu beantworten: sicher, der DLT-Algorithmus gibt die optimale Kamera Extrinsik, aber es ist optimal nur im Sinne der linearen Kostenfunktion durch den DLT-Algorithmus gelöst. Im Laufe der Jahre haben Wissenschaftler komplexere Kostenfunktionen gefunden, die zu genaueren Lösungen führen, die aber auch schwieriger zu lösen sind.

+0

Thx zuerst ~ du meinst DLT ist unterlegen, weil es eine 12DOF Matrix nicht gerade eine starre Transformationsmatrix bekommt? Aber wie ich weiß, gibt die Operation 'svd (H) = UWV^T 'und dann' result = VU^T 'tatsächlich eine exakte Rotationsmatrix (orthogonale Matrix mit det = + 1) mit 3DOF, nicht 9DOF, nicht es? – zhangxaochen

+1

Ja, es gibt Möglichkeiten, eine 6DOF-Kamerapose von einer 12DOF-Kamera zu extrahieren (z. B. mit SVD, wie Sie sagten). Diese Transformation wird jedoch nicht durch das lineare Least-Square-Problem des DLT-Algorithmus abgedeckt, so dass Sie eine 6DOF-Kamerapose erhalten, die im Sinne Ihrer linearen Least-Squares-Cost-Funktion nicht mehr optimal ist. Um die 6DOF-Posenabschätzung in ein Kleinstquadratproblem einzubetten, benötigen Sie eine nichtlineare Funktion, und der beste Weg, um eine nichtlineare Funktion zu minimieren, ist über iterative Solver (z. B. den Levenberg-Marquardt-Algorithmus). – AldurDisciple

Verwandte Themen