polar_trans_region
— Anwenden einer Polarkoordinatentransformation auf eine Region innerhalb eines
Kreisrings.
polar_trans_region(Region : PolarTransRegion : Row, Column, AngleStart, AngleEnd, RadiusStart, RadiusEnd, Width, Height, Interpolation : )
polar_trans_region
transformiert eine Region
, die
innerhalb des durch den Mittelpunkt (Row
, Column
),
die Radien RadiusStart
und RadiusEnd
und die
Winkel AngleStart
und AngleEnd
definierten
Kreisrings liegt, auf dessen Polarkoordinatendarstellung in der
Region PolarTransRegion
in einem virtuellen Bild mit den
Dimensionen Width
x Height
.
Die Polartransformation entspricht einem Wechsel des
Koordinatensystems. Anstatt durch Zeilen- und Spaltenkoordinate
wird die Position eines Punktes durch dessen Radius (Abstand zum
Mittelpunkt Row
,Column
) und den Winkel zwischen
der Spaltenachse (durch den Mittelpunkt) und der Strecke vom
Mittelpunkt zum Punkt beschrieben. Diese Transformation ist nicht
affin.
Die Koordinate (0,0) in der Ausgabregion entspricht immer dem
Punkt in der Eingaberegion, der durch RadiusStart
und
AngleStart
spezifiziert wird. Analog entspricht die
Koordinate (Height
-1, Width
-1) immer dem Punkt
in der Eingaberegion, 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 in der Ausgaberegion weiter oben. Durch geeignetes
Vertauschen der Werte der Parameter (z.B. AngleStart
>
AngleEnd
oder RadiusStart
> RadiusEnd
)
kann jede beliebige Orientierung der Ausgaberegion erreicht werden.
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
dem Wert
Height
-1, so wird die Berechnung durch eine optimierte
Routine erheblich schneller durchgeführt.
Die Radien und Winkel sind inklusive, d.h. die erste Zeile des
virtuellen 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
virtuellen Zielbildes gleich der letzten ist.
Um diesem Verhalten vorzubeugen, sollte diese Differenz statt betragen.
Über den Parameter Interpolation
kann dabei zwischen den
Interpolationsverfahren 'bilinear' und
'nearest_neighbor' gewählt werden. Die Wahl
Interpolation
= 'bilinear' kann insbesondere bei
Vergrößerungen zu glatteren Regionenrändern führen. Allerdings
steigt dadurch die Laufzeit signifikant an.
Werden mehrere Regionen in Region
übergeben, werden deren
Polartransformationen individuell berechnet und als Tupel in
PolarTransRegion
abgespeichert. Dabei entsprechen die
Indizes von Ein- und Ausgaberegionen nur dann einander, wenn die
Systemvariable 'store_empty_regions' auf 'true'
gesetzt wird (siehe auch set_system
). Sonst werden leere
Regionen nicht zurückgegeben und deshalb entspricht die Länge des
Ausgabetupels PolarTransRegion
im Allgemeinen nicht der
Länge des Eingabetupels Region
.
Ein Überblick zu den verschiedenen in HALCON verwendeten 2D Koordinatensystemen ist in der Einleitung zum Kapitel Transformationen / 2D-Transformationen gegeben.
Werden die Dimensionen des virtuellen Ausgabebildes Width
und Height
größer als die Dimensionen des aktuellen Bildes
gewählt, sollte die Systemvariable 'clip_region' auf
'false' gesetzt werden (siehe auch
set_system
). Andernfalls kann eine Ausgaberegion, die nicht
innerhalb der Dimensionen des aktuellen Bildes liegt, zu einer
Fehlermeldung führen.
Region
(input_object) region(-array) →
object
Eingaberegion.
PolarTransRegion
(output_object) region(-array) →
object
Ergebnisregion.
Row
(input_control) number →
(real / integer)
Zeilenkoordinate des Kreismittelpunktes.
Defaultwert: 256
Wertevorschläge: 0, 16, 32, 64, 128, 240, 256, 480, 512
Typischer Wertebereich: 0
≤
Row
≤
32767
Restriktion: Row >= -131068 && Row <= 131068
Column
(input_control) number →
(real / integer)
Spaltenkoordinate des Kreismittelpunktes.
Defaultwert: 256
Wertevorschläge: 0, 16, 32, 64, 128, 256, 320, 512, 640
Typischer Wertebereich: 0
≤
Column
≤
32767
Restriktion: Column >= -131068 && Column <= 131068
AngleStart
(input_control) angle.rad →
(real)
Winkel, der auf die Spaltenkoordinate 0
in PolarTransRegion
abgebildet wird.
Defaultwert: 0.0
Wertevorschläge: 0.0, 0.78539816, 1.57079632, 3.141592654, 6.2831853, 12.566370616
Typischer Wertebereich: -6.2831853
≤
AngleStart
≤
6.2831853
AngleEnd
(input_control) angle.rad →
(real)
Winkel, der auf die Spaltenkoordinate Width
-1 in PolarTransRegion
abgebildet wird.
Defaultwert: 6.2831853
Wertevorschläge: 0.0, 0.78539816, 1.57079632, 3.141592654, 6.2831853, 12.566370616
Typischer Wertebereich: -6.2831853
≤
AngleEnd
≤
6.2831853
RadiusStart
(input_control) number →
(real / integer)
Kreisradius, der auf die Zeilenkoordinate 0
in PolarTransRegion
abgebildet wird.
Defaultwert: 0
Wertevorschläge: 0, 16, 32, 64, 100, 128, 256, 512
Typischer Wertebereich: 0
≤
RadiusStart
≤
32767
RadiusEnd
(input_control) number →
(real / integer)
Kreisradius, der auf die Zeilenkoordinate
Height
-1 abgebildet wird.
Defaultwert: 100
Wertevorschläge: 0, 16, 32, 64, 100, 128, 256, 512
Typischer Wertebereich: 0
≤
RadiusEnd
≤
32767
Width
(input_control) extent.x →
(integer)
Breite des virtuellen Zielbildes.
Defaultwert: 512
Wertevorschläge: 256, 320, 512, 640, 800, 1024
Typischer Wertebereich: 2
≤
Width
≤
32767
Height
(input_control) extent.y →
(integer)
Höhe des virtuellen Zielbildes.
Defaultwert: 512
Wertevorschläge: 240, 256, 480, 512, 600, 1024
Typischer Wertebereich: 2
≤
Height
≤
32767
Interpolation
(input_control) string →
(string)
Interpolationsverfahren für die Transformation.
Defaultwert: 'nearest_neighbor'
Werteliste: 'bilinear' , 'nearest_neighbor'
polar_trans_image_ext
,
polar_trans_image_inv
,
polar_trans_region_inv
,
polar_trans_contour_xld
,
polar_trans_contour_xld_inv
Foundation