LabVIEWForum.de - Kinect//Xtion Bild Auswertung Depth und Video Filtern

LabVIEWForum.de

Normale Version: Kinect//Xtion Bild Auswertung Depth und Video Filtern
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallo zusammen da das mein erster Post hier ist vielleicht kurz paar Infos zu mir. Ich bin Student und hab jetzt mittlerweile 5 Monate LabVIEW Erfahrung also noch nicht all zu viel und mir das meiste über das Buch "Einführung in LabVIEW" von Gerogi und Metin angeeignet. Auch euer Forum war immer eine tolle Hilfe aber jetzt häng ich an ein paar Fragen bezüglich Kamera Auswertungen. Ich möchte mit der Kamera ein Tiefenbild anzeigen lassen, welches ich davor Filtere und später wird dann mit Hilfe der Daten der Kamera z.B. der am nächsten(hellste) gelegene Punkt erkannt.

1.
Ist es möglich das Video das die Kinect bzw. die Xtion macht mit dem Vision Assistent oder ähnlichem bei Laufzeit auszuwerten also über das Live Bild den Filter zu legen? Bisher habe ich es mit Hilfe des Kinethesia Toolkits und einem Beispielprojekt (https://decibel.ni.com/content/docs/DOC-16978 ) geschafft das beide Kameras ein Tiefenbild ausgeben. Und auch das man über ein einzelnes Bild einen Filter legt wenn es davor abgespeichert wird.

2.
Den nächst gelegenen Punkt finden bzw den Hellsten. Hier ist mir noch nicht ganz klar wie ich die Daten aus der Kamera bekomme und das dann dieser Punkt z.B. farbig markiert wird.

Vielen dank schon einmal für die Hilfe

anbei ist noch das VI in welchem die Kamera das Tiefenbild anzeigt und man mit Betätigung des Knopfes einen voreingestellten Filter über das gespeicherte Bild gibt. Ich hoff das passt da hier ja Vis von diesem Beispielprojekt verwendet wurden (da aber auf NI Seite gepostet denk ich mal das es öffentlich ist)
Naja, wenn ich das NI Beispiel richtig sehe, sind die Datne, die rauskommen ja vom Datentyp IMAQ-Referenz.

Speicher ein paar Probebilder ab, erstell in Vision Assistant ein Skript, das dir den Punkt findet und erstelle dann mit Tool->LabVIEW Code erzeugen einen Sourcecode. Den kannst du dann bei der Bildausgabe einfügen, und dann passiert deine Auswertung auch am Livebild.
Um den höchsten Punkt zu finden, würde ich vermutlich die Funktion IMAQ Histogram verwenden, daraus das Maximum ziehen, und dann einen mit IMAQ Threshold (ab diesem Maximum, oder diesem Maximum - n=1..5 oder so) in ein Binärbild umwandeln. Dann sind alle Stellen, die diesen Maximalwert haben 1, und der Rest 0. Dann würde ich Particle Analysis verwenden, und nach Center of Mass X,Y, und Area suchen, mir das Partikel mit der groessten Flaeche aussuchen, und davon ist dann Center of Maxx gleich der Punkt den du suchst. Darstellen mit IMAQ Overlay Point (das zeigt aber nur 1 Pixel), oder, wenn der Punkt grösser dargestellt werden soll, IMAQ OVerlay Oval.

So richtig live-programmieren kannst du nur im VBAI, aber den brauchst du meiner Meinung nach nicht. Vor allem, weil das schwierig wird, einen non-Standard Kamera wie deine dorthin zu integrieren.
Vielen Dank schon einmal für die Vorschläge ich probier mich mal heute dran.
Mit der Kinect funktioniert der Vision Assistent bzw der Filter während die Kamera läuft. Das VI ist allerdings ein anderes.
Ich werd das dann noch posten im laufe des Tages.
Ah verstehe, du kriegst also datentypenmassig beim Xtion was anderes. Ehrlich gesagt, hab ich nur das Kinect-VI angeschaut.

Hast du IMAQ ArraytoImage versucht..?
Ja genau ich hab quasi Probleme in diesem VI das gleich ohne zu speichern auf ein Image Format zu bekommen. Aber ich merk auch gerade
das ich vielleicht nicht ganz gut erklärt habe weil das VI welches ich hochgeladen habe nur die Xtion erkennt.
Das ich euch und mich nicht ganz verwirr würde ich (da es einfach mehr Hilfe im Internet auch gibt) erst einmal versuchen wollen die Kinect auszuwerten.

Deswegen hab ich mich gestern mal dran gemacht nach weiteren Beispielen zu suchen und hab nach einem Beispiel dann dieses VI im Anhang programmiert dort bekomme ich das richtige Format um im Vision Assistent den Filter darüber zu legen. Die Filter die du erwähnt hast hab ich in 2ten Vision Assistant eingesetzt zumindest zeigt er mir momentan ein Binäres Bild an von allem was ein Gegenstand ist und in einer gewissen Entfernung

Mein Problem ist aber noch das ich keine Daten von diesem Bild bekomme also xyz-Koordinaten um eben solche Punkte zu bestimmen.
Oder evtl. falls das geht diese Gegenstände wenn sie auftauchen zu "erkennen" und z.b. einzurahmen.

Ich hoff ich hab mich einigermaßen verständlich ausgedrückt bin nämlich ein bisschen durcheinander vom vielen nachlesen Big Grin und probieren.


grüße
So ich bin nochmal ein bisschen weiter gekommen und kann mittlerweile aus dem Array den kleinsten Wert auslesen jetzt hab ich das IMAQ Light Meter entdeckt Smile. Es hat quasi genau die Funktionen die ich suche nur müsste ich das genau andersrum haben gibt es da eine Möglichkeit?
Ich hab quasi den Grauwert und möchte mir dann die Koordinaten anzeigen lassen.
Hm scheint als würde es so etwas nicht geben Smile.
Ich hoff ich nerv jetzt nicht aber ich hab noch einen anderen Ansatz (siehe Bild). Das Array beinhaltet Werte welche mir nichts bringen, alles größer 0 ist in Ordnung.
Im Min Index sollte aber weiter ein Array angezeigt werden das mir die Position der Zahl anzeigt die eben am kleinsten ist. Bisher hab ich es nur geschafft mir den kleinsten Wert anzeigen zu lassen. Allerdings ist der Index dann kein Array mehr und zeigt mir nicht die Position an.

grüße
Ich verstehe dein Problem bzw. Frage irgendwie nicht ganz. Die von dir verwendete Funktion wird dir an den verdrahteten Ausgängen die Position des jeweils kleinsten bzw. größten Punktes ausgeben. Der Ausgang ist doch offensichtlich ein Array und beinhaltet entsprechend auch die 2 notwendigen Indizies für dein 2D-Array. Was ist konkret das Problem?
Das Problem ist das wenn ich bestimmte Werte die in diesem Array sind nicht berücksichtigen möchte, also alles kleiner gleich 0 das dann kein Array mehr am Ausgang von "Min & Max Wert in Array" vorhanden ist (Siehe Bild).
Da ich um diese Werte zu ignorieren zwei For Schleifen und eine Case Struktur verwende so wie hier im Forum auch schonmal gepostet. Und jetzt eben die frage kann ich den diesen vergleich mit größer 0 auch irgendwie anders einbringen. Oder hab ich allgemein bein den For Schleifen was falsch gemacht.
Hallo Sebim,

Zitat:Das Problem ist das wenn ich bestimmte Werte die in diesem Array sind nicht berücksichtigen möchte, also alles kleiner gleich 0 das dann kein Array mehr am Ausgang von "Min & Max Wert in Array" vorhanden ist (Siehe Bild).
Das Problem ist eher die mangelhafte Umsetzung…

Zitat:Da ich um diese Werte zu ignorieren zwei For Schleifen und eine Case Struktur verwende so wie hier im Forum auch schonmal gepostet. Und jetzt eben die frage kann ich den diesen vergleich mit größer 0 auch irgendwie anders einbringen. Oder hab ich allgemein bein den For Schleifen was falsch gemacht.
Was könnte falsch sein bei diesem Ansatz?
- Du hast am Eingang ein 2D-Array. Am Ausgang hast du ein 1D-Array - und wunderst dich, dass du keine XY-Koordinaten mehr hast!? Woran das wohl liegen könnte?
- Du hast jetzt alle interessanten Werte in einem 1D-Array. Kennst du auch noch die XY-Koordinaten deiner Werte, nachdem du sie alle der Reihe nach in ein 1D-Array geschrieben hast? Wenn/Da "nein": diese Umsortierung ist wohl nicht hilfreich…

Lösung:
Programmieren den Min/Max-Vergleich (unter Beachtung der Nebenbedingung "nur für z>0") selbst! Du brauchst dafür zwei autoindizierende FOR-Loop und zwei Schieberegister!
Seiten: 1 2
Referenz-URLs