Name
sobel_ampsobel_ampSobelAmpsobel_ampSobelAmpSobelAmp — Kantendetektion (Amplitude) mit dem Sobel-Operator.
sobel_ampsobel_ampSobelAmpsobel_ampSobelAmpSobelAmp 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'"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_imageGaussImagegauss_imageGaussImageGaussImage)
oder einem Binomialfilter (siehe binomial_filterbinomial_filterBinomialFilterbinomial_filterBinomialFilterBinomialFilter) der
Größe SizeSizeSizeSizeSizesize-2 geglättet. Der Gaußfilter wird durch die
oben angegebenen Werte von FilterTypeFilterTypeFilterTypeFilterTypeFilterTypefilterType 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 FilterTypeFilterTypeFilterTypeFilterTypeFilterTypefilterType 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
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_ampsobel_ampSobelAmpsobel_ampSobelAmpSobelAmp sind für FilterTypeFilterTypeFilterTypeFilterTypeFilterTypefilterType =
'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 'mmx_enable'"mmx_enable""mmx_enable""mmx_enable""mmx_enable""mmx_enable"
(siehe set_systemset_systemSetSystemset_systemSetSystemSetSystem) gesteuert werden. Falls
'mmx_enable'"mmx_enable""mmx_enable""mmx_enable""mmx_enable""mmx_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_ampSobelAmpsobel_ampSobelAmpSobelAmp,
abhängig von der Eingaberegion und den Hardwareeigenschaften, mit
SIMD-Technologie auch länger dauern als ohne.
sobel_ampsobel_ampSobelAmpsobel_ampSobelAmpSobelAmp 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.
- Unterstützt OpenCL Compute Devices.
- Multithreading-Typ: reentrant (läuft parallel zu nicht-exklusiven Operatoren).
- Multithreading-Bereich: global (kann von jedem Thread aufgerufen werden).
- Automatisch parallelisiert auf Tupelebene.
- Automatisch parallelisiert auf Kanalebene.
- Automatisch parallelisiert auf Domainebene.
Ausgabebild mit Kantenamplitude.
Filtertyp.
Defaultwert:
'sum_abs'
"sum_abs"
"sum_abs"
"sum_abs"
"sum_abs"
"sum_abs"
Werteliste: 'sum_abs'"sum_abs""sum_abs""sum_abs""sum_abs""sum_abs", 'sum_abs_binomial'"sum_abs_binomial""sum_abs_binomial""sum_abs_binomial""sum_abs_binomial""sum_abs_binomial", 'sum_sqrt'"sum_sqrt""sum_sqrt""sum_sqrt""sum_sqrt""sum_sqrt", 'sum_sqrt_binomial'"sum_sqrt_binomial""sum_sqrt_binomial""sum_sqrt_binomial""sum_sqrt_binomial""sum_sqrt_binomial", 'thin_max_abs'"thin_max_abs""thin_max_abs""thin_max_abs""thin_max_abs""thin_max_abs", 'thin_max_abs_binomial'"thin_max_abs_binomial""thin_max_abs_binomial""thin_max_abs_binomial""thin_max_abs_binomial""thin_max_abs_binomial", 'thin_sum_abs'"thin_sum_abs""thin_sum_abs""thin_sum_abs""thin_sum_abs""thin_sum_abs", 'thin_sum_abs_binomial'"thin_sum_abs_binomial""thin_sum_abs_binomial""thin_sum_abs_binomial""thin_sum_abs_binomial""thin_sum_abs_binomial", 'x'"x""x""x""x""x", 'x_binomial'"x_binomial""x_binomial""x_binomial""x_binomial""x_binomial", 'y'"y""y""y""y""y", 'y_binomial'"y_binomial""y_binomial""y_binomial""y_binomial""y_binomial"
Werteliste (für Compute Devices): '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", 'y'"y""y""y""y""y", 'sum_abs_binomial'"sum_abs_binomial""sum_abs_binomial""sum_abs_binomial""sum_abs_binomial""sum_abs_binomial", 'sum_sqrt_binomial'"sum_sqrt_binomial""sum_sqrt_binomial""sum_sqrt_binomial""sum_sqrt_binomial""sum_sqrt_binomial", 'x_binomial'"x_binomial""x_binomial""x_binomial""x_binomial""x_binomial", 'y_binomial'"y_binomial""y_binomial""y_binomial""y_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)
read_image(&Image,"fabrik");
sobel_amp(Image,&Amp,"sum_abs",3);
threshold(Amp,&Edg,128.0,255.0);
read_image(Image,'fabrik')
sobel_amp(Image,Amp,'sum_abs',3)
threshold(Amp,Edg,128,255)
read_image(Image,'fabrik')
sobel_amp(Image,Amp,'sum_abs',3)
threshold(Amp,Edg,128,255)
read_image(Image,'fabrik')
sobel_amp(Image,Amp,'sum_abs',3)
threshold(Amp,Edg,128,255)
read_image(Image,'fabrik')
sobel_amp(Image,Amp,'sum_abs',3)
threshold(Amp,Edg,128,255)
sobel_ampsobel_ampSobelAmpsobel_ampSobelAmpSobelAmp 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>)set_system("no_object_result",<Result>)SetSystem("no_object_result",<Result>)set_system("no_object_result",<Result>)SetSystem("no_object_result",<Result>)SetSystem("no_object_result",<Result>) festlegen.
Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.
binomial_filterbinomial_filterBinomialFilterbinomial_filterBinomialFilterBinomialFilter,
gauss_filtergauss_filterGaussFiltergauss_filterGaussFilterGaussFilter,
mean_imagemean_imageMeanImagemean_imageMeanImageMeanImage,
anisotropic_diffusionanisotropic_diffusionAnisotropicDiffusionanisotropic_diffusionAnisotropicDiffusionAnisotropicDiffusion,
sigma_imagesigma_imageSigmaImagesigma_imageSigmaImageSigmaImage
thresholdthresholdThresholdthresholdThresholdThreshold,
nonmax_suppression_ampnonmax_suppression_ampNonmaxSuppressionAmpnonmax_suppression_ampNonmaxSuppressionAmpNonmaxSuppressionAmp,
gray_skeletongray_skeletonGraySkeletongray_skeletonGraySkeletonGraySkeleton
frei_ampfrei_ampFreiAmpfrei_ampFreiAmpFreiAmp,
robertsrobertsRobertsrobertsRobertsRoberts,
kirsch_ampkirsch_ampKirschAmpkirsch_ampKirschAmpKirschAmp,
prewitt_ampprewitt_ampPrewittAmpprewitt_ampPrewittAmpPrewittAmp,
robinson_amprobinson_ampRobinsonAmprobinson_ampRobinsonAmpRobinsonAmp
laplacelaplaceLaplacelaplaceLaplaceLaplace,
highpass_imagehighpass_imageHighpassImagehighpass_imageHighpassImageHighpassImage,
bandpass_imagebandpass_imageBandpassImagebandpass_imageBandpassImageBandpassImage
Foundation