sobel_ampsobel_ampSobelAmpSobelAmpSobelAmpsobel_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 und 0
sonst. Damit wird bei 'thin_sum_abs'"thin_sum_abs""thin_sum_abs""thin_sum_abs""thin_sum_abs""thin_sum_abs" und
'thin_max_abs'"thin_max_abs""thin_max_abs""thin_max_abs""thin_max_abs""thin_max_abs" eine Verdünnung des Gradientenbildes
erreicht. Bei Byte-Bildern bzw. uint2/int2-Bildern wird bei dem
Modus 'x'"x""x""x""x""x" bzw. 'y'"y""y""y""y""y" als Ergebnis ein int1-Bild
bzw. int2-Bild zurückgeliefert. Für eine 3x3
Sobel-Filterung (SizeSizeSizeSizesizesize = 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_imagegauss_imageGaussImageGaussImageGaussImagegauss_image)
oder einem Binomialfilter (siehe binomial_filterbinomial_filterBinomialFilterBinomialFilterBinomialFilterbinomial_filter) der
Größe SizeSizeSizeSizesizesize-2 geglättet. Der Gaußfilter wird durch die
oben angegebenen Werte von FilterTypeFilterTypeFilterTypeFilterTypefilterTypefilter_type ausgewählt. Hierbei
ist SizeSizeSizeSizesizesize = 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 FilterTypeFilterTypeFilterTypeFilterTypefilterTypefilter_type angehängt wird.
Hier kann SizeSizeSizeSizesizesize 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
SizeSizeSizeSizesizesize 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
Für sobel_ampsobel_ampSobelAmpSobelAmpSobelAmpsobel_amp sind für FilterTypeFilterTypeFilterTypeFilterTypefilterTypefilter_type =
'sum_abs'"sum_abs""sum_abs""sum_abs""sum_abs""sum_abs" spezielle Optimierungen unter Verwendung von
SIMD-Technologie implementiert. Ob diese tatsächlich zur Anwendung
kommen, kann über den Systemparameter 'sse2_enable'"sse2_enable""sse2_enable""sse2_enable""sse2_enable""sse2_enable" beziehungsweise
'avx2_enable'"avx2_enable""avx2_enable""avx2_enable""avx2_enable""avx2_enable" (siehe set_systemset_systemSetSystemSetSystemSetSystemset_system) gesteuert werden. Falls
'sse2_enable'"sse2_enable""sse2_enable""sse2_enable""sse2_enable""sse2_enable" oder 'avx2_enable'"avx2_enable""avx2_enable""avx2_enable""avx2_enable""avx2_enable" auf 'true'"true""true""true""true""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_ampsobel_ampSobelAmpSobelAmpSobelAmpsobel_amp,
abhängig von der Eingaberegion und den Hardwareeigenschaften, mit
SIMD-Technologie auch länger dauern als ohne.
sobel_ampsobel_ampSobelAmpSobelAmpSobelAmpsobel_amp kann für die Filtertypen 'sum_abs'"sum_abs""sum_abs""sum_abs""sum_abs""sum_abs",
'sum_sqrt'"sum_sqrt""sum_sqrt""sum_sqrt""sum_sqrt""sum_sqrt", 'x'"x""x""x""x""x" und 'y'"y""y""y""y""y" (sowie deren binomialen
Varianten) auf OpenCL-Geräten ausgeführt werden. Dabei ist zu beachten, das
bei Gauss-Filterung mit SizeSizeSizeSizesizesize > 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).