KlassenKlassenKlassenKlassen | | | | Operatoren

affine_trans_contour_xldT_affine_trans_contour_xldAffineTransContourXldaffine_trans_contour_xldAffineTransContourXldAffineTransContourXld (Operator)

Name

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

Signatur

affine_trans_contour_xld(Contours : ContoursAffinTrans : HomMat2D : )

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

Herror affine_trans_contour_xld(Hobject Contours, Hobject* ContoursAffinTrans, const HTuple& HomMat2D)

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

HXLDContArray HXLDContArray::AffineTransContourXld(const HTuple& HomMat2D) const

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

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

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

void HOperatorSetX.AffineTransContourXld(
[in] IHUntypedObjectX* Contours, [out] IHUntypedObjectX*ContoursAffinTrans, [in] VARIANT HomMat2d)

IHXLDContX* HXLDContX.AffineTransContourXld([in] IHHomMat2DX* HomMat2d)

IHXLDContX* HHomMat2DX.AffineTransContourXld([in] IHXLDContX* Contours)

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

HXLDCont HXLDCont.AffineTransContourXld(HHomMat2D homMat2D)

HXLDCont HHomMat2D.AffineTransContourXld(HXLDCont contours)

Beschreibung

affine_trans_contour_xldaffine_trans_contour_xldAffineTransContourXldaffine_trans_contour_xldAffineTransContourXldAffineTransContourXld wendet eine beliebige affine 2D-Transformation (Skalierung, Drehung, Verschiebung, Scherung) auf die in ContoursContoursContoursContoursContourscontours übergebenen XLD-Konturen an und liefert die transformierten Konturen in ContoursAffinTransContoursAffinTransContoursAffinTransContoursAffinTransContoursAffinTranscontoursAffinTrans zurück. Die Transformation wird durch eine homogene Transformationsmatrix beschrieben, die in HomMat2DHomMat2DHomMat2DHomMat2DHomMat2DhomMat2D übergeben wird. Diese kann mit Hilfe der Operatoren hom_mat2d_identityhom_mat2d_identityHomMat2dIdentityhom_mat2d_identityHomMat2dIdentityHomMat2dIdentity, hom_mat2d_scalehom_mat2d_scaleHomMat2dScalehom_mat2d_scaleHomMat2dScaleHomMat2dScale, hom_mat2d_rotatehom_mat2d_rotateHomMat2dRotatehom_mat2d_rotateHomMat2dRotateHomMat2dRotate, hom_mat2d_translatehom_mat2d_translateHomMat2dTranslatehom_mat2d_translateHomMat2dTranslateHomMat2dTranslate etc. aufgebaut werden oder das Resultat von Operatoren wie vector_angle_to_rigidvector_angle_to_rigidVectorAngleToRigidvector_angle_to_rigidVectorAngleToRigidVectorAngleToRigid 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_xldAffineTransContourXldaffine_trans_contour_xldAffineTransContourXldAffineTransContourXld verwendet nicht das HALCON-Standard-Koordinatensystem (mit dem Ursprung im Mittelpunkt des linken oberen Pixels) sondern das gleiche Koordinatensystem wie affine_trans_pixelaffine_trans_pixelAffineTransPixelaffine_trans_pixelAffineTransPixelAffineTransPixel, d.h. der Ursprung liegt in der linken oberen Ecke des linken oberen Pixels. Eine Transformation mit affine_trans_contour_xldaffine_trans_contour_xldAffineTransContourXldaffine_trans_contour_xldAffineTransContourXldAffineTransContourXld entspricht für jeden Punkt der Kontur einer Kette von Transformationen (Ein- und Ausgabekoordinaten als homogene Vektoren dargestellt, siehe affine_trans_pixelaffine_trans_pixelAffineTransPixelaffine_trans_pixelAffineTransPixelAffineTransPixel). 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_xldAreaCenterXldarea_center_xldAreaCenterXldAreaCenterXld abgeleitet wurden. Wenn z.B. eine rotationssymmetrische XLD Kontur unter Verwendung von hom_mat2d_rotatehom_mat2d_rotateHomMat2dRotatehom_mat2d_rotateHomMat2dRotateHomMat2dRotate um ihren mit area_center_xldarea_center_xldAreaCenterXldarea_center_xldAreaCenterXldAreaCenterXld 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_xldAffineTransContourXldaffine_trans_contour_xldAffineTransContourXldAffineTransContourXld die Transformationsmatrix HomMat2DHomMat2DHomMat2DHomMat2DHomMat2DhomMat2D 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, ContoursAffinTrans, HomMat2DAdapted)

Parallelisierung

Parameter

ContoursContoursContoursContoursContourscontours (input_object)  xld_cont(-array) objectHXLDContHXLDContHXLDContHXLDContXHobject

Eingabe-XLD-Konturen.

ContoursAffinTransContoursAffinTransContoursAffinTransContoursAffinTransContoursAffinTranscontoursAffinTrans (output_object)  xld_cont(-array) objectHXLDContHXLDContHXLDContHXLDContXHobject *

Transformierte XLD-Konturen.

HomMat2DHomMat2DHomMat2DHomMat2DHomMat2DhomMat2D (input_control)  hom_mat2d HHomMat2D, HTupleHTupleHTupleHHomMat2DX, VARIANTHtuple (real) (double) (double) (double) (double) (double)

Eingabe-Transformationsmatrix.

Ergebnis

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

Vorgänger

hom_mat2d_identityhom_mat2d_identityHomMat2dIdentityhom_mat2d_identityHomMat2dIdentityHomMat2dIdentity, hom_mat2d_translatehom_mat2d_translateHomMat2dTranslatehom_mat2d_translateHomMat2dTranslateHomMat2dTranslate, hom_mat2d_rotatehom_mat2d_rotateHomMat2dRotatehom_mat2d_rotateHomMat2dRotateHomMat2dRotate, hom_mat2d_scalehom_mat2d_scaleHomMat2dScalehom_mat2d_scaleHomMat2dScaleHomMat2dScale, hom_mat2d_reflecthom_mat2d_reflectHomMat2dReflecthom_mat2d_reflectHomMat2dReflectHomMat2dReflect

Siehe auch

affine_trans_imageaffine_trans_imageAffineTransImageaffine_trans_imageAffineTransImageAffineTransImage, affine_trans_regionaffine_trans_regionAffineTransRegionaffine_trans_regionAffineTransRegionAffineTransRegion

Modul

Foundation


KlassenKlassenKlassenKlassen | | | | Operatoren