affine_trans_regionT_affine_trans_regionAffineTransRegionAffineTransRegionaffine_trans_region (Operator)

Name

affine_trans_regionT_affine_trans_regionAffineTransRegionAffineTransRegionaffine_trans_region — 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)

def affine_trans_region(region: HObject, hom_mat_2d: Sequence[float], interpolate: str) -> HObject

Beschreibung

affine_trans_regionaffine_trans_regionAffineTransRegionAffineTransRegionAffineTransRegionaffine_trans_region wendet eine beliebige affine 2D-Transformation (Skalierung, Drehung, Verschiebung, Scherung) auf die in RegionRegionRegionRegionregionregion übergebenen Regionen an und liefert die transformierten Regionen in RegionAffineTransRegionAffineTransRegionAffineTransRegionAffineTransregionAffineTransregion_affine_trans zurück. Die Transformation wird durch eine homogene Transformationsmatrix beschrieben, die in HomMat2DHomMat2DHomMat2DHomMat2DhomMat2Dhom_mat_2d übergeben wird. Diese kann mit Hilfe der Operatoren hom_mat2d_identityhom_mat2d_identityHomMat2dIdentityHomMat2dIdentityHomMat2dIdentityhom_mat2d_identity, hom_mat2d_scalehom_mat2d_scaleHomMat2dScaleHomMat2dScaleHomMat2dScalehom_mat2d_scale, hom_mat2d_rotatehom_mat2d_rotateHomMat2dRotateHomMat2dRotateHomMat2dRotatehom_mat2d_rotate, hom_mat2d_translatehom_mat2d_translateHomMat2dTranslateHomMat2dTranslateHomMat2dTranslatehom_mat2d_translate etc. aufgebaut werden oder das Resultat von Operatoren wie vector_angle_to_rigidvector_angle_to_rigidVectorAngleToRigidVectorAngleToRigidVectorAngleToRigidvector_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 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_imageAffineTransImageAffineTransImageAffineTransImageaffine_trans_image 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_regionAffineTransRegionAffineTransRegionAffineTransRegionaffine_trans_region ist i.a. nicht reversibel (Clipping und Rasterung bei Rotation und Streckung).

affine_trans_regionaffine_trans_regionAffineTransRegionAffineTransRegionAffineTransRegionaffine_trans_region verwendet nicht das HALCON-Standard-Koordinatensystem (mit dem Ursprung im Mittelpunkt des linken oberen Pixels) sondern das gleiche Koordinatensystem wie affine_trans_pixelaffine_trans_pixelAffineTransPixelAffineTransPixelAffineTransPixelaffine_trans_pixel, d.h. der Ursprung liegt in der linken oberen Ecke des linken oberen Pixels. Eine Transformation mit affine_trans_regionaffine_trans_regionAffineTransRegionAffineTransRegionAffineTransRegionaffine_trans_region entspricht für jeden Punkt der Region einer Kette von Transformationen (Ein- und Ausgabekoordinaten als homogene Vektoren dargestellt, siehe affine_trans_pixelaffine_trans_pixelAffineTransPixelAffineTransPixelAffineTransPixelaffine_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_centerarea_centerAreaCenterAreaCenterAreaCenterarea_center abgeleitet wurden. Wenn z.B. eine rotationssymmetrische Region unter Verwendung von hom_mat2d_rotatehom_mat2d_rotateHomMat2dRotateHomMat2dRotateHomMat2dRotatehom_mat2d_rotate um ihren mit area_centerarea_centerAreaCenterAreaCenterAreaCenterarea_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_regionaffine_trans_regionAffineTransRegionAffineTransRegionAffineTransRegionaffine_trans_region die Transformationsmatrix HomMat2DHomMat2DHomMat2DHomMat2DhomMat2Dhom_mat_2d durch die beiden folgenden Translationen modifiziert wird:
hom_mat2d_translate(HomMat2D, 0.5, 0.5, HomMat2DTmp)hom_mat2d_translate(HomMat2D, 0.5, 0.5, HomMat2DTmp)HomMat2dTranslate(HomMat2D, 0.5, 0.5, HomMat2DTmp)HomMat2dTranslate(HomMat2D, 0.5, 0.5, HomMat2DTmp)HomMat2dTranslate(HomMat2D, 0.5, 0.5, HomMat2DTmp)hom_mat2d_translate(HomMat2D, 0.5, 0.5, HomMat2DTmp)
hom_mat2d_translate_local(HomMat2DTmp, -0.5, -0.5, HomMat2DAdapted)hom_mat2d_translate_local(HomMat2DTmp, -0.5, -0.5, HomMat2DAdapted)HomMat2dTranslateLocal(HomMat2DTmp, -0.5, -0.5, HomMat2DAdapted)HomMat2dTranslateLocal(HomMat2DTmp, -0.5, -0.5, HomMat2DAdapted)HomMat2dTranslateLocal(HomMat2DTmp, -0.5, -0.5, HomMat2DAdapted)hom_mat2d_translate_local(HomMat2DTmp, -0.5, -0.5, HomMat2DAdapted)
affine_trans_region(Region, RegionAffineTrans, HomMat2DAdapted, 'nearest_neighbor')affine_trans_region(Region, RegionAffineTrans, HomMat2DAdapted, "nearest_neighbor")AffineTransRegion(Region, RegionAffineTrans, HomMat2DAdapted, "nearest_neighbor")AffineTransRegion(Region, RegionAffineTrans, HomMat2DAdapted, "nearest_neighbor")AffineTransRegion(Region, RegionAffineTrans, HomMat2DAdapted, "nearest_neighbor")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

RegionRegionRegionRegionregionregion (input_object)  region(-array) objectHRegionHObjectHRegionHobject

Zu transformierende Region(en).

RegionAffineTransRegionAffineTransRegionAffineTransRegionAffineTransregionAffineTransregion_affine_trans (output_object)  region(-array) objectHRegionHObjectHRegionHobject *

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

Parameteranzahl: RegionAffineTrans == Region

HomMat2DHomMat2DHomMat2DHomMat2DhomMat2Dhom_mat_2d (input_control)  hom_mat2d HHomMat2D, HTupleSequence[float]HTupleHtuple (real) (double) (double) (double)

Eingabe-Transformationsmatrix.

InterpolateInterpolateInterpolateInterpolateinterpolateinterpolate (input_control)  string HTuplestrHTupleHtuple (string) (string) (HString) (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 HomMat2DHomMat2DHomMat2DHomMat2DhomMat2Dhom_mat_2d eine affine Abbildung darstellt (d.h. keine projektive Abbildung), liefert affine_trans_regionaffine_trans_regionAffineTransRegionAffineTransRegionAffineTransRegionaffine_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>)set_system("no_object_result",<Result>)SetSystem("no_object_result",<Result>)SetSystem("no_object_result",<Result>)SetSystem("no_object_result",<Result>)set_system("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>)set_system("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">)set_system("store_empty_region",<"true"/"false">) festlegen. Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.

Vorgänger

hom_mat2d_identityhom_mat2d_identityHomMat2dIdentityHomMat2dIdentityHomMat2dIdentityhom_mat2d_identity, hom_mat2d_scalehom_mat2d_scaleHomMat2dScaleHomMat2dScaleHomMat2dScalehom_mat2d_scale, hom_mat2d_translatehom_mat2d_translateHomMat2dTranslateHomMat2dTranslateHomMat2dTranslatehom_mat2d_translate, hom_mat2d_inverthom_mat2d_invertHomMat2dInvertHomMat2dInvertHomMat2dInverthom_mat2d_invert, hom_mat2d_rotatehom_mat2d_rotateHomMat2dRotateHomMat2dRotateHomMat2dRotatehom_mat2d_rotate, hom_mat2d_reflecthom_mat2d_reflectHomMat2dReflectHomMat2dReflectHomMat2dReflecthom_mat2d_reflect

Nachfolger

select_shapeselect_shapeSelectShapeSelectShapeSelectShapeselect_shape

Alternativen

move_regionmove_regionMoveRegionMoveRegionMoveRegionmove_region, mirror_regionmirror_regionMirrorRegionMirrorRegionMirrorRegionmirror_region, zoom_regionzoom_regionZoomRegionZoomRegionZoomRegionzoom_region

Siehe auch

affine_trans_imageaffine_trans_imageAffineTransImageAffineTransImageAffineTransImageaffine_trans_image

Modul

Foundation