Name
projective_trans_imageT_projective_trans_imageProjectiveTransImageprojective_trans_imageProjectiveTransImageProjectiveTransImage — Berechnen der projektiven Transformation eines Bildes.
Herror projective_trans_image(Hobject Image, Hobject* TransImage, const HTuple& HomMat2D, const HTuple& Interpolation, const HTuple& AdaptImageSize, const HTuple& TransformDomain)
HImage HImage::ProjectiveTransImage(const HTuple& HomMat2D, const HTuple& Interpolation, const HTuple& AdaptImageSize, const HTuple& TransformDomain) const
HImageArray HImageArray::ProjectiveTransImage(const HTuple& HomMat2D, const HTuple& Interpolation, const HTuple& AdaptImageSize, const HTuple& TransformDomain) const
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 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
void HOperatorSetX.ProjectiveTransImage(
[in] IHUntypedObjectX* Image, [out] IHUntypedObjectX** TransImage, [in] VARIANT HomMat2d, [in] VARIANT Interpolation, [in] VARIANT AdaptImageSize, [in] VARIANT TransformDomain)
IHImageX* HImageX.ProjectiveTransImage(
[in] IHHomMat2DX* HomMat2d, [in] BSTR Interpolation, [in] BSTR AdaptImageSize, [in] BSTR TransformDomain)
IHImageX* HHomMat2DX.ProjectiveTransImage(
[in] IHImageX* Image, [in] BSTR Interpolation, [in] BSTR AdaptImageSize, [in] BSTR TransformDomain)
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)
projective_trans_imageprojective_trans_imageProjectiveTransImageprojective_trans_imageProjectiveTransImageProjectiveTransImage wendet die durch die homogene
Transformationsmatrix HomMat2DHomMat2DHomMat2DHomMat2DHomMat2DhomMat2D beschriebene projektive
Transformation (Homographie) auf das Eingabebild ImageImageImageImageImageimage an
und speichert das Ergebnis in das Ausgabebild TransImageTransImageTransImageTransImageTransImagetransImage.
Ist der Parameter AdaptImageSizeAdaptImageSizeAdaptImageSizeAdaptImageSizeAdaptImageSizeadaptImageSize auf 'false'"false""false""false""false""false"
gesetzt, so erhält TransImageTransImageTransImageTransImageTransImagetransImage dieselbe Größe wie
ImageImageImageImageImageimage; ist AdaptImageSizeAdaptImageSizeAdaptImageSizeAdaptImageSizeAdaptImageSizeadaptImageSize 'true'"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 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 TransformDomainTransformDomainTransformDomainTransformDomainTransformDomaintransformDomain 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 TransformDomainTransformDomainTransformDomainTransformDomainTransformDomaintransformDomain auf 'false'"false""false""false""false""false" gesetzt
wird, wird der Definitionsbereich des Eingabebildes ignoriert.
Somit wird das komplette Bild transformiert.
Die projektive Transformationsmatrix HomMat2DHomMat2DHomMat2DHomMat2DHomMat2DhomMat2D kann z.B. mit
vector_to_proj_hom_mat2dvector_to_proj_hom_mat2dVectorToProjHomMat2dvector_to_proj_hom_mat2dVectorToProjHomMat2dVectorToProjHomMat2d 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') = (x/w,y/w). Wie bei affine_trans_imageaffine_trans_imageAffineTransImageaffine_trans_imageAffineTransImageAffineTransImage
entspricht bei projective_trans_imageprojective_trans_imageProjectiveTransImageprojective_trans_imageProjectiveTransImageProjectiveTransImage x der Zeilenkoordinate
und y der Spaltenkoordinate. Mit dieser Konvention sind affine
Transformationen ein Spezialfall der projektiven Transformationen,
bei denen die letzte Zeile von HomMat2DHomMat2DHomMat2DHomMat2DHomMat2DhomMat2D 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_systemSetSystemset_systemSetSystemSetSystem) zwischen schneller Berechnung in
Festkommaarithmetik ('int_zooming'"int_zooming""int_zooming""int_zooming""int_zooming""int_zooming" = 'true'"true""true""true""true""true") und
hochgenauer Berechung 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 Festkommaberechnung aber zu
leichten Grauwertabweichungen kommen, da der schnellere Algorithmus
nur eine beschränkte Genauigkeit von etwa 1/16
Pixel erreicht. Bei starken Skalierungen etwa ist daher
'int_zooming'"int_zooming""int_zooming""int_zooming""int_zooming""int_zooming" = 'false'"false""false""false""false""false" zu empfehlen.
Der Transformation liegt das gleiche Koordinatensystem zugrunde, das
auch bei dem Operator affine_trans_pixelaffine_trans_pixelAffineTransPixelaffine_trans_pixelAffineTransPixelAffineTransPixel verwendet wird. Das
bedeutet, dass die Transformation nicht mit der
Transformationsmatrix HomMat2DHomMat2DHomMat2DHomMat2DHomMat2DhomMat2D, sondern mit einer
modifizierte Version davon durchgeführt wird. Eine Transformation
mit projective_trans_imageprojective_trans_imageProjectiveTransImageprojective_trans_imageProjectiveTransImageProjectiveTransImage entspricht für jeden Punkt (Row_i,
Col_i) des Bildes der folgenden Kette von
Transformationen (Ein- und Ausgabekoordinaten als homogene Vektoren
dargestellt):
/ RowTrans_i \ / 1 0 -0.5 \ / 1 0 +0.5 \ / Row_i \
| ColTrans_i | = | 0 1 -0.5 | * HomMat2D * | 0 1 +0.5 | * | Col_i |
\ 1 / \ 0 0 1 / \ 0 0 1 / \ 1 /
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_grayAreaCenterGrayarea_center_grayAreaCenterGrayAreaCenterGray abgeleitet wurden. Wenn z.B. ein
rotationssymmetrisches Bild unter Verwendung von
hom_mat2d_rotatehom_mat2d_rotateHomMat2dRotatehom_mat2d_rotateHomMat2dRotateHomMat2dRotate um seinen mit area_center_grayarea_center_grayAreaCenterGrayarea_center_grayAreaCenterGrayAreaCenterGray
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_imageProjectiveTransImageprojective_trans_imageProjectiveTransImageProjectiveTransImage 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)
projective_trans_image(Image, TransImage, HomMat2DAdapted,
'bilinear', 'false', 'false')
projective_trans_imageprojective_trans_imageProjectiveTransImageprojective_trans_imageProjectiveTransImageProjectiveTransImage 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 TransformDomainTransformDomainTransformDomainTransformDomainTransformDomaintransformDomain auf
'false'"false""false""false""false""false" gesetzt wird. Das Ergebnis kann dabei geringfühgig von dem
auf der CPU berechneten abweichen.
- Unterstützt OpenCL Compute Devices.
- Multithreading-Typ: reentrant (läuft parallel zu nicht-exklusiven Operatoren).
- Multithreading-Bereich: global (kann von jedem Thread aufgerufen werden).
- Automatisch parallelisiert auf Tupelebene.
- Automatisch parallelisiert auf Kanalebene.
- Automatisch parallelisiert auf interner Datenebene.
Homogene projektive Transformationsmatrix.
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"
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"
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"
vector_to_proj_hom_mat2dvector_to_proj_hom_mat2dVectorToProjHomMat2dvector_to_proj_hom_mat2dVectorToProjHomMat2dVectorToProjHomMat2d,
hom_vector_to_proj_hom_mat2dhom_vector_to_proj_hom_mat2dHomVectorToProjHomMat2dhom_vector_to_proj_hom_mat2dHomVectorToProjHomMat2dHomVectorToProjHomMat2d,
proj_match_points_ransacproj_match_points_ransacProjMatchPointsRansacproj_match_points_ransacProjMatchPointsRansacProjMatchPointsRansac,
proj_match_points_ransac_guidedproj_match_points_ransac_guidedProjMatchPointsRansacGuidedproj_match_points_ransac_guidedProjMatchPointsRansacGuidedProjMatchPointsRansacGuided,
hom_mat3d_projecthom_mat3d_projectHomMat3dProjecthom_mat3d_projectHomMat3dProjectHomMat3dProject
projective_trans_image_sizeprojective_trans_image_sizeProjectiveTransImageSizeprojective_trans_image_sizeProjectiveTransImageSizeProjectiveTransImageSize,
projective_trans_contour_xldprojective_trans_contour_xldProjectiveTransContourXldprojective_trans_contour_xldProjectiveTransContourXldProjectiveTransContourXld,
projective_trans_regionprojective_trans_regionProjectiveTransRegionprojective_trans_regionProjectiveTransRegionProjectiveTransRegion,
projective_trans_point_2dprojective_trans_point_2dProjectiveTransPoint2dprojective_trans_point_2dProjectiveTransPoint2dProjectiveTransPoint2d,
projective_trans_pixelprojective_trans_pixelProjectiveTransPixelprojective_trans_pixelProjectiveTransPixelProjectiveTransPixel
Foundation