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

LabVIEWForum.de

Normale Version: .NET Reference, Invoke Node - Wie damit umgehen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
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?
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…
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…
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
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.
Hallo thz,

um sich Daten zu merken gibt es Schieberegister/FeedbackNodes!
Die muss man nur sinnvoll im subVI einsetzen… Big Grin
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.
Referenz-URLs