| Operatoren |
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):
'sum_sqrt' sqrt(a^2 + b^2) / 4
'sum_abs' (|a| + |b|) / 4
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 [Ex,Ey] den Bildgradienten, ergeben sich folgende Kantenrichtungen r (zurückgeliefert als r/2) zwischen 0 und 359 Grad:
Helligkeitszunahme Ex / Ey Kantenrichtung r von unten nach oben 0 / + 0 Grad 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 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.
Eingabebild.
Kantenamplitude.
Kantenrichtung.
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'
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_image, 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
| Operatoren |