2010-02-03 11 views
10

In MATLAB habe ich die Fundamental matrix (von zwei Bildern) mit der normalisierten Eight point algorithm berechnet. Von diesem brauche ich triangulate die entsprechenden Bildpunkte im 3D-Raum. Von dem, was ich verstehe, würde ich die Rotation und Translation der Kameras des Bildes brauchen. Der einfachste Weg wäre natürlich calibrate the cameras zuerst dann die Bilder, aber das ist zu eng für meine Anwendung, da es diesen zusätzlichen Schritt erfordern würde.3D-Entsprechungen von der Grundmatrix

So dass mich mit auto (self) camera calibration verlässt. Ich sehe die Erwähnung von bundle adjustment, aber in An Invitation to 3D Vision scheint es, dass es eine anfängliche Übersetzung und Rotation erfordert, was mich denken lässt, dass eine kalibrierte Kamera benötigt wird oder mein Verständnis zu kurz kommt.

Also meine Frage ist, wie kann ich automatisch die Rotation/Übersetzung extrahieren, so dass ich die Bildpunkte im 3D-Raum reprojiziert/triangulieren kann. Jeder MATLAB-Code oder Pseudocode wäre fantastisch.

Antwort

8

Sie können die Grundmatrix verwenden, um die Kameramatrizen wiederherzustellen und die 3D-Punkte aus ihren Bildern zu triangulieren. Sie müssen sich jedoch bewusst sein, dass die Rekonstruktion, die Sie erhalten, eine projektive Rekonstruktion und keine euklidische Rekonstruktion sein wird. Dies ist nützlich, wenn Sie projektive Invarianten in der ursprünglichen Szene messen möchten, wie z. B. das Kreuzverhältnis, Linienüberschneidungen usw., aber dies reicht nicht aus, um Winkel und Entfernungen zu messen (Sie müssen die Kameras dafür kalibrieren).

Wenn Sie Zugriff auf Hartley and Zisserman's textbook haben, können Sie in Abschnitt 9.5.3 nachsehen, wo Sie von der Grundmatrix zu einem Paar Kameramatrizen gelangen, mit denen Sie eine projektive Rekonstruktion berechnen können (ich glaube, die der gleiche Inhalt erscheint in Abschnitt 6.4 von Yi Mas Buch). Seit der source code for the book's algorithms is available online möchten Sie vielleicht die Funktionen vgg_P_from_F, vgg_X_from_xP_lin und vgg_X_from_xP_nonlin überprüfen.

+0

Ich endete mit Algorithmus 12.1 "Die optimale Triangulation Methode" in der Hartley/Zisserman Buch. Kalibriert die Kameras mit "Camera Calibration Toolbox for Matlab" – yxk

1

Wenn Ihr 3D-Raum beliebig gewählt werden können Sie Ihre erste Kamera Matrix als

P = [I | 0] 

keine Übersetzung, keine Rotation einstellen könnte. Das würde Sie mit einem Koordinatensystem verlassen, das von Kamera 1 definiert wird. Dann sollte es nicht zu schwierig sein, die zweite Kamera zu kalibrieren.

+0

Würden Sie einen Algorithmus wie Bundle Adjustment von dort verwenden? – yxk

+0

Wenn möglich, würde ich versuchen, eine Art Kalibrierungsobjekt zu verwenden, um die Rotation der zweiten Kamera mit der ersten idealen Kamera zu finden. Ansonsten denke ich, Bundle-Anpassung wäre ein guter Anfang. –

+1

Um die Kalibrierung durchzuführen, muss eine Art Kalibrierungsobjekt wie ein Schachbrett verwendet werden.Dies kann immer noch mit einem Objekt ohne Kalibrierung durchgeführt werden, aber die Ergebnisse sind nicht so gut, es sei denn, man kann eine große Anzahl von * genauen * Korrespondenzen extrahieren. Aus weiterem Lesen ist die Bündelanpassung ein Algorithmus, der die Kalibrierungsergebnisse verbessert, sobald sie einmal vorhanden sind. – yxk

5

Peters MATLAB-Code wäre viel für Sie hilfreich Ich denke:

http://www.csse.uwa.edu.au/~pk/research/matlabfns/

Peter eine Reihe grundlegenden Matrixlösungen geschrieben hat. Die ursprünglichen Algorithmen wurden in der Zisserman Buch erwähnt

http://www.amazon.com/exec/obidos/tg/detail/-/0521540518/qid=1126195435/sr=8-1/ref=pd_bbs_1/103-8055115-0657421?v=glance&s=books&n=507846

Auch während Sie gerade dabei sind, vergessen Sie nicht die fundamentale Matrix Songs zu sehen:

http://danielwedge.com/fmatrix/

eine feine Komposition in meinem ehrliche Meinung!