| Operatoren |
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):
'sum_sqrt' sqrt(a^2 + b^2) / 4
'sum_abs' (|a| + |b|) / 4
'thin_sum_abs' (thin(|a|) + thin(|b|)) / 4
'thin_max_abs' max(thin(|a|),thin(|b|)) / 4
'x' b / 4
'y' a / 4
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 'mmx_enable' (siehe set_system) gesteuert werden. Falls 'mmx_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.
Eingabebild.
Ausgabebild mit Kantenamplitude.
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'
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_image, 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
| Operatoren |