mean_image
— Glättung durch Mittelwertbildung.
mean_image(Image : ImageMean : MaskWidth, MaskHeight : )
mean_image
führt eine lineare Glättung mit den Grauwerten
aller Eingabebilder (Image
) durch. Die Filtermatrix
besteht aus Einsen (gleich gewichtet) und hat die Größe
MaskHeight x MaskWidth. Das Ergebnis der Konvolution wird durch
MaskHeight x MaskWidth dividiert. Als Randbehandlung werden die
Grauwerte an den Bildrändern gespiegelt.
Für mean_image
sind 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 mean_image
, abhängig von der Eingaberegion
und den Hardwareeigenschaften, mit SIMD Technologie auch länger dauern als
ohne.
In jedem Falle wirkt es sich günstig auf das Laufzeitverhalten von
mean_image
aus, wenn man die Eingaberegion von Image
so
wählt, dass es zu keiner Randbehandlung kommt.
Das Konzept der Glättungsfilter ist in der Einleitung zum Kapitel Filter / Glättung beschrieben.
Werden für MaskHeight
oder MaskWidth
gerade
statt ungerade Werte übergeben, verwendet die Routine an ihrer
Stelle die nächstgrößeren ungeraden Werte (damit ist der
Schwerpunkt der Filtermaske immer eindeutig bestimmt).
mean_image
kann für byte-, int2-, uint2-, int4- und real-Bilder auf
OpenCL Geräten ausgeführt werden, wenn MaskHeight
kleiner als
zweimal
die Höhe von Image
ist. Der OpenCL Code berechnet die Filterantwort
intern mit 32 bit Integerarithmetik (für real-Bilder wird einfach genaue
Fließkommaarithmetik verwendet). Dies kann zu Überläufen (und damit zu
fehlerhaften Ergebnissen) führen, wenn der gesamte Wertebereich von int4-
oder real-Bildern verwendet wird. Da zur Verbesserung der Laufzeit für eine
MaskWidth
größer 9 ein vollständiger Scan jeder Zeile von
Image
berechnet wird, kann es in diesem Fall auch bei byte-, int2-
oder uint2-Bildern zu Überläufen kommen, wenn Image
sehr breit ist.
In solchen Fällen muss die CPU-Version von mean_image
verwendet
werden.
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* / int4* / int8 / real* / vector_field) *erlaubt für Compute Devices
Zu glättendes Bild.
ImageMean
(output_object) (multichannel-)image(-array) →
object (byte / int2 / uint2 / int4 / int8 / real / vector_field)
Geglättetes Bild.
MaskWidth
(input_control) extent.x →
(integer)
Breite der Filtermaske.
Defaultwert: 9
Wertevorschläge: 3, 5, 7, 9, 11, 15, 23, 31, 43, 61, 101
Typischer Wertebereich: 1
≤
MaskWidth
≤
501
Minimale Schrittweite: 2
Empfohlene Schrittweite: 2
Restriktion: odd(MaskWidth)
MaskHeight
(input_control) extent.y →
(integer)
Höhe der Filtermaske.
Defaultwert: 9
Wertevorschläge: 3, 5, 7, 9, 11, 15, 23, 31, 43, 61, 101
Typischer Wertebereich: 1
≤
MaskHeight
≤
501
Minimale Schrittweite: 2
Empfohlene Schrittweite: 2
Restriktion: odd(MaskHeight)
read_image(Image,'fabrik') mean_image(Image,Mean,3,3) dev_display(Mean)
Pro Bildpunkt: O(15).
Sind die Parameterwerte korrekt, dann liefert mean_image
den
Wert 2 (H_MSG_TRUE). 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.
reduce_domain
,
rectangle1_domain
binomial_filter
,
gauss_filter
,
smooth_image
anisotropic_diffusion
,
sigma_image
,
convol_image
,
gen_lowpass
Foundation