sobel_dir sobel_dir SobelDir SobelDir sobel_dir (Operator)
Name
sobel_dir sobel_dir SobelDir SobelDir sobel_dir — Kantendetektion (Amplitude und Richtung) mit dem Sobel-Operator.
Signatur
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)
def sobel_dir (image : HObject, filter_type : str, size : MaybeSequence[int]) -> Tuple[HObject, HObject]
Beschreibung
sobel_dir sobel_dir SobelDir SobelDir SobelDir sobel_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 (Size Size Size Size size size = 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_image gauss_image GaussImage GaussImage GaussImage gauss_image ) oder einem Binomialfilter
(siehe binomial_filter binomial_filter BinomialFilter BinomialFilter BinomialFilter binomial_filter ) der Größe Size Size Size Size size size -2
geglättet. Der Gaußfilter wird durch die oben angegebenen Werte
von FilterType FilterType FilterType FilterType filterType filter_type ausgewählt. Hierbei ist Size Size Size Size size size = 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
FilterType FilterType FilterType FilterType filterType filter_type angehängt wird. Hier kann Size Size Size Size size size
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 Size Size Size Size size size 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 Size Size Size Size size size > 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 EdgeDirection EdgeDirection EdgeDirection EdgeDirection edgeDirection edge_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_dir sobel_dir SobelDir SobelDir SobelDir sobel_dir kann auf OpenCL-Geräten ausgeführt werden. Dabei ist zu
beachten, dass bei Gauss-Filterung mit Size Size Size Size size size > 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
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 Domainebene.
Parameter
Image Image Image Image image image (input_object) (multichannel-)image(-array) → object HImage HObject HImage Hobject (byte / int2 / uint2 / real)
Eingabebild.
EdgeAmplitude EdgeAmplitude EdgeAmplitude EdgeAmplitude edgeAmplitude edge_amplitude (output_object) (multichannel-)image(-array) → object HImage HObject HImage Hobject * (byte / int2 / uint2 / real)
Kantenamplitude.
EdgeDirection EdgeDirection EdgeDirection EdgeDirection edgeDirection edge_direction (output_object) (multichannel-)image(-array) → object HImage HObject HImage Hobject * (direction)
Kantenrichtung.
FilterType FilterType FilterType FilterType filterType filter_type (input_control) string → HTuple str HTuple Htuple (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"
Size Size Size Size size size (input_control) integer(-array) → HTuple MaybeSequence[int] HTuple Htuple (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_dir sobel_dir SobelDir SobelDir SobelDir sobel_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_filter binomial_filter BinomialFilter BinomialFilter BinomialFilter binomial_filter ,
gauss_filter gauss_filter GaussFilter GaussFilter GaussFilter gauss_filter ,
mean_image mean_image MeanImage MeanImage MeanImage mean_image ,
anisotropic_diffusion anisotropic_diffusion AnisotropicDiffusion AnisotropicDiffusion AnisotropicDiffusion anisotropic_diffusion ,
sigma_image sigma_image SigmaImage SigmaImage SigmaImage sigma_image
Nachfolger
nonmax_suppression_dir nonmax_suppression_dir NonmaxSuppressionDir NonmaxSuppressionDir NonmaxSuppressionDir nonmax_suppression_dir ,
hysteresis_threshold hysteresis_threshold HysteresisThreshold HysteresisThreshold HysteresisThreshold hysteresis_threshold ,
threshold threshold Threshold Threshold Threshold threshold
Alternativen
edges_image edges_image EdgesImage EdgesImage EdgesImage edges_image ,
frei_dir frei_dir FreiDir FreiDir FreiDir frei_dir ,
kirsch_dir kirsch_dir KirschDir KirschDir KirschDir kirsch_dir ,
prewitt_dir prewitt_dir PrewittDir PrewittDir PrewittDir prewitt_dir ,
robinson_dir robinson_dir RobinsonDir RobinsonDir RobinsonDir robinson_dir
Siehe auch
roberts roberts Roberts Roberts Roberts roberts ,
laplace laplace Laplace Laplace Laplace laplace ,
highpass_image highpass_image HighpassImage HighpassImage HighpassImage highpass_image ,
bandpass_image bandpass_image BandpassImage BandpassImage BandpassImage bandpass_image
Modul
Foundation