LabVIEWForum.de - Echtzeit-Bildausgabe ohne flackerndes Overlay

LabVIEWForum.de

Normale Version: Echtzeit-Bildausgabe ohne flackerndes Overlay
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen,

ich bin noch blutiger Anfänger mit LabVIEW, benutze das erst seit etwa einem Monat für meine Thesis.

Ich erzeuge eine Bildverarbeitung und neben dem Lifebild aus der Kamera sollen dazu noch ein paar Overlays eingeblendet werden.
Die Berechnung und Ausgabe dieser habe ich in SubVI und Whileschleife gepackt. Die Ausgabe des Bildes in die local "Image" erfolgt ebenfalls in der Whileschleife damit sie stets aktualisiert wird.

Mein Problem ist nun, dass das Overlay jedoch andauernd flimmert und flackert, sobald das Signal aus der While-Schleife hinausgeht, während das Livebild der Kamera einwandfrei funktioniert.
Auf meinem Front Panel siehts aus wie in der Disko, während, wenn ich eine Probe innerhalb der Whileschleife direkt an "Image" anlege, das Overlay ruhig bleibt.

Hatte schonmal jemand so ein Problem? Weiß jemand wie man das umgehen kann?
Bin mit meinem Latein am Ende :/

gruß Jizaz

edit: von Zeit zu Zeit gibts auch mal nen grellen Lichtblitz auf dem Display, aber nicht immer (glaube das muss damit zu tun haben, tritt auch nur auf der FP-Anzeige auf)
Eine Möglichkeit wäre dass IMAQ anders dann andere LabVIEW Datentypen referenzbased arbeitet.
Das IMAQ Create jeweils in der Schleife erscheint mir nicht sehr geschickt. Das würde ich aus der Schleife rausziehen und am Ende ausserhalb der Schleife auch wieder ein IMAQ Destroy machen. Auch wenn Du da mit dem Namen im Prinzip immer dasselbe IMAQ Image erzeugst, also nicht ein Memory Leak produzierst, wird dadurch das Image immer wieder gelöschst und neu gezeichnet. Das das zu Flickereffekten führt verwundert mich gar nicht.

Rolf Kalbermatter
Hallo Rolf,

danke für den Tip, am IMAQ Create liegts allerdings nicht, das habe ich bereits ebenfalls ausprobiert.
Auch habe ich versucht die case Struktur zu entfernen und die local "KreuzmittelpunkteXY" kurzzuschliessen und direkt zu übergeben. Das hatte alles leider keinen Einfluss.
Das Kamera-Bild selbst ist wie gesagt ja auch in Ordnung und flüssig, es ist nur das Overlay, das flackert.

Mir ist heute jedoch ein anderer Zusammenhang aufgefallen. Wenn die Framerate der Kamera reduziert wird, dann hört das Flackern allmählich auf. Ab 20 fps ist das Overlay stabil, solange man nicht mit der Maus drüberfährt oder Tasten betätigt.
Für meine Messung sind 20fps jedoch etwas suboptimal.
Hast du oder irgendjemand eine Idee, wieso das Overlay da nicht hinterherkommt? Es wird theoretisch mit jedem Frame kalkuliert und gezeichnet, trotzdem flackert das Overlay während das Kamerabild daneben sauber arbeitet. Aber nur auf dem Front Panel! Greift man das Signal mit einer Probe direkt in der Schleife ab, dann funktioniert beides einwandfrei.

Gibt es vielleicht irgendeinen Buffer, in dem Front Panel Daten gesammelt werden, bevor es zur Visualisierung kommt? Ist der zu klein? Irgendwo muss wahrscheinlich ein Flaschenhals sein zwischen der Ausgabe Block Diagram und Ausgabe Front Panel. Oder es überlagert sich irgendwo Speicher, aber alle Komponenten dieser Schleife haben keine parallelen Zugriffe während der Wiedergabe, außer einer Abfrage der Boolean "Einrichten" alle 250ms.

(ich habe die Local auch schon ausgetauscht gegen den direkten Indicator, daran liegts also auch nicht, btw)

Wäre froh, wenn mir dabei jemand helfen könnte, aber je mehr ich darüber schreibe desto weniger Hoffnung hege ich.

Gruß Jizaz
Ich komme auch mal mit einigen Tipps, kenne mich aber mit Vision gar nicht aus.

- Überlagerte Bedien/Anzeigeelement auf dem FP vermeiden. Die können solche Effekte verursachen.
- Das Timer 0,1s, wozu soll das sein. Möchtest du dort eine Wait/Pause von 100ms machen?
- ev. kannst du mal mit dem *deferPanelUpdate* probieren. (siehe Bild)
Hallo RoLe,

der Timer war ursprünglich an die Case Struktur gebunden und hat die Neuberechnungen pro Sekunde etwas eingeschränkt. Hat sich in diesem Fall jedoch erledigt und ist eigentlich nur noch ein Relikt.

Am Montag bin ich wieder im Geschäft, dann werde ich deine Tips ausprobieren. Es ist tatsächlich so, dass die Bildausgabe am Front Panel beispielsweise in einem Registerfenster eingebettet ist.

Ich halte euch auf dem laufenden...
Zwar ist der Name beim IMAQ-Create immer der selbe. Insofern mag es nicht ganz kritisch sein. Unpraktisch ist es auf jeden Fall. Also nach draußen legen und zu gegebener Zeit auch wieder löschen sonst gibt es Memory-Leaks. Es ist nicht sicher wann der Wait-Aufruf tatsächlich im Ablauf aufgerufen wird. Overlays muss man ja löschen um sie neu zu schreiben. Also da genau die Reihenfolge beachten.

Nicht schlimm, aber die Sequenz ist nicht nötig. Zumindestens sehe ich keinen Grund. Sollte doch in den Sub-Vis einer versteckt sein, besser auch hier sicherstellen, dass die Datenflussprogrammierung eingehalten wird.

Viel Erfolg
Laelia
Hallo,

vielen Dank für die Tips. Habe Sie alle ausprobiert und beherzigt, das Problem besteht allerdings nach wie vor. Mittlerweile keimt in mir bereits der Gedanke, der PC könnte die Rechenleistung nicht aufbringen, aber eigentlich hat er während dem Betrieb sogar noch Kapazitäten frei...

Im Anhang ein neuer Screenshot von der Schleife im gegenwärtigen Zustand. Man sieht bei der Sonde einen Teil des Ausgabebildes mit dem Overlay. In diesem Zustand ists absolut stabil. Das gleiche Bild auf dem Front Panel: flackerndes Overlay, flüssiges Kamerabild.

Das "Defer-Panel" hat mein ganzes Front Panel eingefroren und es nur noch bei Fenstergrößenmanipulation refreshed.
Bin mir aber nicht sicher ob ich das so richtig eingesetzt habe...

Fällt irgendwem noch irgendetwas falsches an der Schleife auf?

gruß Jizaz
Also das Defer Panel Update muss man am Anfang einer umfangreichen, mehrstufigen Operation die mehrere FP Updates zur Folge hat einschalten und danach wieder ausschalten. Solange das aktiv ist macht LabVIEW gar keine FP Updates mehr.

Ich denke dass das Get Max Middle und das Draw VI langsam interessant wäre zu sehen um da mehr sagen zu können.

Rolf Kalbermatter
Das Flackern hat meines Erachtens etwas mit dem Zugriff auf den Speicher der Grafikkarte zu tun, der zur Darstellung der Bilder notwendig ist.

Im angehängten VI kann man die Period ändern und das Image Indicator beginnt zu flackern oder hört wieder auf. Auch die Anzahl der Anzeigeelemente hat einen Einfluß (kostet ja Rechenzeit). So kann das Weglassen oder Hinzufügen des Intensitygraphs Flackern beseitigen.

Bei IMAQ Vision gibt es noch das VI IMAQ WindNonTearing was bei der Synchronisation der Monitorfrequenz und der IMAQ-Bild-Refreshrate hilft. Das kann aber nur in Verbindung mit der Darstellung in einem extra Fenster über IMAQ WinDraw etwas bewirken.

Lv86_img
Hallo!

Der Tip mit dem Deferpanel ist gut, hat den Effekt um einiges besser gemacht, allerdings hat das Overlay nach wie vor Probleme damit, wenn zusätzlich Schrift eingeblendet wird. Man sieht, dass die Zeichnung der Matritze (gelb) dann gegen Ende in der Ecke unten rechts etwas nachhängt. Obwohl beides an verschiedenen Stellen der Overlayberechnung implementiert wird.
Aber für meinen Geschmack läuft das dennoch flüssig genug, man kann immerhin schonmal ne Weile draufschaun ohne zu erblindenSmile

@ unicorn: Die Grafikkarte in meinem System ist leider nicht die beste, nur so ein OnBoard-mist, deshalb denke ich ebenfalls dass das ein Faktor ist. Allerdings wurde mein Problem durch das Extrafenster nur geringfügig besser (vllt sogar nur subjektiv). Prinzipiell dürften Kamera und PC recht gut harmonieren, das Livebild selbst ist ja, wie gesagt, sauber und blitzt nur hin und wieder auf, so wie es bei deinem Beispiel vorkommt. Bei mir hats dies aber ebenfalls nicht verbessern können.

Ich werde noch etwas rumprobieren müssen, komme aber die nächsten Tage nicht mehr dazu. Falls ichs nochmal in den Griff bekomme, werde ichs hier posten. Jedenfalls danke ich euch vielmals für eure Hilfe!

gruß Jizaz
Referenz-URLs