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 

Teile eines Arrays integrieren



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!

09.04.2013, 10:58
Beitrag #1

Tobias218 Offline
LVF-Neueinsteiger


Beiträge: 5
Registriert seit: Apr 2013

2009, 2011
2011
DE



Teile eines Arrays integrieren
Hallo zusammen,

ich stehe vor einem Problem was die Auswertung meiner Daten angeht. Ich habe Bilder mit eine ICCD-Kamera aufgenommen und diese schon als Array (1024 x 1024 Felder) gespeichert. Um Signale vom Untergrund zu unterscheiden, benutze ich die Threshold-Funktion, die ich für jedes Bild neu einstellen muss.
Hierzu gehe ich jede Zeile des Array einzeln durch und alle Werte, die unterhalb der Thresholdgrenze liegen (oder zu wenige Pixel hintereinander auftauchen (z.B. "Hot Spots")) werden mit "0" überschrieben.
Damit will ich ein Array erzeugen in dem ausschließlich Signale auftauchen. Diese sind leider nicht immer perfekt rechteckig und auch nicht an der selben Stelle. Ich möchte sie aber automatisch erkennen und aufsummieren.

Alle meine bisherigen Ideen funktionieren nicht. Einfach das Array Linie für Linie durchsuchen und bei einem Wert ungleich 0 einen Kasten fester Größe ziehen bzw. mit Teil-Array ausschneiden und mit Arrayelemente addieren funktioniert nicht, da meine Signale nicht immer gleich groß sind und so auch schon Intensitäten von Nachbarsignalen erfasst werden können. Außerdem wird das Pixel in der obersten Zeile des Signals gefunden. Wenn das auch die obere linke Ecke des Rechtecks darstellt, werden z.B. kreisförmige Signale beschnitten.

Ein Algorithmus der sobald er ein Signal gefunden hat in einem bestimmten Muster das Signal abläuft, kann ich in LabView leider nicht programmieren, da es eine nahezu unendlich lange Verschachtelung von True/False-Cases ergibt. Oder es funktioniert und ich habe es falsch angegangen Blush

Und wenn ich jeweils Zeilenweise die unter der Signalkurve eingeschlossene Fläche addiere, habe ich keine Ahnung, wie ich mehrere dieser Signalkurven sinnvoll verknüpfen kann, falls die Indizes nicht gleich sind.

tl;dr
Gesucht ist eine Möglichkeit, um geometrisch unförmige Signale eines Arrays aufzusummieren.

Ich hoffe, ihr könnt mir bei meinem Problem helfen.

Viele Grüße
Tobias
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
09.04.2013, 12:04
Beitrag #2

Kasi Offline
LVF-Stammgast
***


Beiträge: 342
Registriert seit: Dec 2010

6 - 2009
2005
DE_EN

79194
Deutschland
RE: Teile eines Arrays integrieren
tl;dr indeed
kannst du vielleicht einfach mal ein Beispiel-Bild reinstellen, an dem du deine Auswertungswünsche illustrierst?

If you're havin' serial communication problems I feel bad for you, son, I got 99 problems but a baud ain't one! (except if using USB2serial converters, then I experience serialous problems)
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
09.04.2013, 15:08
Beitrag #3

Tobias218 Offline
LVF-Neueinsteiger


Beiträge: 5
Registriert seit: Apr 2013

2009, 2011
2011
DE



RE: Teile eines Arrays integrieren
Hallo Kasi,

ich habe mal zwei verschiedene Bildausschnitte hochgeladen. Das eine ist eine Realprobe und sowohl nicht rechteckig als auch eher unregelmäßig geformt. Daher ist eine Auswertung von Hand zeitaufwendig. Da ich recht viele Bilder habe, dauert es zu lange alle Bilder von Hand in Excel oder Origin auszuwerten.

Das zweite Bild ist die Aufnahme von einem USAF 1951 Testtarget um die Auflösung zu bestimmen. Hier sind die Signale zwar nahezu rechteckig aber auch unterschiedlich groß. Für die Auswertung wären die waagerechten Balken am linken und rechten Rand interessant.

Beide Bilder sind Screenshots aus der Herstellersoftware, die leider zum Auswerten meiner Bilder eher ungeeignet ist. Die Farbskala ist eine Falschfarbenskala. Alle Pixel bestehen nur aus dem Intensitätswert ohne RGB-Informationen.

Ich hoffe, dass hilft ein wenig weiter.

Viele Grüße
Tobias


Angehängte Datei(en) Thumbnail(s)
       
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
10.04.2013, 08:23 (Dieser Beitrag wurde zuletzt bearbeitet: 10.04.2013 08:44 von Kasi.)
Beitrag #4

Kasi Offline
LVF-Stammgast
***


Beiträge: 342
Registriert seit: Dec 2010

6 - 2009
2005
DE_EN

79194
Deutschland
RE: Teile eines Arrays integrieren
Also willst du im Grunde die Gesamtintensität jedes einzelnen Objekts aufsummieren, richtig?
Untergrund würde ich auch erstmal mit threshold auf null setzen. Wenn der Untergrund variiert, kann man das auch ganz gut über den ersten Peak beim Intensitäts-Histogramm lösen.
Zusammenhängende Objekte...das wird interessant. Man könnte eine Art "Fressverfahren" machen:

1) Das komplette untergrundbereinigte 2D-Bild-Array nach einem Wert > 0 durchsuchen.
2) Sobald ein Punkt > 0 gefunden wird, wird dieser in ein neues Array als Objektpunktearray eingetragen und der Punkt auf 0 gesetzt.
3) Nachbarpunkte (x+/-1, y+/-1, wenn man ganz auf Nummer sicher gehen will, sollte man auch diagonal springen) nach weiteren Werten > 0 absuchen und dem gleichen Objektpunktearray zuschreiben, Wert wieder auf 0 setzen. Schritt 3 bei den jeweiligen Nachbarpunkten > 0 solange wiederholen, bis alle Nachbarn null sind.
4) Zurück zu Schritt 1) (mit angepasstem Startindex) , das nächste Objektpunktearray vollschreiben und solange wiederholen, bis das 2D-Bild-Array durch ist.

Auswertungsmöglichkeiten:
a) Anzahl des Objektpunktearrays bewerten. Hat das Objekt nur 1 oder 2 Punkte wird's als Cosmic klassifiziert und rausgeschmissen.
b) Mittelwert des Objektpunktearrays bilden
c) Koordinaten des Objektpunkte festhalten (Dann sollte es allerdings eher ein array von Objektpunktclustern werden) und so über min/max die Ausmaße des Objekts bestimmen. Oder auch jeweils das gefundene Einzelobjekt nochmal "plotten".

Hattest du dir sowas in der Art vorgestellt?

If you're havin' serial communication problems I feel bad for you, son, I got 99 problems but a baud ain't one! (except if using USB2serial converters, then I experience serialous problems)
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
10.04.2013, 09:00
Beitrag #5

Tobias218 Offline
LVF-Neueinsteiger


Beiträge: 5
Registriert seit: Apr 2013

2009, 2011
2011
DE



RE: Teile eines Arrays integrieren
Zitat:2) Sobald ein Punkt > 0 gefunden wird, wird dieser in ein neues Array als Objektpunktearray eingetragen und der Punkt auf 0 gesetzt.
3) Nachbarpunkte (x+/-1, y+/-1, wenn man ganz auf Nummer sicher gehen will, sollte man auch diagonal springen) nach weiteren Werten > 0 absuchen und dem gleichen Objektpunktearray zuschreiben, Wert wieder auf 0 setzen. Schritt 3 bei den jeweiligen Nachbarpunkten > 0 solange wiederholen, bis alle Nachbarn null sind.

Genau das ist es was ich gerne möchte und auch schon versucht habe. Leider ist es mir nicht gelungen einen vernünftiges VI zu schreiben um das auch umzusetzen. Meinen Versuch habe ich abgebrochen, als ich erkannt habe, dass es in einer unendlichen Verkettung von True/False-Cases enden wird. Und leider ist mir da noch keine Möglichkeit eingefallen, um das zu umgehen.

Bei der Auswertung hatte ich vor die Intensitätssumme zu nutzen, da diese ein Maß für meine Analytkonzentration ist und robuster als die Peakhöhe (über min/max) ist. Das sollte aber recht einfach sein, sobald ich weiß welche Peaks auftauchen (und wo sie liegen).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
10.04.2013, 11:29 (Dieser Beitrag wurde zuletzt bearbeitet: 10.04.2013 11:39 von Kasi.)
Beitrag #6

Kasi Offline
LVF-Stammgast
***


Beiträge: 342
Registriert seit: Dec 2010

6 - 2009
2005
DE_EN

79194
Deutschland
RE: Teile eines Arrays integrieren
(10.04.2013 09:00 )Tobias218 schrieb:  [...] als ich erkannt habe, dass es in einer unendlichen Verkettung von True/False-Cases enden wird

Manche nennen es unendlich, ich nenne es rekursiv Wink
Ich hab mal was zusammengeklickt, leider ist es (erwartungsgemäß) extrem langsam. Es ist aber bestimmt auch noch lange nicht optimal programmiert. Also nimm dir eine Tasse Tee, während du bei der Betrachtung des Live-Bilds die Objekte verschwinden siehst. Das Endergebnis habe ich mir nicht angeschaut, soviel Zeit hatte ich in meiner Mittagspause nicht Big Grin
Das Hauptvi (LabVIEW 2009) ist sehr groß, da ich eins deiner Beispielbilder grob übernommen habe (wirklich nur grob, die falschfarben sorgen für entsprechende Ringmuster in der 24bit-Farbmap, die ich mit entsprechend zu hoch gewähltem threshold alle wieder rausschmeiße), daher hier die gezippte Version.


Angehängte Datei(en)
0.0 .zip  eat_objects_main.zip (Größe: 2,82 MB / Downloads: 246)

If you're havin' serial communication problems I feel bad for you, son, I got 99 problems but a baud ain't one! (except if using USB2serial converters, then I experience serialous problems)
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
10.04.2013, 15:05
Beitrag #7

Tobias218 Offline
LVF-Neueinsteiger


Beiträge: 5
Registriert seit: Apr 2013

2009, 2011
2011
DE



RE: Teile eines Arrays integrieren
Vielen Dank,
ich glaube, es ist genau so wie ich das brauche. Ich bin gerade erst dabei mich in das VI vollständig reinzudenken.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
10.04.2013, 19:35
Beitrag #8

Kasi Offline
LVF-Stammgast
***


Beiträge: 342
Registriert seit: Dec 2010

6 - 2009
2005
DE_EN

79194
Deutschland
RE: Teile eines Arrays integrieren
Also, mal abgesehen davon dass die Grundidee funktioniert ist das Speichermanagement scheinbar katastrophal. Ich nehme an, das liegt an meiner Art, die gefunden object-point-arrays als 2d-Array zu bündeln. Das explodiert dann dementsprechend, wenn er ein großes Objekt findet. Hier mal die aufgezeichnetne Loop-Zeiten, der Spike ist beim großen Objekt. Danach scheint es der Performance zusehends schlechter zu gehen. Außerdem liegt die Grundlaufzeit pro Reihe schon etwa 420ms. Sehr interessant, wenn man bedenkt, dass man die komplette Untergrundbereinigung des Arrays kaum mitbekommt.


Angehängte Datei(en) Thumbnail(s)
   

If you're havin' serial communication problems I feel bad for you, son, I got 99 problems but a baud ain't one! (except if using USB2serial converters, then I experience serialous problems)
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
11.04.2013, 14:55
Beitrag #9

Kasi Offline
LVF-Stammgast
***


Beiträge: 342
Registriert seit: Dec 2010

6 - 2009
2005
DE_EN

79194
Deutschland
RE: Teile eines Arrays integrieren
Manchmal hat man einen netten Einfall, wie zum Beispiel dieses Live-Bild und vergisst, was man genau LabVIEW damit antut. Also, wenn ich das Live-Bild auf den äußeren For-Loop beschränkte und mir nur die Summen ausgeben lasse, läuft das Ding auch in vernünftiger Geschwindigkeit.


Angehängte Datei(en)
0.0 .zip  eat_objects.zip (Größe: 2,83 MB / Downloads: 187)

If you're havin' serial communication problems I feel bad for you, son, I got 99 problems but a baud ain't one! (except if using USB2serial converters, then I experience serialous problems)
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
12.04.2013, 09:43
Beitrag #10

Tobias218 Offline
LVF-Neueinsteiger


Beiträge: 5
Registriert seit: Apr 2013

2009, 2011
2011
DE



RE: Teile eines Arrays integrieren
LabVIEW berechnet das live Bild bei jedem Schleifendurchlauf neu, wenn es in der inneren Schleife steht, sehe ich das richtig?

Ich bin gerade auch schon dabei, das ganze meinen Bedürfnissen anzupassen. Vor allem die Ausgabe der Werte möchte ich noch etwas umgestalten.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
Sad Texthintergrund von Elementen eines Arrays dynamisch ändern hajos118 3 5.065 04.05.2017 10:37
Letzter Beitrag: GerdW
  Spannung und Hysteresefläche integrieren HTX 4 4.206 04.01.2017 11:37
Letzter Beitrag: HTX
  Variable Größe eines Arrays mit VISA-Adressen jusaca 4 4.568 10.02.2016 10:13
Letzter Beitrag: jusaca
  Sinus integrieren LabViewPete 9 6.920 11.09.2015 14:48
Letzter Beitrag: LabViewPete
  Auswahl eines Arrays anhand des Wertes eines zweiten Arrays treffen alan 2 4.594 19.02.2015 16:12
Letzter Beitrag: alan
  Erste n Zeilen eines 2D-Arrays löschen Pral 3 4.640 15.11.2014 17:01
Letzter Beitrag: Pral

Gehe zu: