affine_trans_region
— Anwenden einer beliebigen affinen 2D-Transformation auf Regionen.
affine_trans_region(Region : RegionAffineTrans : HomMat2D, Interpolate : )
affine_trans_region
wendet eine beliebige affine
2D-Transformation (Skalierung, Drehung, Verschiebung, Scherung) auf die in
Region
übergebenen Regionen an und liefert die transformierten
Regionen in RegionAffineTrans
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 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.
Der Parameter Interpolate
gibt dabei an, ob die Transformation mit
einer internen Interpolation ausgeführt werden soll oder nicht. Es sind die
in affine_trans_image
beschriebenen Optionen
'nearest_neighbor' und 'constant' verfügbar. Eine
Interpolation kann insbesondere bei Vergrößerungen zu glatteren
Regionenrändern führen. Allerdings steigt dadurch die Laufzeit erheblich.
affine_trans_region
ist i.a. nicht reversibel (Clipping
und Rasterung bei Rotation und Streckung).
affine_trans_region
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_region
entspricht für jeden Punkt der Region 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 der Region mit Operatoren wie z.B. area_center
abgeleitet wurden. Wenn z.B. eine
rotationssymmetrische Region unter Verwendung von
hom_mat2d_rotate
um ihren mit area_center
bestimmten Schwerpunkt rotiert wird, so liegt die transformierte Region
nicht auf der Originalregion. Dieser Effekt kann dadurch kompensiert
werden, dass vor dem Aufruf von affine_trans_region
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_region(Region, RegionAffineTrans, HomMat2DAdapted, 'nearest_neighbor')
Ein Überblick zu den verschiedenen in HALCON verwendeten 2D Koordinatensystemen ist in der Einleitung zum Kapitel Transformationen / 2D-Transformationen gegeben.
Region
(input_object) region(-array) →
object
Zu transformierende Region(en).
RegionAffineTrans
(output_object) region(-array) →
object
Region(en), die transformiert wurde(n).
Parameteranzahl: RegionAffineTrans == Region
HomMat2D
(input_control) hom_mat2d →
(real)
Eingabe-Transformationsmatrix.
Interpolate
(input_control) string →
(string)
Soll die Transformation mit Interpolation ausgeführt werden?
Defaultwert: 'nearest_neighbor'
Werteliste: 'constant' , 'nearest_neighbor'
Falls die Matrix HomMat2D
eine affine Abbildung darstellt
(d.h. keine projektive Abbildung), liefert
affine_trans_region
den Wert 2 (H_MSG_TRUE) zurück. Das Verhalten bei
leerer Eingabe (keine Eingaberegionen vorhanden) lässt sich mittels
set_system('no_object_result',<Result>)
, das bei leerer
Region mit set_system('empty_region_result',<Result>)
und
das bei leerer Ergebnisregion mit
set_system('store_empty_region',<'true'/'false'>)
festlegen.
Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.
hom_mat2d_identity
,
hom_mat2d_scale
,
hom_mat2d_translate
,
hom_mat2d_invert
,
hom_mat2d_rotate
,
hom_mat2d_reflect
move_region
,
mirror_region
,
zoom_region
Foundation