LabVIEWForum.de
Null für negative Werte in U16-Arrays - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Null für negative Werte in U16-Arrays (/Thread-Null-fuer-negative-Werte-in-U16-Arrays)



Null für negative Werte in U16-Arrays - labrat - 08.12.2011 20:02

Hallo,

Ich nehme mit einer Kamera 16bit-Bilder auf, in vorzeichenlose 2D-Arrays (U16) umgewandelt werden. Währenddessen möchte ich ein Hintergrundbild - also ein zweites Array (U16) - abziehen. Nun kann es vorkommen, dass bei der Subtraktion der Array negative Werte entstehen. Da der Datentyp ein vorzeichenloses Wort ist, wird eine -1 beispielsweise als 65535 angezeigt. Ich möchte allerdings, dass negative Werte als Null dargestellt werden.

Natürlich kann ich im Array jeden einzelnen Wert auslesen und abfragen, ob dieser negativ ist und anschließend Null setzen. Dies hab ich bereits ausprobiert. Das Problem dabei ist, dass die Arrays mit 320x256 Werten recht groß sind und mir bei dieser Methode die Framerate in den Keller geht.

Gibt es eine (zeitlich) SCHNELLE Möglichkeit bei U16-Arrays die negative Werte als Null angezeigen zu lassen?

Vielen Dank im voraus

labrat


RE: Null für negative Werte in U16-Arrays - unicorn - 08.12.2011 22:13

Hier wäre mal eine Umrechnung ohne Vergleich. Ich glaube aber nicht, dass sie performanter als der Vergleich ist. Wie hast Du denn den Vergleich programmiert?


RE: Null für negative Werte in U16-Arrays - Lucki - 08.12.2011 23:59

Einzelne Werte abfragen, ob sie negativ sind, funktioniert nicht - das Ergebnis einer Operation mit Ausgangswert U16 ist definitiosgemäß immer positiv. Wegen der Performance möchtest du nicht jeden einzelnen Wert vergleichen. Das musst du auch nicht - viele LV-Operationen sind polymorph und kommen auch mit 2D-Array zurecht. Mit der Vorarbeit von unicorn sähe das dann so aus (Wobei ich mir jetzt nicht sicher bin, ob es noch etwas einfacher geht):
[attachment=37571]


RE: Null für negative Werte in U16-Arrays - labrat - 09.12.2011 11:24

Erstmal vielen Dank!

Im Prinzip hab ich es so änlich wie in Lösungsvorschlag Nr.1 probiert. Eine for-Schleife in einer for-Schleife und dann eine True/False Abfrage für jedes Element ob negativ oder nicht. Damit ein Wert überhaupt negativ werden kann habe ich beide Arrays zuvor in I16 umgewandelt und anschließend wieder in U16.

Lösungsvorschlag Nr.2 ist natürlich sehr elegant mit den boolschen Array. Leider sinkt aber auch hier - zu meiner Verwunderung - die Framerate stark ab.

Mittlerweile habe ich allerdings herausgefunden, dass man Bilder mit dem IMAQ_Subtract.vi direkt subtrahieren kann. Also ohne dass ich die Bilder zuerst in Arrays umwandle. Dabei wird dann automatisch eine Null für negative Werte angenommen. Ob die Framerate dann hoch genug ist muss ich noch testen. Aber das wäre wohl eher etwas für das VISION forum.

Jedenfalls nochmal vielen Dank für die Mühe.