affine_trans_regionT_affine_trans_regionAffineTransRegionAffineTransRegion (Operator)

Name

affine_trans_regionT_affine_trans_regionAffineTransRegionAffineTransRegion — Anwenden einer beliebigen affinen 2D-Transformation auf Regionen.

Signatur

affine_trans_region(Region : RegionAffineTrans : HomMat2D, Interpolate : )

Herror T_affine_trans_region(const Hobject Region, Hobject* RegionAffineTrans, const Htuple HomMat2D, const Htuple Interpolate)

void AffineTransRegion(const HObject& Region, HObject* RegionAffineTrans, const HTuple& HomMat2D, const HTuple& Interpolate)

HRegion HRegion::AffineTransRegion(const HHomMat2D& HomMat2D, const HString& Interpolate) const

HRegion HRegion::AffineTransRegion(const HHomMat2D& HomMat2D, const char* Interpolate) const

HRegion HRegion::AffineTransRegion(const HHomMat2D& HomMat2D, const wchar_t* Interpolate) const   (Nur Windows)

HRegion HHomMat2D::AffineTransRegion(const HRegion& Region, const HString& Interpolate) const

HRegion HHomMat2D::AffineTransRegion(const HRegion& Region, const char* Interpolate) const

HRegion HHomMat2D::AffineTransRegion(const HRegion& Region, const wchar_t* Interpolate) const   (Nur Windows)

static void HOperatorSet.AffineTransRegion(HObject region, out HObject regionAffineTrans, HTuple homMat2D, HTuple interpolate)

HRegion HRegion.AffineTransRegion(HHomMat2D homMat2D, string interpolate)

HRegion HHomMat2D.AffineTransRegion(HRegion region, string interpolate)

Beschreibung

affine_trans_regionaffine_trans_regionAffineTransRegionAffineTransRegionAffineTransRegion wendet eine beliebige affine 2D-Transformation (Skalierung, Drehung, Verschiebung, Scherung) auf die in RegionRegionRegionRegionregion übergebenen Regionen an und liefert die transformierten Regionen in RegionAffineTransRegionAffineTransRegionAffineTransRegionAffineTransregionAffineTrans zurück. Die Transformation wird durch eine homogene Transformationsmatrix beschrieben, die in HomMat2DHomMat2DHomMat2DHomMat2DhomMat2D übergeben wird. Diese kann mit Hilfe der Operatoren hom_mat2d_identityhom_mat2d_identityHomMat2dIdentityHomMat2dIdentityHomMat2dIdentity, hom_mat2d_scalehom_mat2d_scaleHomMat2dScaleHomMat2dScaleHomMat2dScale, hom_mat2d_rotatehom_mat2d_rotateHomMat2dRotateHomMat2dRotateHomMat2dRotate, hom_mat2d_translatehom_mat2d_translateHomMat2dTranslateHomMat2dTranslateHomMat2dTranslate etc. aufgebaut werden oder das Resultat von Operatoren wie vector_angle_to_rigidvector_angle_to_rigidVectorAngleToRigidVectorAngleToRigidVectorAngleToRigid 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 InterpolateInterpolateInterpolateInterpolateinterpolate gibt dabei an, ob die Transformation mit einer internen Interpolation ausgeführt werden soll oder nicht. Es sind die in affine_trans_imageaffine_trans_imageAffineTransImageAffineTransImageAffineTransImage beschriebenen Optionen 'nearest_neighbor'"nearest_neighbor""nearest_neighbor""nearest_neighbor""nearest_neighbor" und 'constant'"constant""constant""constant""constant" verfügbar. Eine Interpolation kann insbesondere bei Vergrößerungen zu glatteren Regionenrändern führen. Allerdings steigt dadurch die Laufzeit erheblich.

Achtung

affine_trans_regionaffine_trans_regionAffineTransRegionAffineTransRegionAffineTransRegion ist i.a. nicht reversibel (Clipping und Rasterung bei Rotation und Streckung).

affine_trans_regionaffine_trans_regionAffineTransRegionAffineTransRegionAffineTransRegion verwendet nicht das HALCON-Standard-Koordinatensystem (mit dem Ursprung im Mittelpunkt des linken oberen Pixels) sondern das gleiche Koordinatensystem wie affine_trans_pixelaffine_trans_pixelAffineTransPixelAffineTransPixelAffineTransPixel, d.h. der Ursprung liegt in der linken oberen Ecke des linken oberen Pixels. Eine Transformation mit affine_trans_regionaffine_trans_regionAffineTransRegionAffineTransRegionAffineTransRegion entspricht für jeden Punkt der Region einer Kette von Transformationen (Ein- und Ausgabekoordinaten als homogene Vektoren dargestellt, siehe affine_trans_pixelaffine_trans_pixelAffineTransPixelAffineTransPixelAffineTransPixel). 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_centerarea_centerAreaCenterAreaCenterAreaCenter abgeleitet wurden. Wenn z.B. eine rotationssymmetrische Region unter Verwendung von hom_mat2d_rotatehom_mat2d_rotateHomMat2dRotateHomMat2dRotateHomMat2dRotate um ihren mit area_centerarea_centerAreaCenterAreaCenterAreaCenter 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_regionaffine_trans_regionAffineTransRegionAffineTransRegionAffineTransRegion die Transformationsmatrix HomMat2DHomMat2DHomMat2DHomMat2DhomMat2D 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.

Ausführungsinformationen

Parameter

RegionRegionRegionRegionregion (input_object)  region(-array) objectHRegionHRegionHobject

Zu transformierende Region(en).

RegionAffineTransRegionAffineTransRegionAffineTransRegionAffineTransregionAffineTrans (output_object)  region(-array) objectHRegionHRegionHobject *

Region(en), die transformiert wurde(n).

Parameteranzahl: RegionAffineTrans == Region

HomMat2DHomMat2DHomMat2DHomMat2DhomMat2D (input_control)  hom_mat2d HHomMat2D, HTupleHTupleHtuple (real) (double) (double) (double)

Eingabe-Transformationsmatrix.

InterpolateInterpolateInterpolateInterpolateinterpolate (input_control)  string HTupleHTupleHtuple (string) (string) (HString) (char*)

Soll die Transformation mit Interpolation ausgeführt werden?

Defaultwert: 'nearest_neighbor' "nearest_neighbor" "nearest_neighbor" "nearest_neighbor" "nearest_neighbor"

Werteliste: 'constant'"constant""constant""constant""constant", 'nearest_neighbor'"nearest_neighbor""nearest_neighbor""nearest_neighbor""nearest_neighbor"

Ergebnis

Falls die Matrix HomMat2DHomMat2DHomMat2DHomMat2DhomMat2D eine affine Abbildung darstellt (d.h. keine projektive Abbildung), liefert affine_trans_regionaffine_trans_regionAffineTransRegionAffineTransRegionAffineTransRegion 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>)set_system("no_object_result",<Result>)SetSystem("no_object_result",<Result>)SetSystem("no_object_result",<Result>)SetSystem("no_object_result",<Result>), das bei leerer Region mit set_system('empty_region_result',<Result>)set_system("empty_region_result",<Result>)SetSystem("empty_region_result",<Result>)SetSystem("empty_region_result",<Result>)SetSystem("empty_region_result",<Result>) und das bei leerer Ergebnisregion mit set_system('store_empty_region',<'true'/'false'>)set_system("store_empty_region",<"true"/"false">)SetSystem("store_empty_region",<"true"/"false">)SetSystem("store_empty_region",<"true"/"false">)SetSystem("store_empty_region",<"true"/"false">) festlegen. Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.

Vorgänger

hom_mat2d_identityhom_mat2d_identityHomMat2dIdentityHomMat2dIdentityHomMat2dIdentity, hom_mat2d_scalehom_mat2d_scaleHomMat2dScaleHomMat2dScaleHomMat2dScale, hom_mat2d_translatehom_mat2d_translateHomMat2dTranslateHomMat2dTranslateHomMat2dTranslate, hom_mat2d_inverthom_mat2d_invertHomMat2dInvertHomMat2dInvertHomMat2dInvert, hom_mat2d_rotatehom_mat2d_rotateHomMat2dRotateHomMat2dRotateHomMat2dRotate, hom_mat2d_reflecthom_mat2d_reflectHomMat2dReflectHomMat2dReflectHomMat2dReflect

Nachfolger

select_shapeselect_shapeSelectShapeSelectShapeSelectShape

Alternativen

move_regionmove_regionMoveRegionMoveRegionMoveRegion, mirror_regionmirror_regionMirrorRegionMirrorRegionMirrorRegion, zoom_regionzoom_regionZoomRegionZoomRegionZoomRegion

Siehe auch

affine_trans_imageaffine_trans_imageAffineTransImageAffineTransImageAffineTransImage

Modul

Foundation