abs_diff_imageabs_diff_imageAbsDiffImageAbsDiffImageabs_diff_image (Operator)

Name

abs_diff_imageabs_diff_imageAbsDiffImageAbsDiffImageabs_diff_image — Berechnen der absoluten Differenz von zwei Bildern.

Signatur

abs_diff_image(Image1, Image2 : ImageAbsDiff : Mult : )

Herror abs_diff_image(const Hobject Image1, const Hobject Image2, Hobject* ImageAbsDiff, double Mult)

Herror T_abs_diff_image(const Hobject Image1, const Hobject Image2, Hobject* ImageAbsDiff, const Htuple Mult)

void AbsDiffImage(const HObject& Image1, const HObject& Image2, HObject* ImageAbsDiff, const HTuple& Mult)

HImage HImage::AbsDiffImage(const HImage& Image2, const HTuple& Mult) const

HImage HImage::AbsDiffImage(const HImage& Image2, double Mult) const

static void HOperatorSet.AbsDiffImage(HObject image1, HObject image2, out HObject imageAbsDiff, HTuple mult)

HImage HImage.AbsDiffImage(HImage image2, HTuple mult)

HImage HImage.AbsDiffImage(HImage image2, double mult)

def abs_diff_image(image_1: HObject, image_2: HObject, mult: Union[int, float]) -> HObject

Beschreibung

abs_diff_imageabs_diff_imageAbsDiffImageAbsDiffImageAbsDiffImageabs_diff_image bildet die absolute Differenz zweier Bilder. Die Grauwerte g' des Ausgabebildes ImageAbsDiffImageAbsDiffImageAbsDiffImageAbsDiffimageAbsDiffimage_abs_diff werden aus den Grauwerten (g1,g2) der Eingabebilder Image1Image1Image1Image1image1image_1 und Image2Image2Image2Image2image2image_2 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 MultMultMultMultmultmult abhängt. Für MultMultMultMultmultmult = 1 ist eine spezielle Optimierung implementiert. Da andere Werte von MultMultMultMultmultmult keine zusätzliche Information liefern können, sollte in der Anwendung MultMultMultMultmultmult = 1 verwendet werden. Andere Werte von MultMultMultMultmultmult sollten lediglich für Visualisierungszwecke verwendet werden. Für byte-, int1-, int2- und uint2-Bilder sind außerdem für MultMultMultMultmultmult = 1 spezielle Optimierungen unter Verwendung von SIMD Technologie implementiert. Ob diese tatsächlich zur Anwendung kommen, kann über den Systemparameter 'mmx_enable'"mmx_enable""mmx_enable""mmx_enable""mmx_enable""mmx_enable" (siehe set_systemset_systemSetSystemSetSystemSetSystemset_system) gesteuert werden. Falls 'mmx_enable'"mmx_enable""mmx_enable""mmx_enable""mmx_enable""mmx_enable" auf 'true'"true""true""true""true""true" gesetzt wird (und die verwendete Hardware SIMD Technologie unterstützt), wird die Berechnung intern unter Verwendung von SIMD Technologie durchgeführt.

abs_diff_imageabs_diff_imageAbsDiffImageAbsDiffImageAbsDiffImageabs_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.

Achtung

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_imageabs_diff_imageAbsDiffImageAbsDiffImageAbsDiffImageabs_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':)set_system("mmx_enable","false")SetSystem("mmx_enable","false")SetSystem("mmx_enable","false")SetSystem("mmx_enable","false")set_system("mmx_enable","false") verhindern.

Ausführungsinformationen

Parameter

Image1Image1Image1Image1image1image_1 (input_object)  (multichannel-)image(-array) objectHImageHObjectHImageHobject (byte* / int1* / int2* / uint2* / int4* / int8 / real*) *erlaubt für Compute Devices

Eingabebild 1.

Image2Image2Image2Image2image2image_2 (input_object)  (multichannel-)image(-array) objectHImageHObjectHImageHobject (byte* / int1* / int2* / uint2* / int4* / int8 / real*) *erlaubt für Compute Devices

Eingabebild 2.

ImageAbsDiffImageAbsDiffImageAbsDiffImageAbsDiffimageAbsDiffimage_abs_diff (output_object)  (multichannel-)image(-array) objectHImageHObjectHImageHobject * (byte / int1 / int2 / uint2 / int4 / int8 / real)

Betrag der Differenz der Eingabebilder.

MultMultMultMultmultmult (input_control)  number HTupleUnion[int, float]HTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

Skalierungsfaktor.

Defaultwert: 1.0

Wertevorschläge: 1.0, 2.0, 3.0, 4.0

Restriktion: Mult > 0

Ergebnis

abs_diff_imageabs_diff_imageAbsDiffImageAbsDiffImageAbsDiffImageabs_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>:)set_system("no_object_result",<Result>)SetSystem("no_object_result",<Result>)SetSystem("no_object_result",<Result>)SetSystem("no_object_result",<Result>)set_system("no_object_result",<Result>) festlegen. Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.

Nachfolger

thresholdthresholdThresholdThresholdThresholdthreshold

Alternativen

sub_imagesub_imageSubImageSubImageSubImagesub_image

Siehe auch

add_imageadd_imageAddImageAddImageAddImageadd_image, scale_imagescale_imageScaleImageScaleImageScaleImagescale_image, dyn_thresholddyn_thresholdDynThresholdDynThresholdDynThresholddyn_threshold

Modul

Foundation