sobel_amp
— Kantendetektion (Amplitude) mit dem Sobel-Operator.
sobel_amp(Image : EdgeAmplitude : FilterType, Size : )
sobel_amp
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' und
'thin_max_abs' eine Verdünnung des Gradientenbildes
erreicht. Bei Byte-Bildern bzw. uint2/int2-Bildern wird bei dem
Modus 'x' bzw. 'y' als Ergebnis ein int1-Bild
bzw. int2-Bild zurückgeliefert. 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_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_amp
sind für FilterType
=
'sum_abs' spezielle Optimierungen unter Verwendung von
SIMD-Technologie implementiert. Ob diese tatsächlich zur Anwendung
kommen, kann über den Systemparameter 'sse2_enable' beziehungsweise
'avx2_enable' (siehe set_system
) gesteuert werden. Falls
'sse2_enable' oder 'avx2_enable' auf '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_amp
,
abhängig von der Eingaberegion und den Hardwareeigenschaften, mit
SIMD-Technologie auch länger dauern als ohne.
sobel_amp
kann für die Filtertypen 'sum_abs' ,
'sum_sqrt' , 'x' und 'y' (sowie deren binomialen
Varianten) auf OpenCL Geräten ausgeführt werden. Dabei ist zu beachten, das
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 (int1 / int2 / uint2 / real)
Ausgabebild mit Kantenamplitude.
FilterType
(input_control) string →
(string)
Filtertyp.
Defaultwert: 'sum_abs'
Werteliste: 'sum_abs' , 'sum_abs_binomial' , 'sum_sqrt' , 'sum_sqrt_binomial' , 'thin_max_abs' , 'thin_max_abs_binomial' , 'thin_sum_abs' , 'thin_sum_abs_binomial' , 'x' , 'x_binomial' , 'y' , 'y_binomial'
Werteliste (für Compute Devices): 'sum_abs' , 'sum_sqrt' , 'x' , 'y' , 'sum_abs_binomial' , 'sum_sqrt_binomial' , 'x_binomial' , 'y_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_amp(Image,Amp,'sum_abs',3) threshold(Amp,Edg,128,255)
sobel_amp
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
threshold
,
nonmax_suppression_amp
,
gray_skeleton
frei_amp
,
roberts
,
kirsch_amp
,
prewitt_amp
,
robinson_amp
laplace
,
highpass_image
,
bandpass_image
Foundation