LabVIEWForum.de
.NET Reference, Invoke Node - Wie damit umgehen - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: .NET Reference, Invoke Node - Wie damit umgehen (/Thread-NET-Reference-Invoke-Node-Wie-damit-umgehen)



.NET Reference, Invoke Node - Wie damit umgehen - thz89 - 07.08.2017 14:10

Hi,

ich habe leider wieder eine Frage, für deren Beantwortung ich viel zu wenig Programmierer bin, um sie mir selber zusammen zu reimen.

Ich greife mit den Hersteller VIs ein Live-Bild einer IDS Kamera ab und betreibe ein bisschen Bildanalyse und Bildverarbeitung. Dazu habe ich die Bildausgabe des IDS-VI angezapft und meine Funktionen zwischen Bildausgabe und letzter IDS-Funktion gehängt. Das funktioniert grundsätzlich sehr gut, aber um die Analyse zu verbessern, will ich nun über N Bilder mitteln. Das funktioniert an dem Ort an dem ich meinen Kram im IDS-VI mache aber nicht, weil ich immer nur genau ein Bild von der Kamera übermittelt bekomme, mit dem ich dann Unfug treiben kann.

[attachment=58103]

Mein Ansatz wäre jetzt, dass ich das Averaging-VI (VI siehe Anhang) auflöse und die for-Schleife um die "Memory Invoke-Node" oder sogar um die "Camera Invoke-Node" lege. Aus ersterer wird das u8Image ausgegeben und ich vermute, dass ich hier die Möglichkeit habe, mir die gewünschten N Bilder in die Zwischenablage zu speichern. Ich weiß allerdings nicht was es mit den Invoke-Nodes und der .NET-Reference auf sich hat (hab nur ein bissl gegooglet und eine kurze Zusammenfassung von Microsoft gelesen), ob ich richtig mit meinem Ansatz liege, und on-top, ob ich noch irgend etwas beachten muss. Vielleicht kann mir hier jemand helfen?


RE: .NET Reference, Invoke Node - Wie damit umgehen - GerdW - 07.08.2017 14:21

Hallo thz,

Zitat:Mein Ansatz wäre jetzt, dass ich das Averaging-VI (VI siehe Anhang) auflöse und die for-Schleife um die "Memory Invoke-Node" oder sogar um die "Camera Invoke-Node" lege.
Mein Ansatz wäre, in diesem Averaging-VI etwas sinnvolles zu machen!
Momentan gibt man hier ein (in Worten: 1) Bild hinein und die Angabe, wieviele Bilder gemittelt werden sollen. Im VI wird dann dieses eine Bild x-mal aufaddiert und dann durch "x" geteilt - wo ist der Sinn dabei?

Zitat:Aus ersterer wird das u8Image ausgegeben und ich vermute, dass ich hier die Möglichkeit habe, mir die gewünschten N Bilder in die Zwischenablage zu speichern.
Da scheint das Bild herauszukommen. Du musst nur ein sinnvolles Averaging-VI verwenden, um über mehrere Bilder zu mitteln…


RE: .NET Reference, Invoke Node - Wie damit umgehen - thz89 - 07.08.2017 16:05

Hi Gerd,

danke. Ja, da hast du recht; und ich einen Denkfehler. Smile Wie würdest du denn die einzelnen Bilder zwischenspeichern?
Ich bin ursprünglich davon ausgegangen, dass die for-Schleife für jede Iteration ein neues Bild abfragt, was sie aber natürlich nicht macht - sie arbeitet ja erstmal alle Eingangsdaten ab, bevor sie von vorne beginnt.
Damit muss ich vor der Mittelung erstmal N Bilder ansammeln und zwischenspeichern. Spontan würde ich sagen, dass ich das auch in einer Schleife mache, aber hier habe ich ja wieder das Problem, dass ich nicht alle N Bilder auf einen Satz in die Schleife schieben kann.

lg,
Thorsten



(07.08.2017 14:21 )GerdW schrieb:  Hallo thz,

Zitat:Mein Ansatz wäre jetzt, dass ich das Averaging-VI (VI siehe Anhang) auflöse und die for-Schleife um die "Memory Invoke-Node" oder sogar um die "Camera Invoke-Node" lege.
Mein Ansatz wäre, in diesem Averaging-VI etwas sinnvolles zu machen!
Momentan gibt man hier ein (in Worten: 1) Bild hinein und die Angabe, wieviele Bilder gemittelt werden sollen. Im VI wird dann dieses eine Bild x-mal aufaddiert und dann durch "x" geteilt - wo ist der Sinn dabei?

Zitat:Aus ersterer wird das u8Image ausgegeben und ich vermute, dass ich hier die Möglichkeit habe, mir die gewünschten N Bilder in die Zwischenablage zu speichern.
Da scheint das Bild herauszukommen. Du musst nur ein sinnvolles Averaging-VI verwenden, um über mehrere Bilder zu mitteln…



RE: .NET Reference, Invoke Node - Wie damit umgehen - jg - 07.08.2017 16:48

Du musst nicht unbedingt alle Bilder erst sammeln. Das hängt von der Art deiner Mittelung ab. Bsp.: Beim klassischen Mittelwert ist es egal, ob du über ALLE Datenpunkte mittelst, oder erst über jeweils gleich große Datenpakete mittelst, und davon nochmals einen Mittelwert bildest.

Oder anders:

Code:
(a+b+c+d)/4 = [ (a+b)/2 + (c+d)/2 ] / 2

Gruß, Jens


RE: .NET Reference, Invoke Node - Wie damit umgehen - thz89 - 08.08.2017 11:56

Aber wie bekomme ich denn aufeinanderfolgende Bilder in LabVIEW miteinander verrechnet? Ich kann natürlich jedes Bild des Video-Signals mit dem Mittelungsfaktor gewichten, aber wenn ich dann aufsummieren will, brauche ich ja auch wieder N zwischengespeicherte Bilder/Arrays; als Input habe ich aber immer nur ein einziges Bild.


RE: .NET Reference, Invoke Node - Wie damit umgehen - GerdW - 08.08.2017 12:03

Hallo thz,

um sich Daten zu merken gibt es Schieberegister/FeedbackNodes!
Die muss man nur sinnvoll im subVI einsetzen… Big Grin


RE: .NET Reference, Invoke Node - Wie damit umgehen - thz89 - 09.08.2017 08:39

Also ich schätze, ich habe jetzt den Ort gefunden, an dem ich das Shieberegister setzen muss. Und zwar auf die äußerste While-Schleife des Kamera-Programms, die mir aus einem Bild ein Video macht.