sub_image
— Subtrahieren zweier Bilder.
sub_image(ImageMinuend, ImageSubtrahend : ImageSub : Mult, Add : )
sub_image
subtrahiert zwei Bilder. Die Grauwerte
(g1,g2) der Eingabebilder (ImageMinuend
und
ImageSubtrahend
) werden dabei wie folgt transformiert:
g' := (g1 - g2) * Mult + Add
Tritt ein Überlauf oder ein Unterlauf ein, so werden die Werte
beschnitten. Dies gilt nicht im Fall von cyclic- und direction-Bildern.
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 der
Steuerparameter abhängt. Für häufig verwendete Parameterkombinationen
sind spezielle Optimierungen implementiert. Für byte, int2 und uint2 Bilder
sind außerdem 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.
sub_image
kann für byte-, int1-, int2-, uint2-, int4-, real-,
direction-, cyclic-, und complex-Bilder 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 sub_image
, abhängig von der Eingaberegion
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.
ImageMinuend
(input_object) (multichannel-)image(-array) →
object (byte* / int1* / int2* / uint2* / int4* / int8 / real* / direction* / cyclic* / complex*) *erlaubt für Compute Devices
Minuend(en).
ImageSubtrahend
(input_object) (multichannel-)image(-array) →
object (byte* / int1* / int2* / uint2* / int4* / int8 / real* / direction* / cyclic* / complex*) *erlaubt für Compute Devices
Subtrahend(en).
ImageSub
(output_object) (multichannel-)image(-array) →
object (byte / int1 / int2 / uint2 / int4 / int8 / real / direction / cyclic / complex)
Ergebnisbild(er) durch die Substraktion.
Mult
(input_control) number →
(real / integer)
Korrekturfaktor.
Defaultwert: 1.0
Wertevorschläge: 0.0, 1.0, 2.0, 3.0, 4.0
Typischer Wertebereich: -255.0
≤
Mult
≤
255.0
Minimale Schrittweite: 0.001
Empfohlene Schrittweite: 0.1
Add
(input_control) number →
(real / integer)
Korrekturwert.
Defaultwert: 128.0
Wertevorschläge: 0.0, 128.0, 256.0
Typischer Wertebereich: -512.0
≤
Add
≤
512.0
Minimale Schrittweite: 0.01
Empfohlene Schrittweite: 1.0
read_image(Image1,'fabrik') dev_display (Image1) read_image(Image2,'monkey') dev_display (Image2) sub_image (Image1, Image2, Result, 1, 100) dev_display (Result)
sub_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
,
mult_image
,
dyn_threshold
,
check_difference
Foundation