affine_trans_polygon_xld
— Anwenden einer beliebigen affinen Transformation auf XLD-Polygone
affine_trans_polygon_xld(Polygons : PolygonsAffineTrans : HomMat2D : )
affine_trans_polygon_xld
wendet eine beliebige affine Transformation
(Skalierung, Drehung, Verschiebung, Scherung) auf die in Polygons
übergebenen XLD-Polygone an und liefert die transformierten Polygone in
PolygonsAffineTrans
zurück. Die Transformation wird durch eine
homogene Transformationsmatrix beschrieben, die in HomMat2D
übergeben wird. Diese kann mit Hilfe der Operatoren
hom_mat2d_identity
, hom_mat2d_scale
,
hom_mat2d_rotate
, hom_mat2d_translate
etc. aufgebaut werden
oder das Resultat von Operatoren wie vector_angle_to_rigid
sein. Die
transformierten Polygone werden in PolygonsAffineTrans
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.
Die XLD-Konturen, die möglicherweise von Polygons
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_xld
, zu Fehlermeldungen kommen.
affine_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_pixel
, d.h. der Ursprung liegt in der linken oberen
Ecke des linken oberen Pixels.
Eine Transformation mit affine_trans_polygon_xld
entspricht für jeden Punkt des Polygons einer Kette von Transformationen
(Ein- und Ausgabekoordinaten als homogene Vektoren dargestellt,
siehe affine_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_xld
abgeleitet wurden.
Wenn z.B. ein rotationssymmetrisches Polygon unter Verwendung von
hom_mat2d_rotate
um seinen mit area_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_xld
die
Transformationsmatrix HomMat2D
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)
Ein Überblick zu den verschiedenen in HALCON verwendeten 2D Koordinatensystemen ist in der Einleitung zum Kapitel Transformationen / 2D-Transformationen gegeben.
Polygons
(input_object) xld_poly(-array) →
object
Eingabe-XLD-Polygone.
PolygonsAffineTrans
(output_object) xld_poly(-array) →
object
Transformierte XLD-Polygone.
HomMat2D
(input_control) hom_mat2d →
(real)
Eingabe-Transformationsmatrix.
Falls die Matrix HomMat2D
eine affine Abbildung darstellt
(d.h. keine projektive Abbildung), liefert
affine_trans_polygon_xld
den Wert 2 (H_MSG_TRUE) zurück.
Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.
hom_mat2d_identity
,
hom_mat2d_translate
,
hom_mat2d_rotate
,
hom_mat2d_scale
,
hom_mat2d_reflect
affine_trans_image
,
affine_trans_region
,
affine_trans_contour_xld
Foundation