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):
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
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.