INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Werte ausserhalb eines Grenzwertes in Array setzen



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

21.03.2012, 14:26
Beitrag #1

jenitsche Offline
LVF-Neueinsteiger


Beiträge: 5
Registriert seit: Mar 2012

2011 Pro Development
2010
DE



Werte ausserhalb eines Grenzwertes in Array setzen
Hallo zusammen,
ich arbeite gerade an einem VI zur Auswertung von Messbildern, dabei möchte ich in den Bildern, die als 2D-Array vorliegen, Werte die ausserhalb eines Grenzwertes liegen als NaN kennzeichnen. Das wäre natürlich über zwei for-Schleifen möglich in denen ich jeden einzelnen Pixel-Wert mit den Grenzwerten vergleiche, finde ich aber nicht so übersichtlich. Die Funktion Wertebereich Prüfen und Erzwingen setzt Werte ausserhalb des Grenzwertes auf den Wert des Grenzwertes. Gibt es sonst eine elegante Möglichkeit die Werte zu setzen?
Gruss
Jan
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
22.03.2012, 10:37 (Dieser Beitrag wurde zuletzt bearbeitet: 22.03.2012 10:39 von Lucki.)
Beitrag #2

Lucki Offline
Tech.Exp.2.Klasse
LVF-Team

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
RE: Werte ausserhalb eines Grenzwertes in Array setzen
Der Farb-/Grauwerte eines Bildes sind doch immer Integer-Werte, und bei denen gibt es kein "NaN". Hast Du das bedacht?
Ansonsten fällt mir nur ein, mit der sehr schnellen Funktion "Array umformen" das Array vorübergehend in ein 1D-Array zu verwandeln. Es könnte sein, dass das dann schneller geht - sicher bin ich mir da aber nicht. Aber man könnte es mal probieren.
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
22.03.2012, 14:02
Beitrag #3

jenitsche Offline
LVF-Neueinsteiger


Beiträge: 5
Registriert seit: Mar 2012

2011 Pro Development
2010
DE



RE: Werte ausserhalb eines Grenzwertes in Array setzen
Ja, dass die original Grauwerte Integer-Werte sind und es da kein NaN gibt habe ich bedacht, es geht auch eher um Werte mit denen schon einige Berechnungen durchgeführt wurden und die daher dann als DBL vorliegen. Ist es denn schneller eine Schleife mit N*M Durchläufen zu erstellen als zwei Schleifen mit N und M? Das müsste meiner Meinung nach der gleiche Rechenaufwand sein.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
26.03.2012, 09:46
Beitrag #4

jenitsche Offline
LVF-Neueinsteiger


Beiträge: 5
Registriert seit: Mar 2012

2011 Pro Development
2010
DE



RE: Werte ausserhalb eines Grenzwertes in Array setzen
OK, ich habe jetzt noch eine Möglichkeit gefunden das ganze mit der Wertebereich prüfen und erzwingen Funktion zu lösen. Allerdings werden die Werte dann als Inf und nicht als NaN maskiert. Alternativ geht es vergleichbar auch mit den einfachen Vergleichsfunktionen. Habe alle drei Versionen mal angehängt. Bei einer Laufzeitprüfung scheint allerdings die doppelte For-Schleife am besten abzuschneiden, daher werde ich sie weiter verwenden.


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
26.03.2012, 09:51 (Dieser Beitrag wurde zuletzt bearbeitet: 26.03.2012 09:56 von GerdW.)
Beitrag #5

GerdW Offline
______________
LVF-Team

Beiträge: 17.469
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Werte ausserhalb eines Grenzwertes in Array setzen
Hallo jenitsche,

ja, Division durch Null ergibt immer noch Inf...

Zitat:Bei einer Laufzeitprüfung scheint allerdings die doppelte For-Schleife am besten abzuschneiden, daher werde ich sie weiter verwenden.
Kaum zu glauben. Kannst du mal das VI anhängen? Wie hast du die Zeit gemessen?

Noch'ne Idee:
   

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
26.03.2012, 10:39
Beitrag #6

jenitsche Offline
LVF-Neueinsteiger


Beiträge: 5
Registriert seit: Mar 2012

2011 Pro Development
2010
DE



RE: Werte ausserhalb eines Grenzwertes in Array setzen
Im prinzip ist es mir egal ob da Inf oder NaN steht, solange die Werte eindeutig von den restlichen zu unterscheiden sind.
Interessante Beobachtung: Wenn ich die Laufzeit aller Lösungen in einem gemeinsamen VI ermittle (siehe Anhang ArrayErsetzenLaufzeit.vi) ist die Version mit der Wertebereich-Funktion am schnellsten, die Doppelschleife am langsamsten. Wenn ich jede Lösung in einem einzelnen VI laufen lasse (siehe restlichen 4 VI im Anhang) sind die Schleifen schneller. Hat jemand eine Erklärung dafür?


Angehängte Datei(en)
11.0 .vi  ArrayErsetzenLaufzeit.vi (Größe: 21,59 KB / Downloads: 210)

11.0 .vi  ArrayErsetzenLaufzeitDoppelschleife.vi (Größe: 12,63 KB / Downloads: 231)

11.0 .vi  ArrayErsetzenLaufzeitSchleife.vi (Größe: 12,15 KB / Downloads: 228)

11.0 .vi  ArrayErsetzenLaufzeitVergleich.vi (Größe: 11,11 KB / Downloads: 224)

11.0 .vi  ArrayErsetzenLaufzeitWertebereich.vi (Größe: 10,93 KB / Downloads: 220)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
26.03.2012, 10:52 (Dieser Beitrag wurde zuletzt bearbeitet: 26.03.2012 10:55 von GerdW.)
Beitrag #7

GerdW Offline
______________
LVF-Team

Beiträge: 17.469
Registriert seit: May 2009

LV2021
1995
DE_EN

10×××
Deutschland
RE: Werte ausserhalb eines Grenzwertes in Array setzen
Hallo jenitsche,

wenn du Zeiten messen willst, solltest du:
- nichts parallel abarbeiten lassen (wg. ganz allgemein korrekter Messung)
- irgendwelche Sachen, die potentiell in µs abgearbeitet sind, mehrfach in einer Schleife ausführen lassen (z.B. 1k oder 1M mal) und dann wieder auf eine Iteration zurückrechnen (wg. Messgenauigkeit)
   
Wie man Zeiten korrekt misst, wird sowohl in Core1 erläutert als auch in diversen Forenbeiträgen...

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
26.03.2012, 12:54
Beitrag #8

jenitsche Offline
LVF-Neueinsteiger


Beiträge: 5
Registriert seit: Mar 2012

2011 Pro Development
2010
DE



RE: Werte ausserhalb eines Grenzwertes in Array setzen
Danke Gerd für den Hinweis. Bei 1000 Durchläufen sind dann die Schleifen mit 20 bzw. 30 ms. doch einiges langsamer als die Vergleichs- oder Wertebereichsfunktionen die im µs-Bereich liegen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Gehe zu: