sobel_ampsobel_ampSobelAmpSobelAmp (Operator)

Name

sobel_ampsobel_ampSobelAmpSobelAmp — Kantendetektion (Amplitude) mit dem Sobel-Operator.

Signatur

sobel_amp(Image : EdgeAmplitude : FilterType, Size : )

Herror sobel_amp(const Hobject Image, Hobject* EdgeAmplitude, const char* FilterType, const Hlong Size)

Herror T_sobel_amp(const Hobject Image, Hobject* EdgeAmplitude, const Htuple FilterType, const Htuple Size)

void SobelAmp(const HObject& Image, HObject* EdgeAmplitude, const HTuple& FilterType, const HTuple& Size)

HImage HImage::SobelAmp(const HString& FilterType, const HTuple& Size) const

HImage HImage::SobelAmp(const HString& FilterType, Hlong Size) const

HImage HImage::SobelAmp(const char* FilterType, Hlong Size) const

HImage HImage::SobelAmp(const wchar_t* FilterType, Hlong Size) const   (Nur Windows)

static void HOperatorSet.SobelAmp(HObject image, out HObject edgeAmplitude, HTuple filterType, HTuple size)

HImage HImage.SobelAmp(string filterType, HTuple size)

HImage HImage.SobelAmp(string filterType, int size)

Beschreibung

sobel_ampsobel_ampSobelAmpSobelAmpSobelAmp berechnet eine Art von erster Ableitung der Grauwertdaten und wird als Kantenfilter eingesetzt. Dem Filter liegen folgende zwei Filtermasken zugrunde: A = 1 2 1 0 0 0 -1 -2 -1 B = 1 0 -1 2 0 -2 1 0 -1 Diese Masken werden je nach Filtertyp unterschiedlich verwendet. (a und b stehen im folgenden für die Ergebnisse der Faltung mit A und B in einem Bildpunkt): thin(x) ist dabei für ein vertikales Maximum (Maske A) bzw. ein horizontales Maximum (Maske B) gleich x und 0 sonst. Damit wird bei 'thin_sum_abs'"thin_sum_abs""thin_sum_abs""thin_sum_abs""thin_sum_abs" und 'thin_max_abs'"thin_max_abs""thin_max_abs""thin_max_abs""thin_max_abs" eine Verdünnung des Gradientenbildes erreicht. Bei Byte-Bildern bzw. uint2/int2-Bildern wird bei dem Modus 'x'"x""x""x""x" bzw. 'y'"y""y""y""y" als Ergebnis ein int1-Bild bzw. int2-Bild zurückgeliefert. Für eine 3x3 Sobel-Filterung (SizeSizeSizeSizesize = 3) werden die Filter A und B direkt angewandt. Für größere Sobel-Filter wird das Eingabebild dagegen zunächst mit dem Gaußfilter (siehe gauss_imagegauss_imageGaussImageGaussImageGaussImage) oder einem Binomialfilter (siehe binomial_filterbinomial_filterBinomialFilterBinomialFilterBinomialFilter) der Größe SizeSizeSizeSizesize-2 geglättet. Der Gaußfilter wird durch die oben angegebenen Werte von FilterTypeFilterTypeFilterTypeFilterTypefilterType ausgewählt. Hierbei ist SizeSizeSizeSizesize = 5, 7, 9, 11 oder 13 zu wählen. Der Binomialfilter wird ausgewählt, indem '_binomial'"_binomial""_binomial""_binomial""_binomial" an die oben angegebenen Werte von FilterTypeFilterTypeFilterTypeFilterTypefilterType angehängt wird. Hier kann SizeSizeSizeSizesize zwischen 5 und 39 gewählt werden. Zusätzlich ist es möglich, unterschiedliche Glättungen in Spalten- und Zeilenrichtung durch Angabe von zwei Werten in SizeSizeSizeSizesize zu erreichen. Dabei entspricht der erste Wert der Maskenbreite (Glättung in Spaltenrichtung) und der zweite Wert der Maskenhöhe (Glättung in Zeilenrichtung) des Binomialfilters. Der Binomialfilter kann nur für Bilder vom Typ byte, uint2 und real verwendet werden. Da die Glättung die Kantenamplituden reduziert, wird in diesem Fall die Kantenamplitude noch mit 2 multipliziert, um einen Informationsverlust zu vermeiden. Somit ist sobel_amp(I,E,FilterType,S) für Size > 3 konzeptuell äquivalent zu scale_image(I,F,2,0) gauss_image(F,G,S-2) sobel_amp(G,E,FilterType,3) bzw. zu scale_image(I,F,2,0) binomial_filter(F,G,S[0]-2,S[1]-2) sobel_amp(G,E,FilterType,3).

Für sobel_ampsobel_ampSobelAmpSobelAmpSobelAmp sind für FilterTypeFilterTypeFilterTypeFilterTypefilterType = 'sum_abs'"sum_abs""sum_abs""sum_abs""sum_abs" spezielle Optimierungen unter Verwendung von SIMD-Technologie implementiert. Ob diese tatsächlich zur Anwendung kommen, kann über den Systemparameter 'sse2_enable'"sse2_enable""sse2_enable""sse2_enable""sse2_enable" beziehungsweise 'avx2_enable'"avx2_enable""avx2_enable""avx2_enable""avx2_enable" (siehe set_systemset_systemSetSystemSetSystemSetSystem) gesteuert werden. Falls 'sse2_enable'"sse2_enable""sse2_enable""sse2_enable""sse2_enable" oder 'avx2_enable'"avx2_enable""avx2_enable""avx2_enable""avx2_enable" auf 'true'"true""true""true""true" gesetzt wird (und die verwendete Hardware SIMD-Technologie unterstützt), wird die Berechnung intern unter Verwendung von SIMD-Technologie durchgeführt. Es ist zu beachten, dass der Beschleunigungseffekt von SIMD-Technologie bei großen, kompakten Eingaberegionen am größten ist. Im Einzelfall kann aber die Ausführung von sobel_ampsobel_ampSobelAmpSobelAmpSobelAmp, abhängig von der Eingaberegion und den Hardwareeigenschaften, mit SIMD-Technologie auch länger dauern als ohne.

sobel_ampsobel_ampSobelAmpSobelAmpSobelAmp kann für die Filtertypen 'sum_abs'"sum_abs""sum_abs""sum_abs""sum_abs", 'sum_sqrt'"sum_sqrt""sum_sqrt""sum_sqrt""sum_sqrt", 'x'"x""x""x""x" und 'y'"y""y""y""y" (sowie deren binomialen Varianten) auf OpenCL Geräten ausgeführt werden. Dabei ist zu beachten, das bei Gauss-Filterung mit SizeSizeSizeSizesize > 3 das Ergebnis von dem der CPU- Implementierung abweichen kann.

Achtung

Beachten Sie, dass Filteroperatoren eventuell unerwartete Resultate ausgeben, wenn ein Bild mit einer reduzierten Domäne als Input übergeben wird. Weitere Informationen können im Kapitel Filter gefunden werden.

Ausführungsinformationen

Parameter

ImageImageImageImageimage (input_object)  (multichannel-)image(-array) objectHImageHImageHobject (byte / int2 / uint2 / real)

Eingabebild.

EdgeAmplitudeEdgeAmplitudeEdgeAmplitudeEdgeAmplitudeedgeAmplitude (output_object)  (multichannel-)image(-array) objectHImageHImageHobject * (int1 / int2 / uint2 / real)

Ausgabebild mit Kantenamplitude.

FilterTypeFilterTypeFilterTypeFilterTypefilterType (input_control)  string HTupleHTupleHtuple (string) (string) (HString) (char*)

Filtertyp.

Defaultwert: 'sum_abs' "sum_abs" "sum_abs" "sum_abs" "sum_abs"

Werteliste: 'sum_abs'"sum_abs""sum_abs""sum_abs""sum_abs", 'sum_abs_binomial'"sum_abs_binomial""sum_abs_binomial""sum_abs_binomial""sum_abs_binomial", 'sum_sqrt'"sum_sqrt""sum_sqrt""sum_sqrt""sum_sqrt", 'sum_sqrt_binomial'"sum_sqrt_binomial""sum_sqrt_binomial""sum_sqrt_binomial""sum_sqrt_binomial", 'thin_max_abs'"thin_max_abs""thin_max_abs""thin_max_abs""thin_max_abs", 'thin_max_abs_binomial'"thin_max_abs_binomial""thin_max_abs_binomial""thin_max_abs_binomial""thin_max_abs_binomial", 'thin_sum_abs'"thin_sum_abs""thin_sum_abs""thin_sum_abs""thin_sum_abs", 'thin_sum_abs_binomial'"thin_sum_abs_binomial""thin_sum_abs_binomial""thin_sum_abs_binomial""thin_sum_abs_binomial", 'x'"x""x""x""x", 'x_binomial'"x_binomial""x_binomial""x_binomial""x_binomial", 'y'"y""y""y""y", 'y_binomial'"y_binomial""y_binomial""y_binomial""y_binomial"

Werteliste (für Compute Devices): 'sum_abs'"sum_abs""sum_abs""sum_abs""sum_abs", 'sum_sqrt'"sum_sqrt""sum_sqrt""sum_sqrt""sum_sqrt", 'x'"x""x""x""x", 'y'"y""y""y""y", 'sum_abs_binomial'"sum_abs_binomial""sum_abs_binomial""sum_abs_binomial""sum_abs_binomial", 'sum_sqrt_binomial'"sum_sqrt_binomial""sum_sqrt_binomial""sum_sqrt_binomial""sum_sqrt_binomial", 'x_binomial'"x_binomial""x_binomial""x_binomial""x_binomial", 'y_binomial'"y_binomial""y_binomial""y_binomial""y_binomial"

SizeSizeSizeSizesize (input_control)  integer(-array) HTupleHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

Filtergröße.

Defaultwert: 3

Werteliste: 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39

Beispiel (HDevelop)

read_image(Image,'fabrik')
sobel_amp(Image,Amp,'sum_abs',3)
threshold(Amp,Edg,128,255)

Beispiel (C)

read_image(&Image,"fabrik");
sobel_amp(Image,&Amp,"sum_abs",3);
threshold(Amp,&Edg,128.0,255.0);

Beispiel (HDevelop)

read_image(Image,'fabrik')
sobel_amp(Image,Amp,'sum_abs',3)
threshold(Amp,Edg,128,255)

Beispiel (HDevelop)

read_image(Image,'fabrik')
sobel_amp(Image,Amp,'sum_abs',3)
threshold(Amp,Edg,128,255)

Beispiel (HDevelop)

read_image(Image,'fabrik')
sobel_amp(Image,Amp,'sum_abs',3)
threshold(Amp,Edg,128,255)

Ergebnis

sobel_ampsobel_ampSobelAmpSobelAmpSobelAmp liefert den Wert 2 (H_MSG_TRUE), falls die Parameter korrekt sind. Das Verhalten bei leerer Eingabe (keine Eingabebilder vorhanden) lässt sich mittels set_system('no_object_result',<Result>)set_system("no_object_result",<Result>)SetSystem("no_object_result",<Result>)SetSystem("no_object_result",<Result>)SetSystem("no_object_result",<Result>) festlegen. Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.

Vorgänger

binomial_filterbinomial_filterBinomialFilterBinomialFilterBinomialFilter, gauss_filtergauss_filterGaussFilterGaussFilterGaussFilter, mean_imagemean_imageMeanImageMeanImageMeanImage, anisotropic_diffusionanisotropic_diffusionAnisotropicDiffusionAnisotropicDiffusionAnisotropicDiffusion, sigma_imagesigma_imageSigmaImageSigmaImageSigmaImage

Nachfolger

thresholdthresholdThresholdThresholdThreshold, nonmax_suppression_ampnonmax_suppression_ampNonmaxSuppressionAmpNonmaxSuppressionAmpNonmaxSuppressionAmp, gray_skeletongray_skeletonGraySkeletonGraySkeletonGraySkeleton

Alternativen

frei_ampfrei_ampFreiAmpFreiAmpFreiAmp, robertsrobertsRobertsRobertsRoberts, kirsch_ampkirsch_ampKirschAmpKirschAmpKirschAmp, prewitt_ampprewitt_ampPrewittAmpPrewittAmpPrewittAmp, robinson_amprobinson_ampRobinsonAmpRobinsonAmpRobinsonAmp

Siehe auch

laplacelaplaceLaplaceLaplaceLaplace, highpass_imagehighpass_imageHighpassImageHighpassImageHighpassImage, bandpass_imagebandpass_imageBandpassImageBandpassImageBandpassImage

Modul

Foundation