sobel_dirsobel_dirSobelDirSobelDirsobel_dir (Operator)

Name

sobel_dirsobel_dirSobelDirSobelDirsobel_dir — Kantendetektion (Amplitude und Richtung) mit dem Sobel-Operator.

Signatur

sobel_dir(Image : EdgeAmplitude, EdgeDirection : FilterType, Size : )

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

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

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

HImage HImage::SobelDir(HImage* EdgeDirection, const HString& FilterType, const HTuple& Size) const

HImage HImage::SobelDir(HImage* EdgeDirection, const HString& FilterType, Hlong Size) const

HImage HImage::SobelDir(HImage* EdgeDirection, const char* FilterType, Hlong Size) const

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

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

HImage HImage.SobelDir(out HImage edgeDirection, string filterType, HTuple size)

HImage HImage.SobelDir(out HImage edgeDirection, string filterType, int size)

def sobel_dir(image: HObject, filter_type: str, size: MaybeSequence[int]) -> Tuple[HObject, HObject]

Beschreibung

sobel_dirsobel_dirSobelDirSobelDirSobelDirsobel_dir 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):

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_imageGaussImageGaussImageGaussImagegauss_image) oder einem Binomialfilter (siehe binomial_filterbinomial_filterBinomialFilterBinomialFilterBinomialFilterbinomial_filter) der Größe SizeSizeSizeSizesizesize-2 geglättet. Der Gaußfilter wird durch die oben angegebenen Werte von FilterTypeFilterTypeFilterTypeFilterTypefilterTypefilter_type 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 FilterTypeFilterTypeFilterTypeFilterTypefilterTypefilter_type 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_dir(I,Amp,Dir,FilterType,S)sobel_dir(I,Amp,Dir,FilterType,S)SobelDir(I,Amp,Dir,FilterType,S)SobelDir(I,Amp,Dir,FilterType,S)SobelDir(I,Amp,Dir,FilterType,S)sobel_dir(I,Amp,Dir,FilterType,S)
für SizeSizeSizeSizesizesize > 3 konzeptuell äquivalent zu
scale_image(I,F,2,0)scale_image(I,F,2,0)ScaleImage(I,F,2,0)ScaleImage(I,F,2,0)ScaleImage(I,F,2,0)scale_image(I,F,2,0)
gauss_image(F,G,S-2)gauss_image(F,G,S-2)GaussImage(F,G,S-2)GaussImage(F,G,S-2)GaussImage(F,G,S-2)gauss_image(F,G,S-2)
sobel_dir(G,Amp,Dir,FilterType,3)sobel_dir(G,Amp,Dir,FilterType,3)SobelDir(G,Amp,Dir,FilterType,3)SobelDir(G,Amp,Dir,FilterType,3)SobelDir(G,Amp,Dir,FilterType,3)sobel_dir(G,Amp,Dir,FilterType,3)
bzw. zu
scale_image(I,F,2,0)scale_image(I,F,2,0)ScaleImage(I,F,2,0)ScaleImage(I,F,2,0)ScaleImage(I,F,2,0)scale_image(I,F,2,0)
binomial_filter(F,G,S[0]-2,S[1]-2)binomial_filter(F,G,S[0]-2,S[1]-2)BinomialFilter(F,G,S[0]-2,S[1]-2)BinomialFilter(F,G,S[0]-2,S[1]-2)BinomialFilter(F,G,S[0]-2,S[1]-2)binomial_filter(F,G,S[0]-2,S[1]-2)
sobel_dir(G,Amp,Dir,FilterType,3)sobel_dir(G,Amp,Dir,FilterType,3)SobelDir(G,Amp,Dir,FilterType,3)SobelDir(G,Amp,Dir,FilterType,3)SobelDir(G,Amp,Dir,FilterType,3)sobel_dir(G,Amp,Dir,FilterType,3).
Im Parameter EdgeDirectionEdgeDirectionEdgeDirectionEdgeDirectionedgeDirectionedge_direction wird die Kantenrichtungen zurückgeliefert. Diese werden in 2-Grad-Schritten kodiert, d.h. eine Kantenrichtung von Grad (im mathematisch positiven Sinn und bezogen auf die Horizontale) wird zu x / 2 im entsprechenden Ergebnisbild. Außerdem wird auch die Richtung der Helligkeitsänderung berücksichtigt. Bezeichnet den Bildgradienten, ergeben sich folgende Kantenrichtungen (zurückgeliefert als ) zwischen 0 und 359 Grad:
Helligkeitszunahme Kantenrichtung [Grad]
von unten nach oben 0 / + 0
von rechts unten nach links oben - / + ]0,90[
von rechts nach links - / 0 90
von rechts oben nach links unten - / - ]90,180[
von oben nach unten 0 / - 180
von links oben nach rechts unten + / - ]180,270[
von links nach rechts + / 0 270
von links unten nach rechts oben + / + ]270,360[.

In Bildpunkten mit Kantenamplitude 0 wird als Kantenrichtung der Wert 255 (undefinierte Richtung) zurückgeliefert.

sobel_dirsobel_dirSobelDirSobelDirSobelDirsobel_dir kann auf OpenCL-Geräten ausgeführt werden. Dabei ist zu beachten, dass bei Gauss-Filterung mit SizeSizeSizeSizesizesize > 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

ImageImageImageImageimageimage (input_object)  (multichannel-)image(-array) objectHImageHObjectHImageHobject (byte / int2 / uint2 / real)

Eingabebild.

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

Kantenamplitude.

EdgeDirectionEdgeDirectionEdgeDirectionEdgeDirectionedgeDirectionedge_direction (output_object)  (multichannel-)image(-array) objectHImageHObjectHImageHobject * (direction)

Kantenrichtung.

FilterTypeFilterTypeFilterTypeFilterTypefilterTypefilter_type (input_control)  string HTuplestrHTupleHtuple (string) (string) (HString) (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"

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", '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"

SizeSizeSizeSizesizesize (input_control)  integer(-array) HTupleMaybeSequence[int]HTupleHtuple (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_dir(Image,Amp,Dir,'sum_abs',3)
threshold(Amp,Edg,128,255)

Beispiel (C)

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

Beispiel (HDevelop)

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

Beispiel (HDevelop)

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

Beispiel (HDevelop)

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

Ergebnis

sobel_dirsobel_dirSobelDirSobelDirSobelDirsobel_dir 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>)set_system("no_object_result",<Result>) festlegen. Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.

Vorgänger

binomial_filterbinomial_filterBinomialFilterBinomialFilterBinomialFilterbinomial_filter, gauss_filtergauss_filterGaussFilterGaussFilterGaussFiltergauss_filter, mean_imagemean_imageMeanImageMeanImageMeanImagemean_image, anisotropic_diffusionanisotropic_diffusionAnisotropicDiffusionAnisotropicDiffusionAnisotropicDiffusionanisotropic_diffusion, sigma_imagesigma_imageSigmaImageSigmaImageSigmaImagesigma_image

Nachfolger

nonmax_suppression_dirnonmax_suppression_dirNonmaxSuppressionDirNonmaxSuppressionDirNonmaxSuppressionDirnonmax_suppression_dir, hysteresis_thresholdhysteresis_thresholdHysteresisThresholdHysteresisThresholdHysteresisThresholdhysteresis_threshold, thresholdthresholdThresholdThresholdThresholdthreshold

Alternativen

edges_imageedges_imageEdgesImageEdgesImageEdgesImageedges_image, frei_dirfrei_dirFreiDirFreiDirFreiDirfrei_dir, kirsch_dirkirsch_dirKirschDirKirschDirKirschDirkirsch_dir, prewitt_dirprewitt_dirPrewittDirPrewittDirPrewittDirprewitt_dir, robinson_dirrobinson_dirRobinsonDirRobinsonDirRobinsonDirrobinson_dir

Siehe auch

robertsrobertsRobertsRobertsRobertsroberts, laplacelaplaceLaplaceLaplaceLaplacelaplace, highpass_imagehighpass_imageHighpassImageHighpassImageHighpassImagehighpass_image, bandpass_imagebandpass_imageBandpassImageBandpassImageBandpassImagebandpass_image

Modul

Foundation