add_image
— Addieren zweier Bilder.
add_image(Image1, Image2 : ImageResult : Mult, Add : )
add_image
addiert zwei Bilder. Die Grauwerte
(g1,g2) der Eingabebilder (Image1
und
Image2
) 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.
Das Ergebnisbild wird in ImageResult
abgelegt.
Es ist möglich, byte-Bilder mit int2, uint2 oder int4 Bildern bzw. int4 mit int2 oder uint2 Bildern zu addieren. In diesem Fall werden int2, uint2 oder int4 bzw. int4 Bilder als Ergebnis erzeugt.
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. uint2 und
int4 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.
add_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 add_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.
Image1
(input_object) (multichannel-)image(-array) →
object (byte* / int1* / int2* / uint2* / int4* / int8 / real* / direction* / cyclic* / complex*) *erlaubt für Compute Devices
Bild(er) 1.
Image2
(input_object) (multichannel-)image(-array) →
object (byte* / int1* / int2* / uint2* / int4* / int8 / real* / direction* / cyclic* / complex*) *erlaubt für Compute Devices
Bild(er) 2.
ImageResult
(output_object) (multichannel-)image(-array) →
object (byte / int1 / int2 / uint2 / int4 / int8 / real / direction / cyclic / complex)
Ergebnisbil(der) durch die Bildpunktaddition.
Mult
(input_control) number →
(real / integer)
Faktor zur Grauwertanpassung.
Defaultwert: 0.5
Wertevorschläge: 0.2, 0.4, 0.6, 0.8, 1.0, 1.5, 2.0, 3.0, 5.0
Typischer Wertebereich: -255.0
≤
Mult
≤
255.0
Minimale Schrittweite: 0.001
Empfohlene Schrittweite: 0.1
Add
(input_control) number →
(real / integer)
Wert für Grauwertausgleich.
Defaultwert: 0
Wertevorschläge: 0, 64, 128, 255, 512
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) add_image(Image1,Image2,Result,0.5,10.0) dev_display (Result)
add_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.
Foundation