scale_image
— Skalieren von Grauwerten.
scale_image(Image : ImageScaled : Mult, Add : )
scale_image
skaliert die Eingabebilder (Image
)
mittels folgender Transformation:
g' := g * Mult + Add
Tritt ein Überlauf oder ein Unterlauf ein, so werden die Werte
beschnitten. Dies gilt nicht im Fall von cyclic- und direction-Bildern.
Dieser Operator kann z.B. dafür verwendet werden, die Grauwerte eines
Bildes, also das Intervall [GMin,GMax], auf das volle Intervall [0:255]
abbzubilden, indem man die Parameter wie folgt wählt:
Min und GMax können z.B. mit dem Operator min_max_gray
bestimmt
werden.
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. Weiterhin sind für int2 und
uint2 Bilder spezielle Optimierungen mit Festkommaarithmetik und für
byte, int2 und uint2 Bilder spezielle Optimierungen unter Verwendung von
SIMD Technologie implementiert.
Ob diese tatsächlich zur Anwendung kommen, kann über die Systemparameter
'int_zooming' und 'mmx_enable'
(siehe set_system
) gesteuert werden.
Falls 'int_zooming' auf 'true' gesetzt wird, wird
die intern Berechnung mit
Festkommaarithmetik durchgeführt, was zu wesentlich kürzeren
Laufzeiten führt. Allerdings ist hier die Genauigkeit der
berechneten Grauwerte geringer. Die Abweichung zur genaueren Berechnung
(mit 'int_zooming' = 'false' ) ist normalerweise kleiner
als zwei Grauwerte.
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. In
diesem Fall wird der Wert von 'int_zooming' ignoriert.
scale_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 scale_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.
Image
(input_object) (multichannel-)image(-array) →
object (byte* / int1* / int2* / uint2* / int4* / int8 / real* / direction* / cyclic* / complex*) *erlaubt für Compute Devices
Bild(er), dessen/deren Grauwerte skaliert werden sollen.
ImageScaled
(output_object) (multichannel-)image(-array) →
object (byte* / int1* / int2* / uint2* / int4* / int8 / real* / direction* / cyclic* / complex*) *erlaubt für Compute Devices
Ergebnisbild(er) durch die Skalierung
Mult
(input_control) number →
(real / integer)
Grauwertskalierung.
Defaultwert: 0.01
Wertevorschläge: 0.001, 0.003, 0.005, 0.008, 0.01, 0.02, 0.03, 0.05, 0.08, 0.1, 0.5, 1.0
Minimale Schrittweite: 0.001
Empfohlene Schrittweite: 0.1
Add
(input_control) number →
(real / integer)
Grauwertverschiebung.
Defaultwert: 0
Wertevorschläge: 0, 10, 50, 100, 200, 500
Minimale Schrittweite: 0.01
Empfohlene Schrittweite: 1.0
* Complement of the gray values: scale_image(Image,Invert,-1.0,255.0)
scale_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.
Ansonsten wird eine Fehlerbehandlung durchgeführt.
mult_image
,
add_image
,
sub_image
Foundation