abs_diff_image
— Berechnen der absoluten Differenz von zwei Bildern.
abs_diff_image(Image1, Image2 : ImageAbsDiff : Mult : )
abs_diff_image
bildet die absolute Differenz zweier Bilder.
Die Grauwerte g' des Ausgabebildes ImageAbsDiff
werden
aus den Grauwerten (g1,g2) der Eingabebilder Image1
und
Image2
werden dabei wie folgt berechnet:
g' = |(g1 - g2)| * Mult
Tritt ein Überlauf oder ein Unterlauf ein, so werden die Werte
beschnitten.
Es können mehrere Bilder pro Aufruf bearbeitet werden. In diesem Fall enthalten beide Eingabeparameter gleich viele Bilder, die dann paarweise abgearbeitet werden. Zu jedem Paar wird ein Ausgabebild erzeugt.
Es ist zu beachten, dass die Laufzeit des Operators von der Wahl von
Mult
abhängt. Für Mult
= 1 ist eine spezielle
Optimierung implementiert. Da andere Werte von Mult
keine
zusätzliche Information liefern können, sollte in der Anwendung
Mult
= 1 verwendet werden. Andere Werte von
Mult
sollten lediglich für Visualisierungszwecke verwendet
werden. Für byte-, int1-, int2- und uint2-Bilder sind außerdem für
Mult
= 1 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.
abs_diff_image
kann für byte-, int1-, int2-, uint2-, int4-,
und real-Bildern auf OpenCL Geräten ausgeführt werden. Da OpenCL 1.0 aber
nur einfache genaue Fließkommaunterstützung voraussetzt und nicht alle
Rundungsarten unterstützt werden, kann das Ergebnis der
OpenCL-Implementierung geringfügig von dem der skalaren oder der
SIMD-Implementierung abweichen.
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
abs_diff_image
, abhängig von den Eingaberegionen und den
Hardwareeigenschaften, mit SIMD Technologie länger dauern als ohne.
In diesem Falle lässt sich die Verwendung von SIMD-Technologie durch
set_system(::'mmx_enable','false':)
verhindern.
Image1
(input_object) (multichannel-)image(-array) →
object (byte* / int1* / int2* / uint2* / int4* / int8 / real*) *erlaubt für Compute Devices
Einbabebild 1.
Image2
(input_object) (multichannel-)image(-array) →
object (byte* / int1* / int2* / uint2* / int4* / int8 / real*) *erlaubt für Compute Devices
Eingabebild 2.
ImageAbsDiff
(output_object) (multichannel-)image(-array) →
object (byte / int1 / int2 / uint2 / int4 / int8 / real)
Betrag der Differenz der Eingabebilder.
Mult
(input_control) number →
(real / integer)
Skalierungsfaktor.
Defaultwert: 1.0
Wertevorschläge: 1.0, 2.0, 3.0, 4.0
Restriktion: Mult > 0
abs_diff_image
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.
add_image
,
scale_image
,
dyn_threshold
Foundation