sobel_dir
— Kantendetektion (Amplitude und Richtung) mit dem Sobel-Operator.
sobel_dir(Image : EdgeAmplitude, EdgeDirection : FilterType, Size : )
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
= 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
) oder einem Binomialfilter
(siehe binomial_filter
) der Größe Size
-2
geglättet. Der Gaußfilter wird durch die oben angegebenen Werte
von FilterType
ausgewählt. Hierbei ist Size
= 5,
7, 9, 11 oder 13 zu wählen. Der Binomialfilter wird ausgewählt,
indem '_binomial' an die oben angegebenen Werte von
FilterType
angehängt wird. Hier kann 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
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)
für Size > 3 konzeptuell äquivalent zu
scale_image(I,F,2,0)
gauss_image(F,G,S-2)
sobel_dir(G,Amp,Dir,FilterType,3)
bzw. zu
scale_image(I,F,2,0)
binomial_filter(F,G,S[0]-2,S[1]-2)
sobel_dir(G,Amp,Dir,FilterType,3).
Im Parameter EdgeDirection
wird die Kantenrichtungen
zurückgeliefert. Diese werden in 2-Grad-Schritten kodiert,
d.h. eine Kantenrichtung von x 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 r (zurückgeliefert als
r/2) zwischen 0 und 359 Grad:
In Bildpunkten mit Kantenamplitude 0 wird als Kantenrichtung der
Wert 255 (undefinierte Richtung) zurückgeliefert.
sobel_dir
kann auf OpenCL Geräten ausgeführt werden. Dabei ist zu
beachten, dass bei Gauss-Filterung mit Size
> 3 das Ergebnis von
dem der CPU-Implementierung abweichen kann.
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.
Image
(input_object) (multichannel-)image(-array) →
object (byte / int2 / uint2 / real)
Eingabebild.
EdgeAmplitude
(output_object) (multichannel-)image(-array) →
object (byte / int2 / uint2 / real)
Kantenamplitude.
EdgeDirection
(output_object) (multichannel-)image(-array) →
object (direction)
Kantenrichtung.
FilterType
(input_control) string →
(string)
Filtertyp.
Defaultwert: 'sum_abs'
Werteliste: 'sum_abs' , 'sum_abs_binomial' , 'sum_sqrt' , 'sum_sqrt_binomial'
Werteliste (für Compute Devices): 'sum_abs' , 'sum_sqrt' , 'sum_abs_binomial' , 'sum_sqrt_binomial'
Size
(input_control) integer(-array) →
(integer)
Filtergröße.
Defaultwert: 3
Werteliste: 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39
read_image(Image,'fabrik') sobel_dir(Image,Amp,Dir,'sum_abs',3) threshold(Amp,Edg,128,255)
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>)
festlegen.
Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.
binomial_filter
,
gauss_filter
,
mean_image
,
anisotropic_diffusion
,
sigma_image
nonmax_suppression_dir
,
hysteresis_threshold
,
threshold
edges_image
,
frei_dir
,
kirsch_dir
,
prewitt_dir
,
robinson_dir
roberts
,
laplace
,
highpass_image
,
bandpass_image
Foundation