vector_to_anisoT_vector_to_anisoVectorToAnisoVectorToAnisovector_to_aniso (Operator)

Name

vector_to_anisoT_vector_to_anisoVectorToAnisoVectorToAnisovector_to_aniso — Erzeugt eine Näherung für eine anisotrope Ähnlichkeitstransformation aus Punktkorrespondenzen.

Signatur

vector_to_aniso( : : Px, Py, Qx, Qy : HomMat2D)

Herror T_vector_to_aniso(const Htuple Px, const Htuple Py, const Htuple Qx, const Htuple Qy, Htuple* HomMat2D)

void VectorToAniso(const HTuple& Px, const HTuple& Py, const HTuple& Qx, const HTuple& Qy, HTuple* HomMat2D)

void HHomMat2D::VectorToAniso(const HTuple& Px, const HTuple& Py, const HTuple& Qx, const HTuple& Qy)

static void HOperatorSet.VectorToAniso(HTuple px, HTuple py, HTuple qx, HTuple qy, out HTuple homMat2D)

void HHomMat2D.VectorToAniso(HTuple px, HTuple py, HTuple qx, HTuple qy)

def vector_to_aniso(px: Sequence[float], py: Sequence[float], qx: Sequence[float], qy: Sequence[float]) -> Sequence[float]

Beschreibung

vector_to_anisovector_to_anisoVectorToAnisoVectorToAnisoVectorToAnisovector_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 HomMat2DHomMat2DHomMat2DHomMat2DhomMat2Dhom_mat_2d 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_scalehom_mat2d_scaleHomMat2dScaleHomMat2dScaleHomMat2dScalehom_mat2d_scale, hom_mat2d_rotatehom_mat2d_rotateHomMat2dRotateHomMat2dRotateHomMat2dRotatehom_mat2d_rotate und hom_mat2d_translatehom_mat2d_translateHomMat2dTranslateHomMat2dTranslateHomMat2dTranslatehom_mat2d_translate):

Die Punktkorrespondenzen werden in den Tupeln (PxPxPxPxpxpx,PyPyPyPypypy) und (QxQxQxQxqxqx,QyQyQyQyqyqy) ü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 (PxPxPxPxpxpx,PyPyPyPypypy) und den transformierten Zielpunkten (QxQxQxQxqxqx,QyQyQyQyqyqy) minimiert, wie in der folgenden Gleichung beschrieben (Punkte als homogene Vektoren dargestellt):

HomMat2DHomMat2DHomMat2DHomMat2DhomMat2Dhom_mat_2d kann direkt mit den Operatoren, die Daten mit affinen Abbildungen transformieren, z.B. affine_trans_imageaffine_trans_imageAffineTransImageAffineTransImageAffineTransImageaffine_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_anisovector_to_anisoVectorToAnisoVectorToAnisoVectorToAnisovector_to_aniso berechnet werden, indem die Punktkorrespondenzen in umgekehrter Reihenfolge übergeben werden, d.h. die Punkte (PxPxPxPxpxpx,PyPyPyPypypy) werden in (QxQxQxQxqxqx,QyQyQyQyqyqy) und umgekehrt. Die so erhaltene Transformation muss danach mit hom_mat2d_inverthom_mat2d_invertHomMat2dInvertHomMat2dInvertHomMat2dInverthom_mat2d_invert invertiert werden.

Achtung

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 (RowRowRowRowrowrow,ColumnColumnColumnColumncolumncolumn). 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.

Ausführungsinformationen

Parameter

PxPxPxPxpxpx (input_control)  point.x-array HTupleSequence[float]HTupleHtuple (real) (double) (double) (double)

X-Koordinaten der originalen Punkte.

PyPyPyPypypy (input_control)  point.y-array HTupleSequence[float]HTupleHtuple (real) (double) (double) (double)

Y-Koordinaten der originalen Punkte.

QxQxQxQxqxqx (input_control)  point.x-array HTupleSequence[float]HTupleHtuple (real) (double) (double) (double)

X-Koordinaten der transformierten Punkte.

QyQyQyQyqyqy (input_control)  point.y-array HTupleSequence[float]HTupleHtuple (real) (double) (double) (double)

Y-Koordinaten der transformierten Punkte.

HomMat2DHomMat2DHomMat2DHomMat2DhomMat2Dhom_mat_2d (output_control)  hom_mat2d HHomMat2D, HTupleSequence[float]HTupleHtuple (real) (double) (double) (double)

Ausgabe-Transformationsmatrix.

Nachfolger

hom_mat2d_inverthom_mat2d_invertHomMat2dInvertHomMat2dInvertHomMat2dInverthom_mat2d_invert, affine_trans_imageaffine_trans_imageAffineTransImageAffineTransImageAffineTransImageaffine_trans_image, affine_trans_image_sizeaffine_trans_image_sizeAffineTransImageSizeAffineTransImageSizeAffineTransImageSizeaffine_trans_image_size, affine_trans_regionaffine_trans_regionAffineTransRegionAffineTransRegionAffineTransRegionaffine_trans_region, affine_trans_contour_xldaffine_trans_contour_xldAffineTransContourXldAffineTransContourXldAffineTransContourXldaffine_trans_contour_xld, affine_trans_polygon_xldaffine_trans_polygon_xldAffineTransPolygonXldAffineTransPolygonXldAffineTransPolygonXldaffine_trans_polygon_xld, affine_trans_point_2daffine_trans_point_2dAffineTransPoint2dAffineTransPoint2dAffineTransPoint2daffine_trans_point_2d

Alternativen

vector_to_hom_mat2dvector_to_hom_mat2dVectorToHomMat2dVectorToHomMat2dVectorToHomMat2dvector_to_hom_mat2d, vector_to_similarityvector_to_similarityVectorToSimilarityVectorToSimilarityVectorToSimilarityvector_to_similarity, vector_to_rigidvector_to_rigidVectorToRigidVectorToRigidVectorToRigidvector_to_rigid

Siehe auch

vector_field_to_hom_mat2dvector_field_to_hom_mat2dVectorFieldToHomMat2dVectorFieldToHomMat2dVectorFieldToHomMat2dvector_field_to_hom_mat2d, point_line_to_hom_mat2dpoint_line_to_hom_mat2dPointLineToHomMat2dPointLineToHomMat2dPointLineToHomMat2dpoint_line_to_hom_mat2d

Modul

Foundation