| Operatoren |
hom_mat3d_project — Projiziert eine Matrix zur affinen 3D-Transformation in eine 2D projektive Transformationsmatrix.
hom_mat3d_project( : : HomMat3D, PrincipalPointRow, PrincipalPointCol, Focus : HomMat2D)
hom_mat3d_project berechnet aus der homogenen 3x4 Transformationsmatrix HomMat3D, die eine affine Transformation im 3D beschreibt, eine homogene projektive Transformationsmatrix, die dazu verwendet werden kann, eine Ebene, insbesondere eine Ebene, die ein Bild enthält, zu projizieren. Die projektive Transformationsmatrix beschreibt eine projektive Transformation zwischen zwei (zweidimensionalen) Ebenen.
Dies kann zur Erzeugung von perspektivischen Verzerrungen genutzt werden, welche durch die Projektion einer Ebene entstehen, die um eine andere Achse als die z-Achse gedreht ist. Im Normalfall werden projektive Transformationen aber aus Punktkorrespondenzen ermittelt (siehe vector_to_proj_hom_mat2d, hom_vector_to_proj_hom_mat2d und proj_match_points_ransac).
Matrizen zur Drehung, Skalierung oder Verschiebung können mit Hilfe der Operatoren hom_mat3d_identity, hom_mat3d_scale, hom_mat3d_rotate, hom_mat3d_translate und pose_to_hom_mat3d konstruiert werden.
Dabei ist zu beachten, dass bei den 3D-Transformationen die x-Achse der Spaltenachse und die y-Achse der Zeilenachse entspricht (siehe auch calibrate_cameras), während bei projective_trans_image in HomMat2D die erste Zeile der Zeilenachse und die zweite Zeile der Transformation der Spaltenachse des Bildes entspricht.
Der Punkt (PrincipalPointRow, PrincipalPointCol) ist dabei das optische Zentrum der Projektion und der Punkt (PrincipalPointRow, PrincipalPointCol, 0) im Dreidimensionalen somit der virtuelle Standpunkt der Kamera. Die Blickrichtung entspricht der positiven z-Achse.
In diesem virtuellen Raum befindet sich die Ebene des Eingabebildes, ebenso wie die Bildebene der Projektion, an der Stelle z=Focus, also Focus Pixel von der Kamera entfernt. Dies führt dazu, dass die Verwendung der identischen Abbildung als Eingabematrix HomMat3D eine Matrix HomMat2D ergibt, die ebenfalls die identsche Abbildung im Zweidimensionalen darstellt.
Der Parameter Focus ist also die „Brennweite“ der verwendeten virtuellen Kamera und in der Einheit Pixel angegeben. Durch ihn kann der Grad der perspektivischen Verzerrungen verändert werden. Dieselbe Eingabematrix HomMat3D führt bei großer Brennweite zu schwächeren Verzerrungen als bei kleiner Brennweite.
Sei H die affine 3D-Matrix mit Elementen , (r,c)=(PrincipalPointRow,PrincipalPointCol) und f=Focus.
Dann wird die projektive Transformationsmatrix wie folgt berechnet: Zunächst wird eine 3x4 Projektionsmatrix berechnet als:
Da das Bild einer Ebene, in der die Punkte die Form (x, y, f, 1)^T haben, berechnet werden soll, werden die letzten zwei Spalten von Q zusammengefasst:
Zuletzt werden die Spalten und Zeilen von R so vertauscht, dass die erste Zeile von P der Transformation der Zeilenkoordinaten und die zweite Zeile von P der Transformation der Spaltenkoordinaten entspricht, so dass P direkt in projective_trans_image verwendet werden kann:
Insgesamt ergibt sich also:
3×4 3D-Transformationsmatrix.
Zeilenkoordinate des Hauptpunktes.
Defaultwert: 256
Wertevorschläge: 16, 32, 64, 128, 240, 256, 512
Spaltenkoordinate des Hauptpunktes.
Defaultwert: 256
Wertevorschläge: 16, 32, 64, 128, 256, 320, 512
Brennweite in Pixeln.
Defaultwert: 256
Wertevorschläge: 1, 2, 5, 256, 32768
Homogene projektive Transformationsmatrix.
hom_mat3d_identity, hom_mat3d_rotate, hom_mat3d_translate, hom_mat3d_scale
projective_trans_image, projective_trans_point_2d, projective_trans_region, projective_trans_contour_xld, hom_mat2d_invert
Foundation
| Operatoren |