Kamera Kalibration
Verfasst: 11.09.2010, 11:37
Hallo,
ich hatte dieses Thema schon im Developia Forum geöffnet und wollte es hier nochmal posten. Ich bin mir nicht ganz sicher unter welchen Bereich ist das Tehma packen soll, aber ich hoffe hier ist es erstmal gut aufgehoben.
Im Moment sitze ich an der Kamerakalibration und habe da so ein paar Fragen bezüglich der Vorgehensweise. Als Bibliothek benutze ich OpenCV.
Ich fange erstmal ganz klein an, so dass etwaige Folgefehler sichtbar werden.
http://www.imagebanana.com/view/8urtt1b1/S5002865.JPG
Unten rechts ist das Prinzip einer Lochkamera zu sehen. Der Schnittpunkt beider Gerade ist die Lochblende. So ergibt sich nach Strahlensätzen die Gleichung darunter. Um das alles ein wenig zu vereinfachen wird die Projektionsebene (Imager), nach vorne geschoben. Das sieht man dann in der Zeichnung darunter. An der Mathematik ändert sich nicht viel, nur, dass alles jetzt ein wenig anschaulicher ist. Diese Annahme führt dann zu dem Bild oben links.
Oben rechts sind die Gleichungen für die Koordinaten aufgelistet (Bei der zweiten muss es Y/Z heissen). Erst einmal zu den Konstanten cx und cy.
Die optische Achse(Optical axis) sollte eigentlich in der Mitte der Projektionsebene liegen, so dass der Principal Point den Mittelpunkt dieser Ebene darstellt, aber die Kameras sind niemals so genau konstruiert, dass es auch eintrifft, deswegen geben cx und cy die Verschiebung in die jeweilige Richtung an.
Nun zu der Brennweite (Focal length). Das habe ich nicht ganz verstanden. Es wurde gesagt, dass die individuellen Pixel in einer Projektionsebene bei vielen billig Kameras nie quadratisch, sondern rechteckig sind. Deswegen gibt es weitere Paramter sx und sy die als Einheit Pixel pro Millimeter haben (Pixel/mm), dabei ist Millimeter nur eine Beispielgröße, denn es kann jede beliebige größe haben. Die Brennweite für die x-Koordinate ergibt sich dann also aus dem Produkt der physikalischen Brennweite und sx (fx = sx*F).
Ich habe mir unten links dafür ein Bild gezeichnet. Die Maße gelten für ein Kästchen in horizontaler, sowie vertikaler Richtung. Ich bin mir nicht sicher, ob meine Vorstellung davon richtig ist, denn ich hab eigentlich gar keine Ahnung warum das nötig ist. :?
Nun hat man also ein paar Konstanten, die die Kamera definieren. Um das alles schön zu verpacken werden die Konstanten in eine Matrix gepackt.
http://www.imagebanana.com/view/1pcd20a ... 010048.jpg
Dabei werden homogene Koordinaten benutzt (beim Punkt p ersichtlich). So ergeben sich dann die Gleichungen, die ich oben schon aufgezeigt habe.
Diese Matrix M nennt sich Intrinsics Matrix.
Dazu gesellt sich noch ein Distortion-Vector (im Bild fälschlicherweise Distortion Matrix genannt). Die Herleitung nehme ich einfach mal so hin, da ich von Taylor-Reihen etc. keine Ahnung habe.
http://www.imagebanana.com/view/xkfg3xvx/S5002866.JPG
Es gibt die radiale- und die tangentiale-Verzerrung, die überwiegend eine Rolle spielen.
Nachdem man sich jetzt diesen Problemen entledigt hat, geht man genauer auf die Überführung von Punkten aus der realen Welt in die Projektionseben ein.
http://www.imagebanana.com/view/qza1qm6 ... 010050.jpg
Wie darf ich mir hier aber die Funktion des Translationsvektors t vorstellen? Es wird gesagt, dass er dazu dient die Koordinatenursprünge auf einen Punkt zu bringen, sodass O in C liegt. Heisst es dass der Punkt P0 dann auf der Projektionsebene liegt, also in Pc? Und woher taucht plötzlich das Koordinatensystem des Objekts bzw. des Punktes P0 auf bzw. wie wird es definiert?
Wie kann ich mir außerdem die Rotation erklären? Wozu muss rotiert werden? Werden nicht einfach alle Punkte durch einen Translationsvektor auf die Projektionsebene gebracht?
Ich habe für mich bis jetzt nur eine Erklärung für die Rotation gefunden. Wenn der Punkt Q in einem der Quadranten liegt, also nicht in der xz- oder yz-Ebene (z = otpische achse), so muss der Punkt rotiert werden, damit sich die Beziehungen vom ersten Whiteboardbild ergeben und man die Koordinaten für den repräsentativen Punkt q berechnen kann:
http://www.imagebanana.com/view/cth0isq ... 010049.jpg
Rechts sind die beiden Rotationen schon vollführt worden, sodass der Punkt in der jeweiligen Ebene liegt. So ergeben sich die Beziehungen da drüber, die zu den ursprünglichen Formeln im ersten Whiteboardbild führen.
Wenn dies der Fall ist, wozu wird dann noch der Translationsvektor gebraucht, denn er ist ja im endeffekt nichts anderes, als die direkte Verbindungslinie von q und Q und hat mit den Gleichungen des ersten Whiteboardbildes nichts zu tun.
Mir stellt sich also die Frage warum zugleich rotiert und transferiert werden muss.
ich hatte dieses Thema schon im Developia Forum geöffnet und wollte es hier nochmal posten. Ich bin mir nicht ganz sicher unter welchen Bereich ist das Tehma packen soll, aber ich hoffe hier ist es erstmal gut aufgehoben.
Im Moment sitze ich an der Kamerakalibration und habe da so ein paar Fragen bezüglich der Vorgehensweise. Als Bibliothek benutze ich OpenCV.
Ich fange erstmal ganz klein an, so dass etwaige Folgefehler sichtbar werden.
http://www.imagebanana.com/view/8urtt1b1/S5002865.JPG
Unten rechts ist das Prinzip einer Lochkamera zu sehen. Der Schnittpunkt beider Gerade ist die Lochblende. So ergibt sich nach Strahlensätzen die Gleichung darunter. Um das alles ein wenig zu vereinfachen wird die Projektionsebene (Imager), nach vorne geschoben. Das sieht man dann in der Zeichnung darunter. An der Mathematik ändert sich nicht viel, nur, dass alles jetzt ein wenig anschaulicher ist. Diese Annahme führt dann zu dem Bild oben links.
Oben rechts sind die Gleichungen für die Koordinaten aufgelistet (Bei der zweiten muss es Y/Z heissen). Erst einmal zu den Konstanten cx und cy.
Die optische Achse(Optical axis) sollte eigentlich in der Mitte der Projektionsebene liegen, so dass der Principal Point den Mittelpunkt dieser Ebene darstellt, aber die Kameras sind niemals so genau konstruiert, dass es auch eintrifft, deswegen geben cx und cy die Verschiebung in die jeweilige Richtung an.
Nun zu der Brennweite (Focal length). Das habe ich nicht ganz verstanden. Es wurde gesagt, dass die individuellen Pixel in einer Projektionsebene bei vielen billig Kameras nie quadratisch, sondern rechteckig sind. Deswegen gibt es weitere Paramter sx und sy die als Einheit Pixel pro Millimeter haben (Pixel/mm), dabei ist Millimeter nur eine Beispielgröße, denn es kann jede beliebige größe haben. Die Brennweite für die x-Koordinate ergibt sich dann also aus dem Produkt der physikalischen Brennweite und sx (fx = sx*F).
Ich habe mir unten links dafür ein Bild gezeichnet. Die Maße gelten für ein Kästchen in horizontaler, sowie vertikaler Richtung. Ich bin mir nicht sicher, ob meine Vorstellung davon richtig ist, denn ich hab eigentlich gar keine Ahnung warum das nötig ist. :?
Nun hat man also ein paar Konstanten, die die Kamera definieren. Um das alles schön zu verpacken werden die Konstanten in eine Matrix gepackt.
http://www.imagebanana.com/view/1pcd20a ... 010048.jpg
Dabei werden homogene Koordinaten benutzt (beim Punkt p ersichtlich). So ergeben sich dann die Gleichungen, die ich oben schon aufgezeigt habe.
Diese Matrix M nennt sich Intrinsics Matrix.
Dazu gesellt sich noch ein Distortion-Vector (im Bild fälschlicherweise Distortion Matrix genannt). Die Herleitung nehme ich einfach mal so hin, da ich von Taylor-Reihen etc. keine Ahnung habe.
http://www.imagebanana.com/view/xkfg3xvx/S5002866.JPG
Es gibt die radiale- und die tangentiale-Verzerrung, die überwiegend eine Rolle spielen.
Nachdem man sich jetzt diesen Problemen entledigt hat, geht man genauer auf die Überführung von Punkten aus der realen Welt in die Projektionseben ein.
http://www.imagebanana.com/view/qza1qm6 ... 010050.jpg
Wie darf ich mir hier aber die Funktion des Translationsvektors t vorstellen? Es wird gesagt, dass er dazu dient die Koordinatenursprünge auf einen Punkt zu bringen, sodass O in C liegt. Heisst es dass der Punkt P0 dann auf der Projektionsebene liegt, also in Pc? Und woher taucht plötzlich das Koordinatensystem des Objekts bzw. des Punktes P0 auf bzw. wie wird es definiert?
Wie kann ich mir außerdem die Rotation erklären? Wozu muss rotiert werden? Werden nicht einfach alle Punkte durch einen Translationsvektor auf die Projektionsebene gebracht?
Ich habe für mich bis jetzt nur eine Erklärung für die Rotation gefunden. Wenn der Punkt Q in einem der Quadranten liegt, also nicht in der xz- oder yz-Ebene (z = otpische achse), so muss der Punkt rotiert werden, damit sich die Beziehungen vom ersten Whiteboardbild ergeben und man die Koordinaten für den repräsentativen Punkt q berechnen kann:
http://www.imagebanana.com/view/cth0isq ... 010049.jpg
Rechts sind die beiden Rotationen schon vollführt worden, sodass der Punkt in der jeweiligen Ebene liegt. So ergeben sich die Beziehungen da drüber, die zu den ursprünglichen Formeln im ersten Whiteboardbild führen.
Wenn dies der Fall ist, wozu wird dann noch der Translationsvektor gebraucht, denn er ist ja im endeffekt nichts anderes, als die direkte Verbindungslinie von q und Q und hat mit den Gleichungen des ersten Whiteboardbildes nichts zu tun.
Mir stellt sich also die Frage warum zugleich rotiert und transferiert werden muss.