projective_trans_imageT_projective_trans_imageProjectiveTransImageProjectiveTransImage (Operator)

Name

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

Beschreibung

projective_trans_imageprojective_trans_imageProjectiveTransImageProjectiveTransImageProjectiveTransImage wendet die durch die homogene Transformationsmatrix HomMat2DHomMat2DHomMat2DHomMat2DhomMat2D beschriebene projektive Transformation (Homographie) auf das Eingabebild ImageImageImageImageimage an und speichert das Ergebnis in das Ausgabebild TransImageTransImageTransImageTransImagetransImage.

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

Der Parameter InterpolationInterpolationInterpolationInterpolationinterpolation bestimmt, welche Interpolationsmethode zur Bestimmung der Grauwerte verwendet wird. Für InterpolationInterpolationInterpolationInterpolationinterpolation = '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 InterpolationInterpolationInterpolationInterpolationinterpolation = 'bilinear'"bilinear""bilinear""bilinear""bilinear" werden die Grauwerte bilinear interpoliert, was länger dauert, aber auch zu wesentlich besseren Ergebnissen führt.

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

Die projektive Transformationsmatrix HomMat2DHomMat2DHomMat2DHomMat2DhomMat2D kann z.B. mit vector_to_proj_hom_mat2dvector_to_proj_hom_mat2dVectorToProjHomMat2dVectorToProjHomMat2dVectorToProjHomMat2d 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_imageAffineTransImageAffineTransImageAffineTransImage entspricht bei projective_trans_imageprojective_trans_imageProjectiveTransImageProjectiveTransImageProjectiveTransImage x der Zeilenkoordinate und y der Spaltenkoordinate. Mit dieser Konvention sind affine Transformationen ein Spezialfall der projektiven Transformationen, bei denen die letzte Zeile von HomMat2DHomMat2DHomMat2DHomMat2DhomMat2D die Form (0,0,c) besitzt.

Für Bilder vom Typ 'byte'"byte""byte""byte""byte" oder 'uint2'"uint2""uint2""uint2""uint2" kann mittels des Systemparameters 'int_zooming'"int_zooming""int_zooming""int_zooming""int_zooming" (siehe set_systemset_systemSetSystemSetSystemSetSystem) zwischen schneller Berechnung in Fließkommaarithmetik ('int_zooming'"int_zooming""int_zooming""int_zooming""int_zooming" = 'true'"true""true""true""true") und hochgenauer Berechung in Fließkommaarithmetik ('int_zooming'"int_zooming""int_zooming""int_zooming""int_zooming" = 'false'"false""false""false""false") gewählt werden. Insbesondere für InterpolationInterpolationInterpolationInterpolationinterpolation = '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" = 'false'"false""false""false""false" zu empfehlen.

Achtung

Der Transformation liegt das gleiche Koordinatensystem zugrunde, das auch bei dem Operator affine_trans_pixelaffine_trans_pixelAffineTransPixelAffineTransPixelAffineTransPixel verwendet wird. Das bedeutet, dass die Transformation nicht mit der Transformationsmatrix HomMat2DHomMat2DHomMat2DHomMat2DhomMat2D, sondern mit einer modifizierte Version davon durchgeführt wird. Eine Transformation mit projective_trans_imageprojective_trans_imageProjectiveTransImageProjectiveTransImageProjectiveTransImage 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_grayAreaCenterGrayAreaCenterGrayAreaCenterGray abgeleitet wurden. Wenn z.B. ein rotationssymmetrisches Bild unter Verwendung von hom_mat2d_rotatehom_mat2d_rotateHomMat2dRotateHomMat2dRotateHomMat2dRotate um seinen mit area_center_grayarea_center_grayAreaCenterGrayAreaCenterGrayAreaCenterGray 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_imageProjectiveTransImageProjectiveTransImageProjectiveTransImage 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) 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_imageProjectiveTransImageProjectiveTransImageProjectiveTransImage 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 TransformDomainTransformDomainTransformDomainTransformDomaintransformDomain auf 'false'"false""false""false""false" gesetzt wird. Das Ergebnis kann dabei geringfügig von dem auf der CPU berechneten abweichen.

Ausführungsinformationen

Parameter

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

Eingabebild.

TransImageTransImageTransImageTransImagetransImage (output_object)  (multichannel-)image(-array) objectHImageHImageHobject * (byte / uint2 / real)

Ergebnisbild.

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

Homogene projektive Transformationsmatrix.

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

Interpolationsmethode für die Transformation.

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

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

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

Automatische Größenanpassung für Zielbild.

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

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

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

Soll die Region des Eingabebildes auch transformiert werden?

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

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

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

Vorgänger

vector_to_proj_hom_mat2dvector_to_proj_hom_mat2dVectorToProjHomMat2dVectorToProjHomMat2dVectorToProjHomMat2d, hom_vector_to_proj_hom_mat2dhom_vector_to_proj_hom_mat2dHomVectorToProjHomMat2dHomVectorToProjHomMat2dHomVectorToProjHomMat2d, proj_match_points_ransacproj_match_points_ransacProjMatchPointsRansacProjMatchPointsRansacProjMatchPointsRansac, proj_match_points_ransac_guidedproj_match_points_ransac_guidedProjMatchPointsRansacGuidedProjMatchPointsRansacGuidedProjMatchPointsRansacGuided, hom_mat3d_projecthom_mat3d_projectHomMat3dProjectHomMat3dProjectHomMat3dProject

Siehe auch

projective_trans_image_sizeprojective_trans_image_sizeProjectiveTransImageSizeProjectiveTransImageSizeProjectiveTransImageSize, projective_trans_contour_xldprojective_trans_contour_xldProjectiveTransContourXldProjectiveTransContourXldProjectiveTransContourXld, projective_trans_regionprojective_trans_regionProjectiveTransRegionProjectiveTransRegionProjectiveTransRegion, projective_trans_point_2dprojective_trans_point_2dProjectiveTransPoint2dProjectiveTransPoint2dProjectiveTransPoint2d, projective_trans_pixelprojective_trans_pixelProjectiveTransPixelProjectiveTransPixelProjectiveTransPixel

Modul

Foundation