polar_trans_image_ext
— Anwenden einer Polarkoordinatentransformation eines Kreisrings.
polar_trans_image_ext(Image : PolarTransImage : Row, Column, AngleStart, AngleEnd, RadiusStart, RadiusEnd, Width, Height, Interpolation : )
polar_trans_image_ext
transformiert den durch den
Mittelpunkt (Row
, Column
), die Radien
RadiusStart
und RadiusEnd
und die Winkel
AngleStart
und AngleEnd
definierten Kreisring im
Bild Image
auf dessen Polarkoordinatendarstellung im Bild
PolarTransImage
mit den Dimensionen Width
x Height
.
Das linke obere Pixel im Ausgabebild entspricht immer dem Punkt im
Eingabebild, der durch RadiusStart
und AngleStart
spezifiziert wird. Analog entspricht das rechte untere Pixel im
Ausgabebild immer dem Punkt im Eingabebild, der durch
RadiusEnd
und AngleEnd
spezifiziert wird. Im
Normalfall (AngleStart
< AngleEnd
und
RadiusStart
< RadiusEnd
) wird die
Polarkoordinatentransformation also in mathematisch positiver
Durchlaufrichtung (entgegen dem Uhrzeigersinn) durchgeführt. Dabei
liegen die Punkte mit kleineren Radien im Ausgabebild weiter oben.
Durch geeignetes Vertauschen der Werte der Parameter
(z.B. AngleStart
> AngleEnd
oder
RadiusStart
> RadiusEnd
) kann jede beliebige
Orientierung des Ausgabebildes erreicht werden.
Über den Parameter Interpolation
kann dabei zwischen den
Interpolationsverfahren 'bilinear' und
'nearest_neighbor' gewählt werden. Bei
'nearest_neighbor' wird der Grauwert des Pixels im
Ausgabebild aus dem Grauwert des nächstgelegenen Pixels im
Eingabebild bestimmt. Bei 'bilinear' wird der Grauwert des
Pixels im Ausgabebild durch bilineare Interpolation aus den
Grauwerten der vier nächstgelegenen Pixel im Eingabebild bestimmt.
Der Modus 'bilinear' liefert qualitativ bessere Ergebnisse,
ist allerdings auch langsamer als 'nearest_neighbor' .
Die Winkel sind frei als reelle Zahlen wählbar, Mittelpunkt und
Radien können ebenfalls frei als reelle Zahlen gewählt
werden. Sind diese jedoch ganze Zahlen und entspricht die Differenz
von RadiusEnd
und RadiusStart
der Höhe
Height
des Zielbildes, so wird die Berechnung durch eine
optimierte Routine erheblich schneller durchgeführt.
Die Radien und Winkel sind inklusive, d.h. die erste Zeile des
Zielbildes entspricht dem Kreis mit dem Radius RadiusStart
,
die letzte Zeile dem mit dem Radius RadiusEnd
. Für
Vollkreise, bei denen die Differenz AngleStart
-
AngleEnd
(360 Grad) beträgt, bedeutet
dies insbesondere, dass die erste Spalte des Zielbildes gleich der
letzten ist.
Um diesem Verhalten vorzubeugen sollte diese Differenz statt betragen.
Der Aufruf: polar_trans_image(Image, PolarTransImage, Row, Column, Width, Height) entspricht dem Aufruf: polar_trans_image_ext(Image, PolarTransImage, Row-0.5, Column-0.5, 6.2831853, 6.2831853/Width, 0, Height-1, Width, Height, 'nearest_neighbor')
Der Offset von 0.5 ist notwendig, da polar_trans_image
keine
Nearest-Neighbor Interpolation durchführt, Radien und Winkel
ergeben sich durch die im vorherigen Abschnitt beschriebenen
Überlegungen, da diese Werte in polar_trans_image
nicht
inklusive behandelt werden. Der Startwinkel ist hier größer als
der Endwinkel, damit der Kreisring von polar_trans_image_ext
genauso wie in polar_trans_image
im Uhrzeigersinn
durchlaufen wird.
polar_trans_image_ext
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. Aus numerischen Gründen kann es dabei zu
geringfügigen Abweichungen des Ergebnisses gegenüber der Ausführung auf der
CPU kommen.
Für Bilder vom Typ 'byte' , 'int2' 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. Bei der Festkommaberechnung kann es allerdings zu leichten
Grauwertabweichungen und Pixeln mit undefinierten Grauwerten kommen.
Ein Überblick zu den verschiedenen in HALCON verwendeten 2D Koordinatensystemen ist in der Einleitung zum Kapitel Transformationen / 2D-Transformationen gegeben.
Aus Geschwindigkeitsgründen wird die Region des Eingabebildes nicht beachtet. Das Ausgabebild hat immer ein komplettes Rechteck als Region.
Image
(input_object) (multichannel-)image(-array) →
object (byte* / int2* / uint2* / real*) *erlaubt für Compute Devices
Eingabebild.
PolarTransImage
(output_object) (multichannel-)image(-array) →
object (byte / int2 / uint2 / real)
Ergebnisbild.
Row
(input_control) number →
(real / integer)
Zeilenkoordinate des Kreismittelpunktes.
Defaultwert: 256
Wertevorschläge: 0, 16, 32, 64, 128, 240, 256, 480, 512
Column
(input_control) number →
(real / integer)
Spaltenkoordinate des Kreismittelpunktes.
Defaultwert: 256
Wertevorschläge: 0, 16, 32, 64, 128, 256, 320, 512, 640
AngleStart
(input_control) angle.rad →
(real)
Winkel, der die erste Spalte des Zielbildes definiert.
Defaultwert: 0.0
Wertevorschläge: 0.0, 0.78539816, 1.57079632, 3.141592654, 6.2831853, 12.566370616
AngleEnd
(input_control) angle.rad →
(real)
Winkel, der die letzte Spalte des Zielbildes definiert.
Defaultwert: 6.2831853
Wertevorschläge: 0.0, 0.78539816, 1.57079632, 3.141592654, 6.2831853, 12.566370616
RadiusStart
(input_control) number →
(real / integer)
Kreisradius, der die erste Zeile des Zielbildes definiert.
Defaultwert: 0
Wertevorschläge: 0, 16, 32, 64, 100, 128, 256, 512
Typischer Wertebereich: 0
≤
RadiusStart
RadiusEnd
(input_control) number →
(real / integer)
Kreisradius, der die letzte Zeile des Zielbildes definiert.
Defaultwert: 100
Wertevorschläge: 0, 16, 32, 64, 100, 128, 256, 512
Typischer Wertebereich: 0
≤
RadiusEnd
Width
(input_control) extent.x →
(integer)
Breite des Zielbildes.
Defaultwert: 512
Wertevorschläge: 256, 320, 512, 640, 800, 1024
Typischer Wertebereich: 0
≤
Width
≤
32767
Height
(input_control) extent.y →
(integer)
Höhe des Zielbildes.
Defaultwert: 512
Wertevorschläge: 240, 256, 480, 512, 600, 1024
Typischer Wertebereich: 0
≤
Height
≤
32767
Interpolation
(input_control) string →
(string)
Interpolationsverfahren für die Transformation.
Defaultwert: 'nearest_neighbor'
Werteliste: 'bilinear' , 'nearest_neighbor'
polar_trans_image_inv
,
polar_trans_region
,
polar_trans_region_inv
,
polar_trans_contour_xld
,
polar_trans_contour_xld_inv
Foundation