KlassenKlassenKlassenKlassen | | | | Operatoren

affine_trans_regionT_affine_trans_regionAffineTransRegionaffine_trans_regionAffineTransRegionAffineTransRegion (Operator)

Name

affine_trans_regionT_affine_trans_regionAffineTransRegionaffine_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)

Herror affine_trans_region(Hobject Region, Hobject* RegionAffineTrans, const HTuple& HomMat2D, const HTuple& Interpolate)

HRegion HRegion::AffineTransRegion(const HTuple& HomMat2D, const HTuple& Interpolate) const

HRegionArray HRegionArray::AffineTransRegion(const HTuple& HomMat2D, const HTuple& Interpolate) const

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 HHomMat2D::AffineTransRegion(const HRegion& Region, const HString& Interpolate) const

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

void HOperatorSetX.AffineTransRegion(
[in] IHUntypedObjectX* Region, [out] IHUntypedObjectX*RegionAffineTrans, [in] VARIANT HomMat2d, [in] VARIANT Interpolate)

IHRegionX* HRegionX.AffineTransRegion(
[in] IHHomMat2DX* HomMat2d, [in] BSTR Interpolate)

IHRegionX* HHomMat2DX.AffineTransRegion(
[in] IHRegionX* Region, [in] BSTR Interpolate)

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_regionAffineTransRegionaffine_trans_regionAffineTransRegionAffineTransRegion wendet eine beliebige affine 2D-Transformation (Skalierung, Drehung, Verschiebung, Scherung) auf die in RegionRegionRegionRegionRegionregion übergebenen Regionen an und liefert die transformierten Regionen in RegionAffineTransRegionAffineTransRegionAffineTransRegionAffineTransRegionAffineTransregionAffineTrans zurück. Die Transformation wird durch eine homogene Transformationsmatrix beschrieben, die in HomMat2DHomMat2DHomMat2DHomMat2DHomMat2DhomMat2D übergeben wird. Diese kann mit Hilfe der Operatoren hom_mat2d_identityhom_mat2d_identityHomMat2dIdentityhom_mat2d_identityHomMat2dIdentityHomMat2dIdentity, hom_mat2d_scalehom_mat2d_scaleHomMat2dScalehom_mat2d_scaleHomMat2dScaleHomMat2dScale, hom_mat2d_rotatehom_mat2d_rotateHomMat2dRotatehom_mat2d_rotateHomMat2dRotateHomMat2dRotate, hom_mat2d_translatehom_mat2d_translateHomMat2dTranslatehom_mat2d_translateHomMat2dTranslateHomMat2dTranslate etc. aufgebaut werden oder das Resultat von Operatoren wie vector_angle_to_rigidvector_angle_to_rigidVectorAngleToRigidvector_angle_to_rigidVectorAngleToRigidVectorAngleToRigid 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 InterpolateInterpolateInterpolateInterpolateInterpolateinterpolate gibt dabei an, ob die Transformation mit einer internen Interpolation ausgeführt werden soll oder nicht. Es sind die in affine_trans_imageaffine_trans_imageAffineTransImageaffine_trans_imageAffineTransImageAffineTransImage beschriebenen Optionen 'nearest_neighbor'"nearest_neighbor""nearest_neighbor""nearest_neighbor""nearest_neighbor""nearest_neighbor" und 'constant'"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_regionAffineTransRegionaffine_trans_regionAffineTransRegionAffineTransRegion ist i.a. nicht reversibel (Clipping und Rasterung bei Rotation und Streckung).

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

Parallelisierung

Parameter

RegionRegionRegionRegionRegionregion (input_object)  region(-array) objectHRegionHRegionHRegionHRegionXHobject

Zu transformierende Region(en).

RegionAffineTransRegionAffineTransRegionAffineTransRegionAffineTransRegionAffineTransregionAffineTrans (output_object)  region(-array) objectHRegionHRegionHRegionHRegionXHobject *

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

Parameteranzahl: RegionAffineTrans == Region

HomMat2DHomMat2DHomMat2DHomMat2DHomMat2DhomMat2D (input_control)  hom_mat2d HHomMat2D, HTupleHTupleHTupleHHomMat2DX, VARIANTHtuple (real) (double) (double) (double) (double) (double)

Eingabe-Transformationsmatrix.

InterpolateInterpolateInterpolateInterpolateInterpolateinterpolate (input_control)  string HTupleHTupleHTupleVARIANTHtuple (string) (string) (HString) (char*) (BSTR) (char*)

Soll die Transformation mit Interpolation ausgeführt werden?

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

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

Ergebnis

Falls die Matrix HomMat2DHomMat2DHomMat2DHomMat2DHomMat2DhomMat2D eine affine Abbildung darstellt (d.h. keine projektive Abbildung), liefert affine_trans_regionaffine_trans_regionAffineTransRegionaffine_trans_regionAffineTransRegionAffineTransRegion 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>)set_system("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>)set_system("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">)set_system("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_identityHomMat2dIdentityhom_mat2d_identityHomMat2dIdentityHomMat2dIdentity, hom_mat2d_scalehom_mat2d_scaleHomMat2dScalehom_mat2d_scaleHomMat2dScaleHomMat2dScale, hom_mat2d_translatehom_mat2d_translateHomMat2dTranslatehom_mat2d_translateHomMat2dTranslateHomMat2dTranslate, hom_mat2d_inverthom_mat2d_invertHomMat2dInverthom_mat2d_invertHomMat2dInvertHomMat2dInvert, hom_mat2d_rotatehom_mat2d_rotateHomMat2dRotatehom_mat2d_rotateHomMat2dRotateHomMat2dRotate, hom_mat2d_reflecthom_mat2d_reflectHomMat2dReflecthom_mat2d_reflectHomMat2dReflectHomMat2dReflect

Nachfolger

select_shapeselect_shapeSelectShapeselect_shapeSelectShapeSelectShape

Alternativen

move_regionmove_regionMoveRegionmove_regionMoveRegionMoveRegion, mirror_regionmirror_regionMirrorRegionmirror_regionMirrorRegionMirrorRegion, zoom_regionzoom_regionZoomRegionzoom_regionZoomRegionZoomRegion

Siehe auch

affine_trans_imageaffine_trans_imageAffineTransImageaffine_trans_imageAffineTransImageAffineTransImage

Modul

Foundation


KlassenKlassenKlassenKlassen | | | | Operatoren