| Operatoren |
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, 'false')
Zu transformierende Region(en).
Region(en), die transformiert wurde(n).
Parameteranzahl: RegionAffineTrans == Region
Eingabe-Transformationsmatrix.
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
| Operatoren |