projective_trans_imageT_projective_trans_imageProjectiveTransImageProjectiveTransImageprojective_trans_image (Operator)

Name

projective_trans_imageT_projective_trans_imageProjectiveTransImageProjectiveTransImageprojective_trans_image — Berechnen der projektiven Transformation eines Bildes.

Signatur

projective_trans_image(Image : TransImage : HomMat2D, Interpolation, AdaptImageSize, TransformDomain : )

Herror T_projective_trans_image(const Hobject Image, Hobject* TransImage, const Htuple HomMat2D, const Htuple Interpolation, const Htuple AdaptImageSize, const Htuple TransformDomain)

void ProjectiveTransImage(const HObject& Image, HObject* TransImage, const HTuple& HomMat2D, const HTuple& Interpolation, const HTuple& AdaptImageSize, const HTuple& TransformDomain)

HImage HImage::ProjectiveTransImage(const HHomMat2D& HomMat2D, const HString& Interpolation, const HString& AdaptImageSize, const HString& TransformDomain) const

HImage HImage::ProjectiveTransImage(const HHomMat2D& HomMat2D, const char* Interpolation, const char* AdaptImageSize, const char* TransformDomain) const

HImage HImage::ProjectiveTransImage(const HHomMat2D& HomMat2D, const wchar_t* Interpolation, const wchar_t* AdaptImageSize, const wchar_t* TransformDomain) const   (Nur Windows)

HImage HHomMat2D::ProjectiveTransImage(const HImage& Image, const HString& Interpolation, const HString& AdaptImageSize, const HString& TransformDomain) const

HImage HHomMat2D::ProjectiveTransImage(const HImage& Image, const char* Interpolation, const char* AdaptImageSize, const char* TransformDomain) const

HImage HHomMat2D::ProjectiveTransImage(const HImage& Image, const wchar_t* Interpolation, const wchar_t* AdaptImageSize, const wchar_t* TransformDomain) const   (Nur Windows)

static void HOperatorSet.ProjectiveTransImage(HObject image, out HObject transImage, HTuple homMat2D, HTuple interpolation, HTuple adaptImageSize, HTuple transformDomain)

HImage HImage.ProjectiveTransImage(HHomMat2D homMat2D, string interpolation, string adaptImageSize, string transformDomain)

HImage HHomMat2D.ProjectiveTransImage(HImage image, string interpolation, string adaptImageSize, string transformDomain)

def projective_trans_image(image: HObject, hom_mat_2d: Sequence[float], interpolation: str, adapt_image_size: str, transform_domain: str) -> HObject

Beschreibung

projective_trans_imageprojective_trans_imageProjectiveTransImageProjectiveTransImageProjectiveTransImageprojective_trans_image wendet die durch die homogene Transformationsmatrix HomMat2DHomMat2DHomMat2DHomMat2DhomMat2Dhom_mat_2d beschriebene projektive Transformation (Homographie) auf das Eingabebild ImageImageImageImageimageimage an und speichert das Ergebnis in das Ausgabebild TransImageTransImageTransImageTransImagetransImagetrans_image.

Ist der Parameter AdaptImageSizeAdaptImageSizeAdaptImageSizeAdaptImageSizeadaptImageSizeadapt_image_size auf 'false'"false""false""false""false""false" gesetzt, so erhält TransImageTransImageTransImageTransImagetransImagetrans_image dieselbe Größe wie ImageImageImageImageimageimage; ist AdaptImageSizeAdaptImageSizeAdaptImageSizeAdaptImageSizeadaptImageSizeadapt_image_size 'true'"true""true""true""true""true", so wird die Zielgröße falls möglich automatisch so gewählt, dass alle nicht-negativen Punkte des transformierten Bildes sichtbar sind.

Der Parameter InterpolationInterpolationInterpolationInterpolationinterpolationinterpolation bestimmt, welche Interpolationsmethode zur Bestimmung der Grauwerte verwendet wird. Für InterpolationInterpolationInterpolationInterpolationinterpolationinterpolation = 'nearest_neighbor'"nearest_neighbor""nearest_neighbor""nearest_neighbor""nearest_neighbor""nearest_neighbor" wird der Grauwert aus dem nächstgelegenen Punkt im Eingabebild bestimmt. Dieser Modus ist sehr schnell, führt aber zu der typischen „Klötzchenbildung“ bei starker Vergrößerung. Für InterpolationInterpolationInterpolationInterpolationinterpolationinterpolation = 'bilinear'"bilinear""bilinear""bilinear""bilinear""bilinear" werden die Grauwerte bilinear interpoliert, was länger dauert, aber auch zu wesentlich besseren Ergebnissen führt.

Mit TransformDomainTransformDomainTransformDomainTransformDomaintransformDomaintransform_domain kann festgelegt werden, ob der Definitionsbereich von ImageImageImageImageimageimage transformiert wird. Da die Transformation des Definitionsbereichs Zeit kostet, kann dieser Parameter dazu verwendet werden, festzulegen, ob dies erwünscht ist. Wenn TransformDomainTransformDomainTransformDomainTransformDomaintransformDomaintransform_domain auf 'false'"false""false""false""false""false" gesetzt wird, wird der Definitionsbereich des Eingabebildes ignoriert. Somit wird das komplette Bild transformiert.

Die projektive Transformationsmatrix HomMat2DHomMat2DHomMat2DHomMat2DhomMat2Dhom_mat_2d kann z.B. mit vector_to_proj_hom_mat2dvector_to_proj_hom_mat2dVectorToProjHomMat2dVectorToProjHomMat2dVectorToProjHomMat2dvector_to_proj_hom_mat2d erzeugt werden.

Bei einer Homographie werden die zu projizierenden Punkte durch homogene Vektoren der Form (x,y,w) dargestellt. Ein euklidischer Punkt ergibt sich durch (x',y') = . Wie bei affine_trans_imageaffine_trans_imageAffineTransImageAffineTransImageAffineTransImageaffine_trans_image entspricht bei projective_trans_imageprojective_trans_imageProjectiveTransImageProjectiveTransImageProjectiveTransImageprojective_trans_image x der Zeilenkoordinate und y der Spaltenkoordinate. Mit dieser Konvention sind affine Transformationen ein Spezialfall der projektiven Transformationen, bei denen die letzte Zeile von HomMat2DHomMat2DHomMat2DHomMat2DhomMat2Dhom_mat_2d die Form (0,0,c) besitzt.

Für Bilder vom Typ 'byte'"byte""byte""byte""byte""byte" oder 'uint2'"uint2""uint2""uint2""uint2""uint2" kann mittels des Systemparameters 'int_zooming'"int_zooming""int_zooming""int_zooming""int_zooming""int_zooming" (siehe set_systemset_systemSetSystemSetSystemSetSystemset_system) zwischen schneller Berechnung in Fließkommaarithmetik ('int_zooming'"int_zooming""int_zooming""int_zooming""int_zooming""int_zooming" = 'true'"true""true""true""true""true") und hochgenauer Berechnung in Fließkommaarithmetik ('int_zooming'"int_zooming""int_zooming""int_zooming""int_zooming""int_zooming" = 'false'"false""false""false""false""false") gewählt werden. Insbesondere für InterpolationInterpolationInterpolationInterpolationinterpolationinterpolation = 'bilinear'"bilinear""bilinear""bilinear""bilinear""bilinear" kann es bei der schnellen Fließkommaarithmetik zu leichten Grauwertabweichungen kommen, da der schnellere Algorithmus nur eine geringere Genauigkeit von etwa mal der Größe des Bildes erreicht. Bei starken Skalierungen ist daher 'int_zooming'"int_zooming""int_zooming""int_zooming""int_zooming""int_zooming" = 'false'"false""false""false""false""false" zu empfehlen.

Achtung

Der Transformation liegt das gleiche Koordinatensystem zugrunde, das auch bei dem Operator affine_trans_pixelaffine_trans_pixelAffineTransPixelAffineTransPixelAffineTransPixelaffine_trans_pixel verwendet wird. Das bedeutet, dass die Transformation nicht mit der Transformationsmatrix HomMat2DHomMat2DHomMat2DHomMat2DhomMat2Dhom_mat_2d, sondern mit einer modifizierte Version davon durchgeführt wird. Eine Transformation mit projective_trans_imageprojective_trans_imageProjectiveTransImageProjectiveTransImageProjectiveTransImageprojective_trans_image entspricht für jeden Punkt (Row_i, Col_i) des Bildes der folgenden Kette von Transformationen (Ein- und Ausgabekoordinaten als homogene Vektoren dargestellt):

Dies kann zu unerwarteten Ergebnissen führen, wenn die Transformationsmatrix unter Verwendung von Koordinaten erstellt wurde, die von dem Bild mit Operatoren wie z.B. area_center_grayarea_center_grayAreaCenterGrayAreaCenterGrayAreaCenterGrayarea_center_gray abgeleitet wurden. Wenn z.B. ein rotationssymmetrisches Bild unter Verwendung von hom_mat2d_rotatehom_mat2d_rotateHomMat2dRotateHomMat2dRotateHomMat2dRotatehom_mat2d_rotate um seinen mit area_center_grayarea_center_grayAreaCenterGrayAreaCenterGrayAreaCenterGrayarea_center_gray bestimmten Schwerpunkt rotiert wird, so liegt das transformierte Bild nicht auf dem Originalbild. Dieser Effekt kann dadurch kompensiert werden, dass vor dem Aufruf von projective_trans_imageprojective_trans_imageProjectiveTransImageProjectiveTransImageProjectiveTransImageprojective_trans_image die Transformationsmatrix HomMat2DHomMat2DHomMat2DHomMat2DhomMat2Dhom_mat_2d 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) projective_trans_image(Image, TransImage, HomMat2DAdapted, 'bilinear', 'false', 'false')

Ein Überblick zu den verschiedenen in HALCON verwendeten 2D Koordinatensystemen ist in der Einleitung zum Kapitel Transformationen / 2D-Transformationen gegeben.

projective_trans_imageprojective_trans_imageProjectiveTransImageProjectiveTransImageProjectiveTransImageprojective_trans_image kann auf OpenCL-Geräten ausgeführt werden, wenn das Eingangsbild die maximale Größe für Bildobjekte des ausgewählten Gerätes nicht überschreitet und der Parameter TransformDomainTransformDomainTransformDomainTransformDomaintransformDomaintransform_domain auf 'false'"false""false""false""false""false" gesetzt wird. Das Ergebnis kann dabei geringfügig von dem auf der CPU berechneten abweichen.

Ausführungsinformationen

Parameter

ImageImageImageImageimageimage (input_object)  (multichannel-)image(-array) objectHImageHObjectHImageHobject (byte* / uint2* / real*) *erlaubt für Compute Devices

Eingabebild.

TransImageTransImageTransImageTransImagetransImagetrans_image (output_object)  (multichannel-)image(-array) objectHImageHObjectHImageHobject * (byte / uint2 / real)

Ergebnisbild.

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

Homogene projektive Transformationsmatrix.

InterpolationInterpolationInterpolationInterpolationinterpolationinterpolation (input_control)  string HTuplestrHTupleHtuple (string) (string) (HString) (char*)

Interpolationsmethode für die Transformation.

Defaultwert: 'bilinear' "bilinear" "bilinear" "bilinear" "bilinear" "bilinear"

Werteliste: 'bilinear'"bilinear""bilinear""bilinear""bilinear""bilinear", 'nearest_neighbor'"nearest_neighbor""nearest_neighbor""nearest_neighbor""nearest_neighbor""nearest_neighbor"

AdaptImageSizeAdaptImageSizeAdaptImageSizeAdaptImageSizeadaptImageSizeadapt_image_size (input_control)  string HTuplestrHTupleHtuple (string) (string) (HString) (char*)

Automatische Größenanpassung für Zielbild.

Defaultwert: 'false' "false" "false" "false" "false" "false"

Werteliste: 'false'"false""false""false""false""false", 'true'"true""true""true""true""true"

TransformDomainTransformDomainTransformDomainTransformDomaintransformDomaintransform_domain (input_control)  string HTuplestrHTupleHtuple (string) (string) (HString) (char*)

Soll die Region des Eingabebildes auch transformiert werden?

Defaultwert: 'false' "false" "false" "false" "false" "false"

Werteliste: 'false'"false""false""false""false""false", 'true'"true""true""true""true""true"

Werteliste (für Compute Devices): 'false'"false""false""false""false""false"

Vorgänger

vector_to_proj_hom_mat2dvector_to_proj_hom_mat2dVectorToProjHomMat2dVectorToProjHomMat2dVectorToProjHomMat2dvector_to_proj_hom_mat2d, hom_vector_to_proj_hom_mat2dhom_vector_to_proj_hom_mat2dHomVectorToProjHomMat2dHomVectorToProjHomMat2dHomVectorToProjHomMat2dhom_vector_to_proj_hom_mat2d, proj_match_points_ransacproj_match_points_ransacProjMatchPointsRansacProjMatchPointsRansacProjMatchPointsRansacproj_match_points_ransac, proj_match_points_ransac_guidedproj_match_points_ransac_guidedProjMatchPointsRansacGuidedProjMatchPointsRansacGuidedProjMatchPointsRansacGuidedproj_match_points_ransac_guided, hom_mat3d_projecthom_mat3d_projectHomMat3dProjectHomMat3dProjectHomMat3dProjecthom_mat3d_project

Siehe auch

projective_trans_image_sizeprojective_trans_image_sizeProjectiveTransImageSizeProjectiveTransImageSizeProjectiveTransImageSizeprojective_trans_image_size, projective_trans_contour_xldprojective_trans_contour_xldProjectiveTransContourXldProjectiveTransContourXldProjectiveTransContourXldprojective_trans_contour_xld, projective_trans_regionprojective_trans_regionProjectiveTransRegionProjectiveTransRegionProjectiveTransRegionprojective_trans_region, projective_trans_point_2dprojective_trans_point_2dProjectiveTransPoint2dProjectiveTransPoint2dProjectiveTransPoint2dprojective_trans_point_2d, projective_trans_pixelprojective_trans_pixelProjectiveTransPixelProjectiveTransPixelProjectiveTransPixelprojective_trans_pixel

Modul

Foundation