projective_trans_imageT_projective_trans_imageProjectiveTransImageprojective_trans_imageProjectiveTransImageProjectiveTransImage — Berechnen der projektiven Transformation eines Bildes.
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_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
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):
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ügig von dem
auf der CPU berechneten abweichen.