| Operatoren |
projective_trans_image — Berechnen der projektiven Transformation eines Bildes.
projective_trans_image(Image : TransImage : HomMat2D, Interpolation, AdaptImageSize, TransformDomain : )
projective_trans_image wendet die durch die homogene Transformationsmatrix HomMat2D beschriebene projektive Transformation (Homographie) auf das Eingabebild Image an und speichert das Ergebnis in das Ausgabebild TransImage.
Ist der Parameter AdaptImageSize auf 'false' gesetzt, so erhält TransImage dieselbe Größe wie Image; ist AdaptImageSize 'true', so wird die Zielgröße falls möglich automatisch so gewählt, dass alle nichtnegativen Punkte des transformierten Bildes sichtbar sind.
Der Parameter Interpolation bestimmt, welche Interpolationsmethode zur Bestimmung der Grauwerte verwendet wird. Für Interpolation = '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 Interpolation = 'bilinear' werden die Grauwerte bilinear interpoliert, was länger dauert, aber auch zu wesentlich besseren Ergebnissen führt.
Mit TransformDomain kann festgelegt werden, ob der Definitionsbereich von Image transformiert wird. Da die Transformation des Definitionsbereichs Zeit kostet, kann dieser Parameter dazu verwendet werden, festzulegen, ob dies erwünscht ist. Wenn TransformDomain auf 'false' gesetzt wird, wird der Definitionsbereich des Eingabebildes ignoriert. Somit wird das komplette Bild transformiert.
Die projektive Transformationsmatrix HomMat2D kann z.B. mit vector_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_image entspricht bei projective_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 HomMat2D die Form (0,0,c) besitzt.
Für Bilder vom Typ 'byte' oder 'uint2' kann mittels des Systemparameters 'int_zooming' (siehe set_system) zwischen schneller Berechnung in Festkommaarithmetik ('int_zooming' = 'true') und hochgenauer Berechung in Fließkommaarithmetik ('int_zooming' = 'false') gewählt werden. Insbesondere für Interpolation = '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' = 'false' zu empfehlen.
Der Transformation liegt das gleiche Koordinatensystem zugrunde, das auch bei dem Operator affine_trans_pixel verwendet wird. Das bedeutet, dass die Transformation nicht mit der Transformationsmatrix HomMat2D, sondern mit einer modifizierte Version davon durchgeführt wird. Eine Transformation mit projective_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_gray abgeleitet wurden. Wenn z.B. ein rotationssymmetrisches Bild unter Verwendung von hom_mat2d_rotate um seinen mit area_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_image die Transformationsmatrix HomMat2D 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_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 TransformDomain auf 'false' gesetzt wird. Das Ergebnis kann dabei geringfügig von dem auf der CPU berechneten abweichen.
Eingabebild.
Ergebnisbild.
Homogene projektive Transformationsmatrix.
Interpolationsmethode für die Transformation.
Defaultwert: 'bilinear'
Werteliste: 'bilinear', 'nearest_neighbor'
Automatische Größenanpassung für Zielbild.
Defaultwert: 'false'
Werteliste: 'false', 'true'
Soll die Region des Eingabebildes auch transformiert werden?
Defaultwert: 'false'
Werteliste: 'false', 'true'
Werteliste (für Compute Devices): 'false'
vector_to_proj_hom_mat2d, hom_vector_to_proj_hom_mat2d, proj_match_points_ransac, proj_match_points_ransac_guided, hom_mat3d_project
projective_trans_image_size, projective_trans_contour_xld, projective_trans_region, projective_trans_point_2d, projective_trans_pixel
Foundation
| Operatoren |