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!
07.08.2017, 14:10 (Dieser Beitrag wurde zuletzt bearbeitet: 07.08.2017 15:11 von jg.)
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.
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
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
Hi Gerd,
danke. Ja, da hast du recht; und ich einen Denkfehler. 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
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
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
RE: .NET Reference, Invoke Node - Wie damit umgehen
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
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.