polar_trans_image_extpolar_trans_image_extPolarTransImageExtPolarTransImageExtpolar_trans_image_ext (Operator)

Name

polar_trans_image_extpolar_trans_image_extPolarTransImageExtPolarTransImageExtpolar_trans_image_ext — Anwenden einer Polarkoordinatentransformation eines Kreisrings.

Signatur

polar_trans_image_ext(Image : PolarTransImage : Row, Column, AngleStart, AngleEnd, RadiusStart, RadiusEnd, Width, Height, Interpolation : )

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)

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

HImage HImage::PolarTransImageExt(double Row, double Column, double AngleStart, double AngleEnd, double RadiusStart, double RadiusEnd, Hlong Width, Hlong Height, const wchar_t* Interpolation) const   (Nur Windows)

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)

def polar_trans_image_ext(image: HObject, row: Union[int, float], column: Union[int, float], angle_start: float, angle_end: float, radius_start: Union[int, float], radius_end: Union[int, float], width: int, height: int, interpolation: str) -> HObject

Beschreibung

polar_trans_image_extpolar_trans_image_extPolarTransImageExtPolarTransImageExtPolarTransImageExtpolar_trans_image_ext transformiert den durch den Mittelpunkt (RowRowRowRowrowrow, ColumnColumnColumnColumncolumncolumn), die Radien RadiusStartRadiusStartRadiusStartRadiusStartradiusStartradius_start und RadiusEndRadiusEndRadiusEndRadiusEndradiusEndradius_end und die Winkel AngleStartAngleStartAngleStartAngleStartangleStartangle_start und AngleEndAngleEndAngleEndAngleEndangleEndangle_end definierten Kreisring im Bild ImageImageImageImageimageimage auf dessen Polarkoordinatendarstellung im Bild PolarTransImagePolarTransImagePolarTransImagePolarTransImagepolarTransImagepolar_trans_image mit den Dimensionen WidthWidthWidthWidthwidthwidth x HeightHeightHeightHeightheightheight.

Das linke obere Pixel im Ausgabebild entspricht immer dem Punkt im Eingabebild, der durch RadiusStartRadiusStartRadiusStartRadiusStartradiusStartradius_start und AngleStartAngleStartAngleStartAngleStartangleStartangle_start spezifiziert wird. Analog entspricht das rechte untere Pixel im Ausgabebild immer dem Punkt im Eingabebild, der durch RadiusEndRadiusEndRadiusEndRadiusEndradiusEndradius_end und AngleEndAngleEndAngleEndAngleEndangleEndangle_end spezifiziert wird. Im Normalfall (AngleStartAngleStartAngleStartAngleStartangleStartangle_start < AngleEndAngleEndAngleEndAngleEndangleEndangle_end und RadiusStartRadiusStartRadiusStartRadiusStartradiusStartradius_start < RadiusEndRadiusEndRadiusEndRadiusEndradiusEndradius_end) 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. AngleStartAngleStartAngleStartAngleStartangleStartangle_start > AngleEndAngleEndAngleEndAngleEndangleEndangle_end oder RadiusStartRadiusStartRadiusStartRadiusStartradiusStartradius_start > RadiusEndRadiusEndRadiusEndRadiusEndradiusEndradius_end) 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 RadiusEndRadiusEndRadiusEndRadiusEndradiusEndradius_end und RadiusStartRadiusStartRadiusStartRadiusStartradiusStartradius_start 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 RadiusStartRadiusStartRadiusStartRadiusStartradiusStartradius_start, die letzte Zeile dem mit dem Radius RadiusEndRadiusEndRadiusEndRadiusEndradiusEndradius_end. Für Vollkreise, bei denen die Differenz AngleStartAngleStartAngleStartAngleStartangleStartangle_start - AngleEndAngleEndAngleEndAngleEndangleEndangle_end (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)polar_trans_image(Image, PolarTransImage, Row, Column, Width, Height)PolarTransImage(Image, PolarTransImage, Row, Column, Width, Height)PolarTransImage(Image, PolarTransImage, Row, Column, Width, Height)PolarTransImage(Image, PolarTransImage, Row, Column, Width, Height)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')polar_trans_image_ext(Image, PolarTransImage, Row-0.5, Column-0.5, 6.2831853, 6.2831853/Width, 0, Height-1, Width, Height, "nearest_neighbor")PolarTransImageExt(Image, PolarTransImage, Row-0.5, Column-0.5, 6.2831853, 6.2831853/Width, 0, Height-1, Width, Height, "nearest_neighbor")PolarTransImageExt(Image, PolarTransImage, Row-0.5, Column-0.5, 6.2831853, 6.2831853/Width, 0, Height-1, Width, Height, "nearest_neighbor")PolarTransImageExt(Image, PolarTransImage, Row-0.5, Column-0.5, 6.2831853, 6.2831853/Width, 0, Height-1, Width, Height, "nearest_neighbor")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_imagePolarTransImagePolarTransImagePolarTransImagepolar_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_imagepolar_trans_imagePolarTransImagePolarTransImagePolarTransImagepolar_trans_image nicht inklusive behandelt werden. Der Startwinkel ist hier größer als der Endwinkel, damit der Kreisring von polar_trans_image_extpolar_trans_image_extPolarTransImageExtPolarTransImageExtPolarTransImageExtpolar_trans_image_ext genauso wie in polar_trans_imagepolar_trans_imagePolarTransImagePolarTransImagePolarTransImagepolar_trans_image im Uhrzeigersinn durchlaufen wird.

polar_trans_image_extpolar_trans_image_extPolarTransImageExtPolarTransImageExtPolarTransImageExtpolar_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'"int_zooming""int_zooming""int_zooming""int_zooming""int_zooming" (siehe set_systemset_systemSetSystemSetSystemSetSystemset_system) zwischen schneller Berechnung in Festkommaarithmetik ('int_zooming'"int_zooming""int_zooming""int_zooming""int_zooming""int_zooming" = 'true'"true""true""true""true""true") und hochgenauer Berechnung in Fließkommaarithmetik ('int_zooming'"int_zooming""int_zooming""int_zooming""int_zooming""int_zooming" = 'false'"false""false""false""false""false") gewählt werden. Bei der Festkommaberechnung kann es allerdings zu leichten Grauwertabweichungen und Pixeln mit undefinierten Grauwerten kommen.

Weitere Informationen

Ein Überblick zu den verschiedenen in HALCON verwendeten 2D Koordinatensystemen ist in der Einleitung zum Kapitel Transformationen / 2D-Transformationen gegeben.

Achtung

Aus Geschwindigkeitsgründen wird die Region des Eingabebildes nicht beachtet. Das Ausgabebild hat immer ein komplettes Rechteck als Region.

Ausführungsinformationen

Parameter

ImageImageImageImageimageimage (input_object)  (multichannel-)image(-array) objectHImageHObjectHImageHobject (byte* / int2* / uint2* / real*) *erlaubt für Compute Devices

Eingabebild.

PolarTransImagePolarTransImagePolarTransImagePolarTransImagepolarTransImagepolar_trans_image (output_object)  (multichannel-)image(-array) objectHImageHObjectHImageHobject * (byte / int2 / uint2 / real)

Ergebnisbild.

RowRowRowRowrowrow (input_control)  number HTupleUnion[int, float]HTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

Zeilenkoordinate des Kreismittelpunktes.

Defaultwert: 256

Wertevorschläge: 0, 16, 32, 64, 128, 240, 256, 480, 512

ColumnColumnColumnColumncolumncolumn (input_control)  number HTupleUnion[int, float]HTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

Spaltenkoordinate des Kreismittelpunktes.

Defaultwert: 256

Wertevorschläge: 0, 16, 32, 64, 128, 256, 320, 512, 640

AngleStartAngleStartAngleStartAngleStartangleStartangle_start (input_control)  angle.rad HTuplefloatHTupleHtuple (real) (double) (double) (double)

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

AngleEndAngleEndAngleEndAngleEndangleEndangle_end (input_control)  angle.rad HTuplefloatHTupleHtuple (real) (double) (double) (double)

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

RadiusStartRadiusStartRadiusStartRadiusStartradiusStartradius_start (input_control)  number HTupleUnion[int, float]HTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

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 radius_start

RadiusEndRadiusEndRadiusEndRadiusEndradiusEndradius_end (input_control)  number HTupleUnion[int, float]HTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

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 radius_end

WidthWidthWidthWidthwidthwidth (input_control)  extent.x HTupleintHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Breite des Zielbildes.

Defaultwert: 512

Wertevorschläge: 256, 320, 512, 640, 800, 1024

Typischer Wertebereich: 0 ≤ Width Width Width Width width width ≤ 32767

HeightHeightHeightHeightheightheight (input_control)  extent.y HTupleintHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Höhe des Zielbildes.

Defaultwert: 512

Wertevorschläge: 240, 256, 480, 512, 600, 1024

Typischer Wertebereich: 0 ≤ Height Height Height Height height height ≤ 32767

InterpolationInterpolationInterpolationInterpolationinterpolationinterpolation (input_control)  string HTuplestrHTupleHtuple (string) (string) (HString) (char*)

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"

Siehe auch

polar_trans_image_invpolar_trans_image_invPolarTransImageInvPolarTransImageInvPolarTransImageInvpolar_trans_image_inv, polar_trans_regionpolar_trans_regionPolarTransRegionPolarTransRegionPolarTransRegionpolar_trans_region, polar_trans_region_invpolar_trans_region_invPolarTransRegionInvPolarTransRegionInvPolarTransRegionInvpolar_trans_region_inv, polar_trans_contour_xldpolar_trans_contour_xldPolarTransContourXldPolarTransContourXldPolarTransContourXldpolar_trans_contour_xld, polar_trans_contour_xld_invpolar_trans_contour_xld_invPolarTransContourXldInvPolarTransContourXldInvPolarTransContourXldInvpolar_trans_contour_xld_inv

Modul

Foundation