vector_to_aniso
— Erzeugt eine Näherung für eine anisotrope Ähnlichkeitstransformation
aus Punktkorrespondenzen.
vector_to_aniso
erzeugt aus (mindestens drei)
Punktkorrespondenzen eine Näherung für eine anisotrope
Ähnlichkeitstransformation, d.h. eine Transformation bestehend aus einer
ungleichförmigen Skalierung, einer Rotation und einer Translation, und
liefert sie in der homogenen Transformationsmatrix HomMat2D
zurück. Diese beinhaltet 3 Komponenten: eine Skalierungsmatrix
S mit nicht-identischer Skalierung in x- und
y-Richtung, eine Rotationsmatrix R und
einen Translationsvektor t (siehe auch
hom_mat2d_scale
, hom_mat2d_rotate
und
hom_mat2d_translate
):
Die Punktkorrespondenzen werden in den Tupeln
(Px
,Py
) und (Qx
,Qy
) übergeben,
wobei korrespondierende Punkte an denselben Indexpositionen stehen
müssen. Die Transformation ist durch die mindestens drei
Punktkorrespondenzen immer überbestimmt. Deswegen ist die zurückgelieferte
Transformation diejenige, die die Abstände zwischen den Eingabepunkten
(Px
,Py
) und den transformierten Zielpunkten
(Qx
,Qy
) minimiert, wie in der folgenden Gleichung
beschrieben (Punkte als homogene Vektoren dargestellt):
HomMat2D
kann direkt mit den Operatoren, die Daten mit affinen
Abbildungen transformieren, z.B. affine_trans_image
, verwendet
werden.
In einer anisotropen Ähnlichkeitstransformation, wie sie oben definiert
ist, werden die Punkte zuerst skaliert und dann rotiert. Manchmal ist
eine Transformation nützlich, bei der zuerst rotiert und dann skaliert
wird. Diese Art von Transformation kann mit vector_to_aniso
berechnet werden, indem die Punktkorrespondenzen in umgekehrter
Reihenfolge übergeben werden, d.h. die Punkte (Px
,Py
)
werden in (Qx
,Qy
) und umgekehrt. Die so erhaltene
Transformation muss danach mit hom_mat2d_invert
invertiert
werden.
Es ist zu beachten, dass homogene Transformationsmatrizen sich auf
ein allgemeines rechtshändiges mathematisches Koordinatensystem
beziehen. Falls eine homogene Transformationsmatrix zur
Transformation von Bildern, Regionen, XLD-Konturen oder anderen
Daten, die aus Bildern extrahiert wurden, verwendet werden soll, ist
zu beachten, dass die Zeilenkoordinaten in den x-Koordinaten und die
Spaltenkoordinaten in den y-Koordinaten übergeben werden müssen.
Die Übergabereihenfolge von Zeilen- und Spaltenkoordinaten
entspricht also der üblichen Reihenfolge
(Row
,Column
). Diese Konvention ist
unerlässlich, um bei der Transformation von Bilddaten ein
rechtshändiges Koordinatensystem zu erhalten, so dass
z.B. insbesondere Rotationen in der mathematisch korrekten
Drehrichtung ausgeführt werden.
Weiterhin ist zu beachten, dass, falls eine homogene Transformationsmatrix zur Transformation von Bildern, Regionen, XLD-Konturen oder anderen Daten, die aus Bildern extrahiert wurden, verwendet werden soll, angenommen wird, dass der Ursprung des Koordinatensystems der homogenen Transformationsmatrix in der linken oberen Ecke des Pixels liegt. Die Bildverarbeitungsoperatoren, die Punktkoordinaten zurückliefern, nehmen hingegen ein Koordinatensystem an, in dem der Ursprung in der Mitte eines Pixels liegt. Daher muss, um eine konsistente homogene Transformationsmatrix zu erhalten, 0.5 zu den Punktkoordinaten addiert werden, bevor die Transformation berechnet wird.
Px
(input_control) point.x-array →
(real)
X-Koordinaten der originalen Punkte.
Py
(input_control) point.y-array →
(real)
Y-Koordinaten der originalen Punkte.
Qx
(input_control) point.x-array →
(real)
X-Koordinaten der transformierten Punkte.
Qy
(input_control) point.y-array →
(real)
Y-Koordinaten der transformierten Punkte.
HomMat2D
(output_control) hom_mat2d →
(real)
Ausgabe-Transformationsmatrix.
hom_mat2d_invert
,
affine_trans_image
,
affine_trans_image_size
,
affine_trans_region
,
affine_trans_contour_xld
,
affine_trans_polygon_xld
,
affine_trans_point_2d
vector_to_hom_mat2d
,
vector_to_similarity
,
vector_to_rigid
vector_field_to_hom_mat2d
,
point_line_to_hom_mat2d
Foundation