Name
polar_trans_image_extpolar_trans_image_extPolarTransImageExtpolar_trans_image_extPolarTransImageExtPolarTransImageExt — Anwenden einer Polarkoordinatentransformation eines Kreisrings.
Herror polar_trans_image_ext(const Hobject Image, Hobject* PolarTransImage, double Row, double Column, double AngleStart, double AngleEnd, double RadiusStart, double RadiusEnd, const Hlong Width, const Hlong Height, const char* Interpolation)
Herror T_polar_trans_image_ext(const Hobject Image, Hobject* PolarTransImage, const Htuple Row, const Htuple Column, const Htuple AngleStart, const Htuple AngleEnd, const Htuple RadiusStart, const Htuple RadiusEnd, const Htuple Width, const Htuple Height, const Htuple Interpolation)
Herror polar_trans_image_ext(Hobject Image, Hobject* PolarTransImage, const HTuple& Row, const HTuple& Column, const HTuple& AngleStart, const HTuple& AngleEnd, const HTuple& RadiusStart, const HTuple& RadiusEnd, const HTuple& Width, const HTuple& Height, const HTuple& Interpolation)
HImage HImage::PolarTransImageExt(const HTuple& Row, const HTuple& Column, const HTuple& AngleStart, const HTuple& AngleEnd, const HTuple& RadiusStart, const HTuple& RadiusEnd, const HTuple& Width, const HTuple& Height, const HTuple& Interpolation) const
HImageArray HImageArray::PolarTransImageExt(const HTuple& Row, const HTuple& Column, const HTuple& AngleStart, const HTuple& AngleEnd, const HTuple& RadiusStart, const HTuple& RadiusEnd, const HTuple& Width, const HTuple& Height, const HTuple& Interpolation) const
void PolarTransImageExt(const HObject& Image, HObject* PolarTransImage, const HTuple& Row, const HTuple& Column, const HTuple& AngleStart, const HTuple& AngleEnd, const HTuple& RadiusStart, const HTuple& RadiusEnd, const HTuple& Width, const HTuple& Height, const HTuple& Interpolation)
HImage HImage::PolarTransImageExt(const HTuple& Row, const HTuple& Column, double AngleStart, double AngleEnd, const HTuple& RadiusStart, const HTuple& RadiusEnd, Hlong Width, Hlong Height, const HString& Interpolation) const
HImage HImage::PolarTransImageExt(double Row, double Column, double AngleStart, double AngleEnd, double RadiusStart, double RadiusEnd, Hlong Width, Hlong Height, const HString& Interpolation) const
HImage HImage::PolarTransImageExt(double Row, double Column, double AngleStart, double AngleEnd, double RadiusStart, double RadiusEnd, Hlong Width, Hlong Height, const char* Interpolation) const
void HOperatorSetX.PolarTransImageExt(
[in] IHUntypedObjectX* Image, [out] IHUntypedObjectX** PolarTransImage, [in] VARIANT Row, [in] VARIANT Column, [in] VARIANT AngleStart, [in] VARIANT AngleEnd, [in] VARIANT RadiusStart, [in] VARIANT RadiusEnd, [in] VARIANT Width, [in] VARIANT Height, [in] VARIANT Interpolation)
IHImageX* HImageX.PolarTransImageExt(
[in] VARIANT Row, [in] VARIANT Column, [in] double AngleStart, [in] double AngleEnd, [in] VARIANT RadiusStart, [in] VARIANT RadiusEnd, [in] Hlong Width, [in] Hlong Height, [in] BSTR Interpolation)
static void HOperatorSet.PolarTransImageExt(HObject image, out HObject polarTransImage, HTuple row, HTuple column, HTuple angleStart, HTuple angleEnd, HTuple radiusStart, HTuple radiusEnd, HTuple width, HTuple height, HTuple interpolation)
HImage HImage.PolarTransImageExt(HTuple row, HTuple column, double angleStart, double angleEnd, HTuple radiusStart, HTuple radiusEnd, int width, int height, string interpolation)
HImage HImage.PolarTransImageExt(double row, double column, double angleStart, double angleEnd, double radiusStart, double radiusEnd, int width, int height, string interpolation)
polar_trans_image_extpolar_trans_image_extPolarTransImageExtpolar_trans_image_extPolarTransImageExtPolarTransImageExt transformiert den durch den
Mittelpunkt (RowRowRowRowRowrow, ColumnColumnColumnColumnColumncolumn), die Radien
RadiusStartRadiusStartRadiusStartRadiusStartRadiusStartradiusStart und RadiusEndRadiusEndRadiusEndRadiusEndRadiusEndradiusEnd und die Winkel
AngleStartAngleStartAngleStartAngleStartAngleStartangleStart und AngleEndAngleEndAngleEndAngleEndAngleEndangleEnd definierten Kreisring im
Bild ImageImageImageImageImageimage auf dessen Polarkoordinatendarstellung im Bild
PolarTransImagePolarTransImagePolarTransImagePolarTransImagePolarTransImagepolarTransImage mit den Dimensionen WidthWidthWidthWidthWidthwidth
x HeightHeightHeightHeightHeightheight.
Das linke obere Pixel im Ausgabebild entspricht immer dem Punkt im
Eingabebild, der durch RadiusStartRadiusStartRadiusStartRadiusStartRadiusStartradiusStart und AngleStartAngleStartAngleStartAngleStartAngleStartangleStart
spezifiziert wird. Analog entspricht das rechte untere Pixel im
Ausgabebild immer dem Punkt im Eingabebild, der durch
RadiusEndRadiusEndRadiusEndRadiusEndRadiusEndradiusEnd und AngleEndAngleEndAngleEndAngleEndAngleEndangleEnd spezifiziert wird. Im
Normalfall (AngleStartAngleStartAngleStartAngleStartAngleStartangleStart < AngleEndAngleEndAngleEndAngleEndAngleEndangleEnd und
RadiusStartRadiusStartRadiusStartRadiusStartRadiusStartradiusStart < RadiusEndRadiusEndRadiusEndRadiusEndRadiusEndradiusEnd) 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. AngleStartAngleStartAngleStartAngleStartAngleStartangleStart > AngleEndAngleEndAngleEndAngleEndAngleEndangleEnd oder
RadiusStartRadiusStartRadiusStartRadiusStartRadiusStartradiusStart > RadiusEndRadiusEndRadiusEndRadiusEndRadiusEndradiusEnd) kann jede beliebige
Orientierung des Ausgabebildes erreicht werden.
Über den Parameter InterpolationInterpolationInterpolationInterpolationInterpolationinterpolation kann dabei zwischen den
Interpolationsverfahren 'bilinear'"bilinear""bilinear""bilinear""bilinear""bilinear" und
'nearest_neighbor'"nearest_neighbor""nearest_neighbor""nearest_neighbor""nearest_neighbor""nearest_neighbor" gewählt werden. Bei
'nearest_neighbor'"nearest_neighbor""nearest_neighbor""nearest_neighbor""nearest_neighbor""nearest_neighbor" wird der Grauwert des Pixels im
Ausgabebild aus dem Grauwert des nächstgelegenen Pixels im
Eingabebild bestimmt. Bei 'bilinear'"bilinear""bilinear""bilinear""bilinear""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'"bilinear""bilinear""bilinear""bilinear""bilinear" liefert qualitativ bessere Ergebnisse,
ist allerdings auch langsamer als 'nearest_neighbor'"nearest_neighbor""nearest_neighbor""nearest_neighbor""nearest_neighbor""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 RadiusEndRadiusEndRadiusEndRadiusEndRadiusEndradiusEnd und RadiusStartRadiusStartRadiusStartRadiusStartRadiusStartradiusStart der Höhe
HeightHeightHeightHeightHeightheight 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 RadiusStartRadiusStartRadiusStartRadiusStartRadiusStartradiusStart,
die letzte Zeile dem mit dem Radius RadiusEndRadiusEndRadiusEndRadiusEndRadiusEndradiusEnd. Für
Vollkreise, bei denen die Differenz AngleStartAngleStartAngleStartAngleStartAngleStartangleStart -
AngleEndAngleEndAngleEndAngleEndAngleEndangleEnd 2 * pi (360 Grad) beträgt, bedeutet
dies insbesondere, dass die erste Spalte des Zielbildes gleich der
letzten ist.
Um diesem Verhalten vorzubeugen sollte diese Differenz 2 * pi * (1 - 1/WidthWidthWidthWidthWidthwidth) statt
2 * pi 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_imagepolar_trans_imagePolarTransImagepolar_trans_imagePolarTransImagePolarTransImage keine
Nearest-Neighbor Interpolation durchführt, Radien und Winkel
ergeben sich durch die im vorherigen Abschnitt beschriebenen
Überlegungen, da diese Werte in polar_trans_imagepolar_trans_imagePolarTransImagepolar_trans_imagePolarTransImagePolarTransImage nicht
inklusive behandelt werden. Der Startwinkel ist hier größer als
der Endwinkel, damit der Kreisring von polar_trans_image_extpolar_trans_image_extPolarTransImageExtpolar_trans_image_extPolarTransImageExtPolarTransImageExt
genauso wie in polar_trans_imagepolar_trans_imagePolarTransImagepolar_trans_imagePolarTransImagePolarTransImage im Uhrzeigersinn
durchlaufen wird.
polar_trans_image_extpolar_trans_image_extPolarTransImageExtpolar_trans_image_extPolarTransImageExtPolarTransImageExt 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.
Aus Geschwindigkeitsgründen wird die Region des Eingabebildes nicht
beachtet. Das Ausgabebild hat immer ein komplettes Rechteck als
Region.
- 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.
RowRowRowRowRowrow (input_control) number → HTupleHTupleHTupleVARIANTHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong) (double / Hlong) (double / Hlong)
Zeilenkoordinate des Kreismittelpunktes.
Defaultwert: 256
Wertevorschläge: 0, 16, 32, 64, 128, 240, 256, 480, 512
Spaltenkoordinate des Kreismittelpunktes.
Defaultwert: 256
Wertevorschläge: 0, 16, 32, 64, 128, 256, 320, 512, 640
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
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
Kreisradius, der die erste Zeile des
Zielbildes definiert.
Defaultwert: 0
Wertevorschläge: 0, 16, 32, 64, 100, 128, 256, 512
Typischer Wertebereich: 0
≤
RadiusStart
RadiusStart
RadiusStart
RadiusStart
RadiusStart
radiusStart
Kreisradius, der die letzte Zeile des
Zielbildes definiert.
Defaultwert: 100
Wertevorschläge: 0, 16, 32, 64, 100, 128, 256, 512
Typischer Wertebereich: 0
≤
RadiusEnd
RadiusEnd
RadiusEnd
RadiusEnd
RadiusEnd
radiusEnd
Breite des Zielbildes.
Defaultwert: 512
Wertevorschläge: 256, 320, 512, 640, 800, 1024
Typischer Wertebereich: 0
≤
Width
Width
Width
Width
Width
width
≤
32767
Höhe des Zielbildes.
Defaultwert: 512
Wertevorschläge: 240, 256, 480, 512, 600, 1024
Typischer Wertebereich: 0
≤
Height
Height
Height
Height
Height
height
≤
32767
Interpolationsverfahren für die Transformation.
Defaultwert:
'nearest_neighbor'
"nearest_neighbor"
"nearest_neighbor"
"nearest_neighbor"
"nearest_neighbor"
"nearest_neighbor"
Werteliste: 'bilinear'"bilinear""bilinear""bilinear""bilinear""bilinear", 'nearest_neighbor'"nearest_neighbor""nearest_neighbor""nearest_neighbor""nearest_neighbor""nearest_neighbor"
polar_trans_image_invpolar_trans_image_invPolarTransImageInvpolar_trans_image_invPolarTransImageInvPolarTransImageInv,
polar_trans_regionpolar_trans_regionPolarTransRegionpolar_trans_regionPolarTransRegionPolarTransRegion,
polar_trans_region_invpolar_trans_region_invPolarTransRegionInvpolar_trans_region_invPolarTransRegionInvPolarTransRegionInv,
polar_trans_contour_xldpolar_trans_contour_xldPolarTransContourXldpolar_trans_contour_xldPolarTransContourXldPolarTransContourXld,
polar_trans_contour_xld_invpolar_trans_contour_xld_invPolarTransContourXldInvpolar_trans_contour_xld_invPolarTransContourXldInvPolarTransContourXldInv
Foundation