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 Kalibrierung), 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 identische
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:
HomMat3D
(input_control) hom_mat3d →
(real)
3×4 3D-Transformationsmatrix.
PrincipalPointRow
(input_control) point.y →
(real / integer)
Zeilenkoordinate des Hauptpunktes.
Defaultwert: 256
Wertevorschläge: 16, 32, 64, 128, 240, 256, 512
PrincipalPointCol
(input_control) point.x →
(real / integer)
Spaltenkoordinate des Hauptpunktes.
Defaultwert: 256
Wertevorschläge: 16, 32, 64, 128, 256, 320, 512
Focus
(input_control) number →
(real / integer)
Brennweite in Pixeln.
Defaultwert: 256
Wertevorschläge: 1, 2, 5, 256, 32768
HomMat2D
(output_control) hom_mat2d →
(real)
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