KlassenKlassenKlassenKlassen | | | | Operatoren

sobel_ampsobel_ampSobelAmpsobel_ampSobelAmpSobelAmp (Operator)

Name

sobel_ampsobel_ampSobelAmpsobel_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)

Herror sobel_amp(Hobject Image, Hobject* EdgeAmplitude, const HTuple& FilterType, const HTuple& Size)

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

HImageArray HImageArray::SobelAmp(const HTuple& FilterType, const HTuple& Size) const

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

void HOperatorSetX.SobelAmp(
[in] IHUntypedObjectX* Image, [out] IHUntypedObjectX*EdgeAmplitude, [in] VARIANT FilterType, [in] VARIANT Size)

IHImageX* HImageX.SobelAmp(
[in] BSTR FilterType, [in] VARIANT Size)

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_ampSobelAmpsobel_ampSobelAmpSobelAmp 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""thin_sum_abs" und 'thin_max_abs'"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""x" bzw. 'y'"y""y""y""y""y" als Ergebnis ein int1-Bild bzw. int2-Bild zurückgeliefert. Für eine 3x3 Sobel-Filterung (SizeSizeSizeSizeSizesize = 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_imageGaussImagegauss_imageGaussImageGaussImage) oder einem Binomialfilter (siehe binomial_filterbinomial_filterBinomialFilterbinomial_filterBinomialFilterBinomialFilter) der Größe SizeSizeSizeSizeSizesize-2 geglättet. Der Gaußfilter wird durch die oben angegebenen Werte von FilterTypeFilterTypeFilterTypeFilterTypeFilterTypefilterType ausgewählt. Hierbei ist SizeSizeSizeSizeSizesize = 5, 7, 9, 11 oder 13 zu wählen. Der Binomialfilter wird ausgewählt, indem '_binomial'"_binomial""_binomial""_binomial""_binomial""_binomial" an die oben angegebenen Werte von FilterTypeFilterTypeFilterTypeFilterTypeFilterTypefilterType angehängt wird. Hier kann SizeSizeSizeSizeSizesize 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 SizeSizeSizeSizeSizesize 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_ampSobelAmpsobel_ampSobelAmpSobelAmp sind für FilterTypeFilterTypeFilterTypeFilterTypeFilterTypefilterType = 'sum_abs'"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 'mmx_enable'"mmx_enable""mmx_enable""mmx_enable""mmx_enable""mmx_enable" (siehe set_systemset_systemSetSystemset_systemSetSystemSetSystem) gesteuert werden. Falls 'mmx_enable'"mmx_enable""mmx_enable""mmx_enable""mmx_enable""mmx_enable" auf 'true'"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_ampSobelAmpsobel_ampSobelAmpSobelAmp, abhängig von der Eingaberegion und den Hardwareeigenschaften, mit SIMD-Technologie auch länger dauern als ohne.

sobel_ampsobel_ampSobelAmpsobel_ampSobelAmpSobelAmp kann für die Filtertypen 'sum_abs'"sum_abs""sum_abs""sum_abs""sum_abs""sum_abs", 'sum_sqrt'"sum_sqrt""sum_sqrt""sum_sqrt""sum_sqrt""sum_sqrt", 'x'"x""x""x""x""x" und 'y'"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 SizeSizeSizeSizeSizesize > 3 das Ergebnis von dem der CPU- Implementierung abweichen kann.

Parallelisierung

Parameter

ImageImageImageImageImageimage (input_object)  (multichannel-)image(-array) objectHImageHImageHImageHImageXHobject (byte / int2 / uint2 / real)

Eingabebild.

EdgeAmplitudeEdgeAmplitudeEdgeAmplitudeEdgeAmplitudeEdgeAmplitudeedgeAmplitude (output_object)  (multichannel-)image(-array) objectHImageHImageHImageHImageXHobject * (int1 / int2 / uint2 / real)

Ausgabebild mit Kantenamplitude.

FilterTypeFilterTypeFilterTypeFilterTypeFilterTypefilterType (input_control)  string HTupleHTupleHTupleVARIANTHtuple (string) (string) (HString) (char*) (BSTR) (char*)

Filtertyp.

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

Werteliste: 'sum_abs'"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_abs_binomial", 'sum_sqrt'"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""sum_sqrt_binomial", 'thin_max_abs'"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_max_abs_binomial", 'thin_sum_abs'"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""thin_sum_abs_binomial", 'x'"x""x""x""x""x", 'x_binomial'"x_binomial""x_binomial""x_binomial""x_binomial""x_binomial", 'y'"y""y""y""y""y", 'y_binomial'"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_abs", 'sum_sqrt'"sum_sqrt""sum_sqrt""sum_sqrt""sum_sqrt""sum_sqrt", 'x'"x""x""x""x""x", 'y'"y""y""y""y""y", 'sum_abs_binomial'"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""sum_sqrt_binomial", 'x_binomial'"x_binomial""x_binomial""x_binomial""x_binomial""x_binomial", 'y_binomial'"y_binomial""y_binomial""y_binomial""y_binomial""y_binomial"

SizeSizeSizeSizeSizesize (input_control)  integer(-array) HTupleHTupleHTupleVARIANTHtuple (integer) (int / long) (Hlong) (Hlong) (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)

Beispiel (HDevelop)

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

Ergebnis

sobel_ampsobel_ampSobelAmpsobel_ampSobelAmpSobelAmp 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>)set_system("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_filterBinomialFilterbinomial_filterBinomialFilterBinomialFilter, gauss_filtergauss_filterGaussFiltergauss_filterGaussFilterGaussFilter, mean_imagemean_imageMeanImagemean_imageMeanImageMeanImage, anisotropic_diffusionanisotropic_diffusionAnisotropicDiffusionanisotropic_diffusionAnisotropicDiffusionAnisotropicDiffusion, sigma_imagesigma_imageSigmaImagesigma_imageSigmaImageSigmaImage

Nachfolger

thresholdthresholdThresholdthresholdThresholdThreshold, nonmax_suppression_ampnonmax_suppression_ampNonmaxSuppressionAmpnonmax_suppression_ampNonmaxSuppressionAmpNonmaxSuppressionAmp, gray_skeletongray_skeletonGraySkeletongray_skeletonGraySkeletonGraySkeleton

Alternativen

frei_ampfrei_ampFreiAmpfrei_ampFreiAmpFreiAmp, robertsrobertsRobertsrobertsRobertsRoberts, kirsch_ampkirsch_ampKirschAmpkirsch_ampKirschAmpKirschAmp, prewitt_ampprewitt_ampPrewittAmpprewitt_ampPrewittAmpPrewittAmp, robinson_amprobinson_ampRobinsonAmprobinson_ampRobinsonAmpRobinsonAmp

Siehe auch

laplacelaplaceLaplacelaplaceLaplaceLaplace, highpass_imagehighpass_imageHighpassImagehighpass_imageHighpassImageHighpassImage, bandpass_imagebandpass_imageBandpassImagebandpass_imageBandpassImageBandpassImage

Modul

Foundation


KlassenKlassenKlassenKlassen | | | | Operatoren