KlassenKlassenKlassenKlassen | | | | Operatoren

affine_trans_polygon_xldT_affine_trans_polygon_xldAffineTransPolygonXldaffine_trans_polygon_xldAffineTransPolygonXldAffineTransPolygonXld (Operator)

Name

affine_trans_polygon_xldT_affine_trans_polygon_xldAffineTransPolygonXldaffine_trans_polygon_xldAffineTransPolygonXldAffineTransPolygonXld — Anwenden einer beliebigen affinen Transformation auf XLD-Polygone

Signatur

affine_trans_polygon_xld(Polygons : PolygonsAffineTrans : HomMat2D : )

Herror T_affine_trans_polygon_xld(const Hobject Polygons, Hobject* PolygonsAffineTrans, const Htuple HomMat2D)

Herror affine_trans_polygon_xld(Hobject Polygons, Hobject* PolygonsAffineTrans, const HTuple& HomMat2D)

HXLDPoly HXLDPoly::AffineTransPolygonXld(const HTuple& HomMat2D) const

HXLDPolyArray HXLDPolyArray::AffineTransPolygonXld(const HTuple& HomMat2D) const

void AffineTransPolygonXld(const HObject& Polygons, HObject* PolygonsAffineTrans, const HTuple& HomMat2D)

HXLDPoly HXLDPoly::AffineTransPolygonXld(const HHomMat2D& HomMat2D) const

HXLDPoly HHomMat2D::AffineTransPolygonXld(const HXLDPoly& Polygons) const

void HOperatorSetX.AffineTransPolygonXld(
[in] IHUntypedObjectX* Polygons, [out] IHUntypedObjectX*PolygonsAffineTrans, [in] VARIANT HomMat2d)

IHXLDPolyX* HXLDPolyX.AffineTransPolygonXld([in] IHHomMat2DX* HomMat2d)

IHXLDPolyX* HHomMat2DX.AffineTransPolygonXld([in] IHXLDPolyX* Polygons)

static void HOperatorSet.AffineTransPolygonXld(HObject polygons, out HObject polygonsAffineTrans, HTuple homMat2D)

HXLDPoly HXLDPoly.AffineTransPolygonXld(HHomMat2D homMat2D)

HXLDPoly HHomMat2D.AffineTransPolygonXld(HXLDPoly polygons)

Beschreibung

affine_trans_polygon_xldaffine_trans_polygon_xldAffineTransPolygonXldaffine_trans_polygon_xldAffineTransPolygonXldAffineTransPolygonXld wendet eine beliebige affine Transformation (Skalierung, Drehung, Verschiebung, Scherung) auf die in PolygonsPolygonsPolygonsPolygonsPolygonspolygons übergebenen XLD-Polygone an und liefert die transformierten Polygone in PolygonsAffineTransPolygonsAffineTransPolygonsAffineTransPolygonsAffineTransPolygonsAffineTranspolygonsAffineTrans 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 transformierten Polygone werden in PolygonsAffineTransPolygonsAffineTransPolygonsAffineTransPolygonsAffineTransPolygonsAffineTranspolygonsAffineTrans zurückgeliefert.

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

Die XLD-Konturen, die möglicherweise von PolygonsPolygonsPolygonsPolygonsPolygonspolygons referenziert werden, werden weder transformiert noch mit den Ergebnispolygonen abgespeichert, da dies im allgemeinen nicht möglich ist, ohne Inkonsistenzen bei den Attributen der XLD-Konturen zu erzeugen. Daher kann es beim Aufruf von Operatoren, die auf die zu einem Polygon gehörigen Konturen zugreifen, z.B. split_contours_xldsplit_contours_xldSplitContoursXldsplit_contours_xldSplitContoursXldSplitContoursXld, zu Fehlermeldungen kommen.

affine_trans_polygon_xldaffine_trans_polygon_xldAffineTransPolygonXldaffine_trans_polygon_xldAffineTransPolygonXldAffineTransPolygonXld 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_polygon_xldaffine_trans_polygon_xldAffineTransPolygonXldaffine_trans_polygon_xldAffineTransPolygonXldAffineTransPolygonXld entspricht für jeden Punkt des Polygons 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 dem Polygon mit Operatoren wie z.B. area_center_xldarea_center_xldAreaCenterXldarea_center_xldAreaCenterXldAreaCenterXld abgeleitet wurden. Wenn z.B. ein rotationssymmetrisches Polygon unter Verwendung von hom_mat2d_rotatehom_mat2d_rotateHomMat2dRotatehom_mat2d_rotateHomMat2dRotateHomMat2dRotate um seinen mit area_center_xldarea_center_xldAreaCenterXldarea_center_xldAreaCenterXldAreaCenterXld bestimmten Schwerpunkt rotiert wird, so liegt das transformierte Polygon nicht auf dem Originalpolygon. Dieser Effekt kann dadurch kompensiert werden, dass vor dem Aufruf von affine_trans_polygon_xldaffine_trans_polygon_xldAffineTransPolygonXldaffine_trans_polygon_xldAffineTransPolygonXldAffineTransPolygonXld 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_polygon_xld(Polygons, PolygonsAffineTrans, HomMat2DAdapted)

Parallelisierung

Parameter

PolygonsPolygonsPolygonsPolygonsPolygonspolygons (input_object)  xld_poly(-array) objectHXLDPolyHXLDPolyHXLDPolyHXLDPolyXHobject

Eingabe-XLD-Polygone.

PolygonsAffineTransPolygonsAffineTransPolygonsAffineTransPolygonsAffineTransPolygonsAffineTranspolygonsAffineTrans (output_object)  xld_poly(-array) objectHXLDPolyHXLDPolyHXLDPolyHXLDPolyXHobject *

Transformierte XLD-Polygone.

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_polygon_xldaffine_trans_polygon_xldAffineTransPolygonXldaffine_trans_polygon_xldAffineTransPolygonXldAffineTransPolygonXld 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, affine_trans_contour_xldaffine_trans_contour_xldAffineTransContourXldaffine_trans_contour_xldAffineTransContourXldAffineTransContourXld

Modul

Foundation


KlassenKlassenKlassenKlassen | | | | Operatoren