affine_trans_contour_xldT_affine_trans_contour_xldAffineTransContourXldAffineTransContourXld (Operator)

Name

affine_trans_contour_xldT_affine_trans_contour_xldAffineTransContourXldAffineTransContourXld — Anwenden einer beliebigen affinen 2D-Transformation auf XLD-Konturen.

Signatur

affine_trans_contour_xld(Contours : ContoursAffineTrans : HomMat2D : )

Herror T_affine_trans_contour_xld(const Hobject Contours, Hobject* ContoursAffineTrans, const Htuple HomMat2D)

void AffineTransContourXld(const HObject& Contours, HObject* ContoursAffineTrans, const HTuple& HomMat2D)

HXLDCont HXLDCont::AffineTransContourXld(const HHomMat2D& HomMat2D) const

HXLDCont HHomMat2D::AffineTransContourXld(const HXLDCont& Contours) const

static void HOperatorSet.AffineTransContourXld(HObject contours, out HObject contoursAffineTrans, HTuple homMat2D)

HXLDCont HXLDCont.AffineTransContourXld(HHomMat2D homMat2D)

HXLDCont HHomMat2D.AffineTransContourXld(HXLDCont contours)

Beschreibung

affine_trans_contour_xldaffine_trans_contour_xldAffineTransContourXldAffineTransContourXldAffineTransContourXld wendet eine beliebige affine 2D-Transformation (Skalierung, Drehung, Verschiebung, Scherung) auf die in ContoursContoursContoursContourscontours übergebenen XLD-Konturen an und liefert die transformierten Konturen in ContoursAffineTransContoursAffineTransContoursAffineTransContoursAffineTranscontoursAffineTrans zurück. Die Transformation wird durch eine homogene Transformationsmatrix beschrieben, die in HomMat2DHomMat2DHomMat2DHomMat2DhomMat2D übergeben wird. Diese kann mit Hilfe der Operatoren hom_mat2d_identityhom_mat2d_identityHomMat2dIdentityHomMat2dIdentityHomMat2dIdentity, hom_mat2d_scalehom_mat2d_scaleHomMat2dScaleHomMat2dScaleHomMat2dScale, hom_mat2d_rotatehom_mat2d_rotateHomMat2dRotateHomMat2dRotateHomMat2dRotate, hom_mat2d_translatehom_mat2d_translateHomMat2dTranslateHomMat2dTranslateHomMat2dTranslate etc. aufgebaut werden oder das Resultat von Operatoren wie vector_angle_to_rigidvector_angle_to_rigidVectorAngleToRigidVectorAngleToRigidVectorAngleToRigid sein.

Die Einträge der homogenen Transformationsmatrix werden so interpretiert, dass die Zeilen-Koordinate des Bildes der x-Koordinate und die Spalten-Koordinate des Bildes der y-Koordinate des Koordinatensystems entspricht, in dem die Transformationsmatrix definiert wurde. Dies ist notwendig, um für das Bild ein rechtshändiges Koordinatensystem zu erhalten. Insbesondere werden dadurch Rotationen im korrekten Drehsinn ausgeführt. Die Koordinatenreihenfolge (x,y) der Matrizen entspricht dann der üblichen Koordinatenreihenfolge (Zeile,Spalte) der Bilder.

Achtung

affine_trans_contour_xldaffine_trans_contour_xldAffineTransContourXldAffineTransContourXldAffineTransContourXld verwendet nicht das HALCON-Standard-Koordinatensystem (mit dem Ursprung im Mittelpunkt des linken oberen Pixels) sondern das gleiche Koordinatensystem wie affine_trans_pixelaffine_trans_pixelAffineTransPixelAffineTransPixelAffineTransPixel, d.h. der Ursprung liegt in der linken oberen Ecke des linken oberen Pixels. Eine Transformation mit affine_trans_contour_xldaffine_trans_contour_xldAffineTransContourXldAffineTransContourXldAffineTransContourXld entspricht für jeden Punkt der Kontur einer Kette von Transformationen (Ein- und Ausgabekoordinaten als homogene Vektoren dargestellt, siehe affine_trans_pixelaffine_trans_pixelAffineTransPixelAffineTransPixelAffineTransPixel). Dies kann zu unerwarteten Ergebnissen führen, wenn die Transformationsmatrix unter Verwendung von Koordinaten erstellt wurde, die von der Kontur mit Operatoren wie z.B. area_center_xldarea_center_xldAreaCenterXldAreaCenterXldAreaCenterXld abgeleitet wurden. Wenn z.B. eine rotationssymmetrische XLD Kontur unter Verwendung von hom_mat2d_rotatehom_mat2d_rotateHomMat2dRotateHomMat2dRotateHomMat2dRotate um ihren mit area_center_xldarea_center_xldAreaCenterXldAreaCenterXldAreaCenterXld bestimmten Schwerpunkt rotiert wird, so liegt die transformierte Kontur nicht auf der Originalkontur. Dieser Effekt kann dadurch kompensiert werden, dass vor dem Aufruf von affine_trans_contour_xldaffine_trans_contour_xldAffineTransContourXldAffineTransContourXldAffineTransContourXld die Transformationsmatrix HomMat2DHomMat2DHomMat2DHomMat2DhomMat2D durch die beiden folgenden Translationen modifiziert wird:

hom_mat2d_translate(HomMat2D, 0.5, 0.5, HomMat2DTmp) hom_mat2d_translate_local(HomMat2DTmp, -0.5, -0.5, HomMat2DAdapted) affine_trans_contour_xld(Contours, ContoursAffineTrans, HomMat2DAdapted)

Ein Überblick zu den verschiedenen in HALCON verwendeten 2D Koordinatensystemen ist in der Einleitung zum Kapitel Transformationen / 2D-Transformationen gegeben.

Ausführungsinformationen

Parameter

ContoursContoursContoursContourscontours (input_object)  xld_cont(-array) objectHXLDContHXLDContHobject

Eingabe-XLD-Konturen.

ContoursAffineTransContoursAffineTransContoursAffineTransContoursAffineTranscontoursAffineTrans (output_object)  xld_cont(-array) objectHXLDContHXLDContHobject *

Transformierte XLD-Konturen.

HomMat2DHomMat2DHomMat2DHomMat2DhomMat2D (input_control)  hom_mat2d HHomMat2D, HTupleHTupleHtuple (real) (double) (double) (double)

Eingabe-Transformationsmatrix.

Ergebnis

Falls die Matrix HomMat2DHomMat2DHomMat2DHomMat2DhomMat2D eine affine Abbildung darstellt (d.h. keine projektive Abbildung), liefert affine_trans_contour_xldaffine_trans_contour_xldAffineTransContourXldAffineTransContourXldAffineTransContourXld den Wert 2 (H_MSG_TRUE) zurück. Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.

Vorgänger

hom_mat2d_identityhom_mat2d_identityHomMat2dIdentityHomMat2dIdentityHomMat2dIdentity, hom_mat2d_translatehom_mat2d_translateHomMat2dTranslateHomMat2dTranslateHomMat2dTranslate, hom_mat2d_rotatehom_mat2d_rotateHomMat2dRotateHomMat2dRotateHomMat2dRotate, hom_mat2d_scalehom_mat2d_scaleHomMat2dScaleHomMat2dScaleHomMat2dScale, hom_mat2d_reflecthom_mat2d_reflectHomMat2dReflectHomMat2dReflectHomMat2dReflect

Siehe auch

affine_trans_imageaffine_trans_imageAffineTransImageAffineTransImageAffineTransImage, affine_trans_regionaffine_trans_regionAffineTransRegionAffineTransRegionAffineTransRegion

Modul

Foundation