affine_trans_contour_xldT_affine_trans_contour_xldAffineTransContourXldAffineTransContourXldaffine_trans_contour_xld (Operator)
Name
affine_trans_contour_xldT_affine_trans_contour_xldAffineTransContourXldAffineTransContourXldaffine_trans_contour_xld — Anwenden einer beliebigen affinen 2D-Transformation auf XLD-Konturen.
Signatur
Beschreibung
affine_trans_contour_xldaffine_trans_contour_xldAffineTransContourXldAffineTransContourXldAffineTransContourXldaffine_trans_contour_xld wendet eine beliebige affine
2D-Transformation (Skalierung, Drehung, Verschiebung, Scherung) auf die in
ContoursContoursContoursContourscontourscontours übergebenen XLD-Konturen an und liefert die transformierten
Konturen in ContoursAffineTransContoursAffineTransContoursAffineTransContoursAffineTranscontoursAffineTranscontours_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.
Achtung
affine_trans_contour_xldaffine_trans_contour_xldAffineTransContourXldAffineTransContourXldAffineTransContourXldaffine_trans_contour_xld 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_contour_xldaffine_trans_contour_xldAffineTransContourXldAffineTransContourXldAffineTransContourXldaffine_trans_contour_xld
entspricht für jeden Punkt der Kontur 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 Kontur mit Operatoren wie z.B. area_center_xldarea_center_xldAreaCenterXldAreaCenterXldAreaCenterXldarea_center_xld
abgeleitet wurden. Wenn z.B. eine
rotationssymmetrische XLD Kontur unter Verwendung von
hom_mat2d_rotatehom_mat2d_rotateHomMat2dRotateHomMat2dRotateHomMat2dRotatehom_mat2d_rotate um ihren mit area_center_xldarea_center_xldAreaCenterXldAreaCenterXldAreaCenterXldarea_center_xld
bestimmten Schwerpunkt rotiert wird, so liegt die transformierte Kontur
nicht auf der Originalkontur. Dieser Effekt kann dadurch kompensiert
werden, dass vor dem Aufruf von affine_trans_contour_xldaffine_trans_contour_xldAffineTransContourXldAffineTransContourXldAffineTransContourXldaffine_trans_contour_xld 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_contour_xld(Contours, ContoursAffineTrans, HomMat2DAdapted)affine_trans_contour_xld(Contours, ContoursAffineTrans, HomMat2DAdapted)AffineTransContourXld(Contours, ContoursAffineTrans, HomMat2DAdapted)AffineTransContourXld(Contours, ContoursAffineTrans, HomMat2DAdapted)AffineTransContourXld(Contours, ContoursAffineTrans, HomMat2DAdapted)affine_trans_contour_xld(Contours, ContoursAffineTrans, HomMat2DAdapted)
|
Ein Überblick zu den verschiedenen in HALCON verwendeten 2D
Koordinatensystemen ist in der Einleitung zum Kapitel
Transformationen / 2D-Transformationen gegeben.
Ausführungsinformationen
- Multithreading-Typ: reentrant (läuft parallel zu nicht-exklusiven Operatoren).
- Multithreading-Bereich: global (kann von jedem Thread aufgerufen werden).
- Automatisch parallelisiert auf Tupelebene.
Parameter
ContoursContoursContoursContourscontourscontours (input_object) xld_cont(-array) → objectHXLDContHObjectHXLDContHobject
Eingabe-XLD-Konturen.
ContoursAffineTransContoursAffineTransContoursAffineTransContoursAffineTranscontoursAffineTranscontours_affine_trans (output_object) xld_cont(-array) → objectHXLDContHObjectHXLDContHobject *
Transformierte XLD-Konturen.
HomMat2DHomMat2DHomMat2DHomMat2DhomMat2Dhom_mat_2d (input_control) hom_mat2d → HHomMat2D, HTupleSequence[float]HTupleHtuple (real) (double) (double) (double)
Eingabe-Transformationsmatrix.
Ergebnis
Falls die Matrix HomMat2DHomMat2DHomMat2DHomMat2DhomMat2Dhom_mat_2d eine affine Abbildung darstellt
(d.h. keine projektive Abbildung), liefert
affine_trans_contour_xldaffine_trans_contour_xldAffineTransContourXldAffineTransContourXldAffineTransContourXldaffine_trans_contour_xld den Wert 2 (H_MSG_TRUE) zurück.
Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.
Vorgänger
hom_mat2d_identityhom_mat2d_identityHomMat2dIdentityHomMat2dIdentityHomMat2dIdentityhom_mat2d_identity,
hom_mat2d_translatehom_mat2d_translateHomMat2dTranslateHomMat2dTranslateHomMat2dTranslatehom_mat2d_translate,
hom_mat2d_rotatehom_mat2d_rotateHomMat2dRotateHomMat2dRotateHomMat2dRotatehom_mat2d_rotate,
hom_mat2d_scalehom_mat2d_scaleHomMat2dScaleHomMat2dScaleHomMat2dScalehom_mat2d_scale,
hom_mat2d_reflecthom_mat2d_reflectHomMat2dReflectHomMat2dReflectHomMat2dReflecthom_mat2d_reflect
Siehe auch
affine_trans_imageaffine_trans_imageAffineTransImageAffineTransImageAffineTransImageaffine_trans_image,
affine_trans_regionaffine_trans_regionAffineTransRegionAffineTransRegionAffineTransRegionaffine_trans_region
Modul
Foundation