affine_trans_polygon_xldT_affine_trans_polygon_xldAffineTransPolygonXldAffineTransPolygonXldaffine_trans_polygon_xld (Operator)
Name
affine_trans_polygon_xldT_affine_trans_polygon_xldAffineTransPolygonXldAffineTransPolygonXldaffine_trans_polygon_xld — Anwenden einer beliebigen affinen Transformation auf XLD-Polygone
Signatur
Beschreibung
affine_trans_polygon_xldaffine_trans_polygon_xldAffineTransPolygonXldAffineTransPolygonXldAffineTransPolygonXldaffine_trans_polygon_xld wendet eine beliebige affine Transformation
(Skalierung, Drehung, Verschiebung, Scherung) auf die in PolygonsPolygonsPolygonsPolygonspolygonspolygons
übergebenen XLD-Polygone an und liefert die transformierten Polygone in
PolygonsAffineTransPolygonsAffineTransPolygonsAffineTransPolygonsAffineTranspolygonsAffineTranspolygons_affine_trans zurück. Die Transformation wird durch eine
homogene Transformationsmatrix beschrieben, die in HomMat2DHomMat2DHomMat2DHomMat2DhomMat2Dhom_mat_2d
übergeben wird. Diese kann mit Hilfe der Operatoren
hom_mat2d_identityhom_mat2d_identityHomMat2dIdentityHomMat2dIdentityHomMat2dIdentityhom_mat2d_identity, hom_mat2d_scalehom_mat2d_scaleHomMat2dScaleHomMat2dScaleHomMat2dScalehom_mat2d_scale,
hom_mat2d_rotatehom_mat2d_rotateHomMat2dRotateHomMat2dRotateHomMat2dRotatehom_mat2d_rotate, hom_mat2d_translatehom_mat2d_translateHomMat2dTranslateHomMat2dTranslateHomMat2dTranslatehom_mat2d_translate etc. aufgebaut werden
oder das Resultat von Operatoren wie vector_angle_to_rigidvector_angle_to_rigidVectorAngleToRigidVectorAngleToRigidVectorAngleToRigidvector_angle_to_rigid sein. Die
transformierten Polygone werden in PolygonsAffineTransPolygonsAffineTransPolygonsAffineTransPolygonsAffineTranspolygonsAffineTranspolygons_affine_trans
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_xldSplitContoursXldSplitContoursXldSplitContoursXldsplit_contours_xld, zu Fehlermeldungen kommen.
affine_trans_polygon_xldaffine_trans_polygon_xldAffineTransPolygonXldAffineTransPolygonXldAffineTransPolygonXldaffine_trans_polygon_xld verwendet nicht das
HALCON-Standard-Koordinatensystem (mit dem Ursprung im Mittelpunkt des
linken oberen Pixels) sondern das gleiche Koordinatensystem wie
affine_trans_pixelaffine_trans_pixelAffineTransPixelAffineTransPixelAffineTransPixelaffine_trans_pixel, d.h. der Ursprung liegt in der linken oberen
Ecke des linken oberen Pixels.
Eine Transformation mit affine_trans_polygon_xldaffine_trans_polygon_xldAffineTransPolygonXldAffineTransPolygonXldAffineTransPolygonXldaffine_trans_polygon_xld
entspricht für jeden Punkt des Polygons einer Kette von Transformationen
(Ein- und Ausgabekoordinaten als homogene Vektoren dargestellt,
siehe affine_trans_pixelaffine_trans_pixelAffineTransPixelAffineTransPixelAffineTransPixelaffine_trans_pixel).
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_xldAreaCenterXldAreaCenterXldAreaCenterXldarea_center_xld
abgeleitet wurden.
Wenn z.B. ein rotationssymmetrisches Polygon unter Verwendung von
hom_mat2d_rotatehom_mat2d_rotateHomMat2dRotateHomMat2dRotateHomMat2dRotatehom_mat2d_rotate um seinen mit area_center_xldarea_center_xldAreaCenterXldAreaCenterXldAreaCenterXldarea_center_xld
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_xldAffineTransPolygonXldAffineTransPolygonXldAffineTransPolygonXldaffine_trans_polygon_xld die
Transformationsmatrix HomMat2DHomMat2DHomMat2DHomMat2DhomMat2Dhom_mat_2d durch die beiden folgenden
Translationen modifiziert wird:
hom_mat2d_translate(HomMat2D, 0.5, 0.5, HomMat2DTmp)hom_mat2d_translate(HomMat2D, 0.5, 0.5, HomMat2DTmp)HomMat2dTranslate(HomMat2D, 0.5, 0.5, HomMat2DTmp)HomMat2dTranslate(HomMat2D, 0.5, 0.5, HomMat2DTmp)HomMat2dTranslate(HomMat2D, 0.5, 0.5, HomMat2DTmp)hom_mat2d_translate(HomMat2D, 0.5, 0.5, HomMat2DTmp)
|
hom_mat2d_translate_local(HomMat2DTmp, -0.5, -0.5, HomMat2DAdapted)hom_mat2d_translate_local(HomMat2DTmp, -0.5, -0.5, HomMat2DAdapted)HomMat2dTranslateLocal(HomMat2DTmp, -0.5, -0.5, HomMat2DAdapted)HomMat2dTranslateLocal(HomMat2DTmp, -0.5, -0.5, HomMat2DAdapted)HomMat2dTranslateLocal(HomMat2DTmp, -0.5, -0.5, HomMat2DAdapted)hom_mat2d_translate_local(HomMat2DTmp, -0.5, -0.5, HomMat2DAdapted)
|
affine_trans_polygon_xld(Polygons, PolygonsAffineTrans, HomMat2DAdapted)affine_trans_polygon_xld(Polygons, PolygonsAffineTrans, HomMat2DAdapted)AffineTransPolygonXld(Polygons, PolygonsAffineTrans, HomMat2DAdapted)AffineTransPolygonXld(Polygons, PolygonsAffineTrans, HomMat2DAdapted)AffineTransPolygonXld(Polygons, PolygonsAffineTrans, HomMat2DAdapted)affine_trans_polygon_xld(Polygons, PolygonsAffineTrans, HomMat2DAdapted)
|
Ein Überblick zu den verschiedenen in HALCON verwendeten 2D
Koordinatensystemen ist in der Einleitung zum Kapitel
Transformationen / 2D-Transformationen gegeben.
Ausführungsinformationen
- Multithreading-Typ: reentrant (läuft parallel zu nicht-exklusiven Operatoren).
- Multithreading-Bereich: global (kann von jedem Thread aufgerufen werden).
- Automatisch parallelisiert auf Tupelebene.
Parameter
PolygonsPolygonsPolygonsPolygonspolygonspolygons (input_object) xld_poly(-array) → objectHXLDPolyHObjectHXLDPolyHobject
Eingabe-XLD-Polygone.
PolygonsAffineTransPolygonsAffineTransPolygonsAffineTransPolygonsAffineTranspolygonsAffineTranspolygons_affine_trans (output_object) xld_poly(-array) → objectHXLDPolyHObjectHXLDPolyHobject *
Transformierte XLD-Polygone.
HomMat2DHomMat2DHomMat2DHomMat2DhomMat2Dhom_mat_2d (input_control) hom_mat2d → HHomMat2D, HTupleSequence[float]HTupleHtuple (real) (double) (double) (double)
Eingabe-Transformationsmatrix.
Ergebnis
Falls die Matrix HomMat2DHomMat2DHomMat2DHomMat2DhomMat2Dhom_mat_2d eine affine Abbildung darstellt
(d.h. keine projektive Abbildung), liefert
affine_trans_polygon_xldaffine_trans_polygon_xldAffineTransPolygonXldAffineTransPolygonXldAffineTransPolygonXldaffine_trans_polygon_xld den Wert 2 (H_MSG_TRUE) zurück.
Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.
Vorgänger
hom_mat2d_identityhom_mat2d_identityHomMat2dIdentityHomMat2dIdentityHomMat2dIdentityhom_mat2d_identity,
hom_mat2d_translatehom_mat2d_translateHomMat2dTranslateHomMat2dTranslateHomMat2dTranslatehom_mat2d_translate,
hom_mat2d_rotatehom_mat2d_rotateHomMat2dRotateHomMat2dRotateHomMat2dRotatehom_mat2d_rotate,
hom_mat2d_scalehom_mat2d_scaleHomMat2dScaleHomMat2dScaleHomMat2dScalehom_mat2d_scale,
hom_mat2d_reflecthom_mat2d_reflectHomMat2dReflectHomMat2dReflectHomMat2dReflecthom_mat2d_reflect
Siehe auch
affine_trans_imageaffine_trans_imageAffineTransImageAffineTransImageAffineTransImageaffine_trans_image,
affine_trans_regionaffine_trans_regionAffineTransRegionAffineTransRegionAffineTransRegionaffine_trans_region,
affine_trans_contour_xldaffine_trans_contour_xldAffineTransContourXldAffineTransContourXldAffineTransContourXldaffine_trans_contour_xld
Modul
Foundation