PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bilderfassung und -verarbeitung



Moey
06.02.2008, 15:17
Hallo,


ich möchte mgl. Echtzeitnah Bilder erfassen und auswerten. Die Auswertung soll dabei mgl. mit Matlab funktionieren.

Bis jetzt habe ich eine AXIS 211W Netzwerkkamera zur Verfügung. Diese verfügt zwar über einen Streaminausgang, leider ist es mir in Matlab nicht gelungen, diesen aufzunehmen. Mit imread ann ich nur einzelne Bilder der Netzwerkkamera aufnehmen:

im = imread('http://192.168.2.245/axis-cgi/jpg/image.cgi?compression=0&fps=1&colorlevel=0&resolution=160x120');

.

Ich weiß, dass es mit USB-Kameras auf einfachem Weg zu schnelleren Lösungen kommen kann, aber die Lösung muss für eine Netzwerkkamera funktionieren. Und das ganze mit Matlab, da ich jemandem helfe die Kamera damit ausreichende schnell zu bekommen.



Für die Zukunft:

Wie sieht es generell mit Kameras und anderen Entwicklungsumgebungen aus? Ich würde statt Matlab gerne C, Delphi oder Java benutzen. Wie ist da der Aufwand Bilder von einer Kamera zu beziehen (sowohl Netzwerk als auch USB, vielleicht für prof. Anwendungen auch FireWire).

Was habt Ihr für Erfahrungen mit Online-Bilderfassung und Auswertung? Ich brauche eine schnelle, Echtzeitnahe Übertragung um später z.B. eine Fahrspur oder Schilder zu detektieren.

Grüße,

Johannes

pongi
06.02.2008, 15:54
Klar, der Matlab Befehl, den Du da benutzt, nimmt nur ein Frame. Um ein bewegtes Bild zu haben, musst du das ganze schon in eine for-Schleife packen.

Schau Dir doch mal die Befehle getframe und movie in Matlab an, die könnten vielleicht auch was für Dich sein.
Ausserdem gibts im Simulink auch eine Toolbox für Videoauswertung, vielleicht wäre das was für Dich.

Gruss

pongi

Felix G
06.02.2008, 16:18
Also Matlab ist zwar schnell, aber nicht unbedingt so schnell daß es uneingeschränkt zur Echtzeitauswertung von Videodaten geeignet ist.

... wobei es natürlich ganz darauf ankommt was mit den Bildern so alles angestellt werden soll.



Für die Zukunft:

Wie sieht es generell mit Kameras und anderen Entwicklungsumgebungen aus? Ich würde statt Matlab gerne C, Delphi oder Java benutzen.Also für die Auswertung der Kamerabilder dürfte die OpenCV (http://www.intel.com/technology/computing/opencv/overview.htm) Bibliothek gut geeignet sein...
Wie man die Kamera anspricht hängt aber hauptsächlich von der Kamera ab.

Bei deiner Netzwerkkamera musst du wohl im wesentlichen eine TCP Verbindung herstellen

Moey
06.02.2008, 17:50
Danke für die schnellen Antworten.

Ich habe mir die Funktion Getframe() und Movie() mal angesehen. Mit Getframe kann ich ein Movie-Frame extrahieren, wobei dieses Movie in einem der Fenster (figure) laufen muss. Da muss ich die Daten der Kamera aber erst hinbekommen.

Die Sache mit der for-Schleife wäre aber zu langsam, da es mit imread() pro Bild etwa 0.2s braucht. Normalerweise hat die Kamera aber einen Stream (rtp,rtsp) den ich gern auslesen würde. Über die Weboberfläche der Kamera bekomme ich einen schönen, schnelle MJPG-Stream geliefert. Den hätte ich gern in Matlab. Ich hab schon den halben Tag recherchiert, aber einfach nichts finden können.

Die OpenVC-Lib seh ich mir gleich noch an


Moey

Achromat
05.07.2013, 16:08
Hi,

um es noch einfacher zu machen nutze doch eine Bildverarbeitung mit Lua -Interface heißt Patswitch.msi

Grüßi..

malthy
05.07.2013, 18:39
Hey!

Mit einer Netzwerkkamera habe ich unter Matlab nie gearbeitet, nur mit Cams, auf die man direkt im Video-Objekt zugreifen kann. In wie weit das für deine Kamera der Fall ist, weiß ich so nicht. Aber grundsätzlich, wenn du einen kontinuierlichen Bildstrom entgegen nehmen willst, um auf den Frames zu rechnen, würde ich das so machen: du erzeugst ein Video-Objekt und teilst ihm einen Callback mit, der aufgerufen wird, wenn ein Frame bereit steht. Die entspr. Eigenschaft heißt "FramesAcquiredFcn", dort übergibst du ein Handle für den Callback zB "@vidfracqu". Dann setzt du "FrameGrabInterval" auf einen geeigneten Wert. Dieser Wert gibt an, für jedes wievielte Frame der o.g. Callback aufgerufen wird. Die "TriggerRepeat" Eigenschaft setzt du auf inf (kann sein dass das default ist, weiß ich nicht mehr aus dem Kopf). In dem Callback "vidfracqu(obj,event)" kannst du dir dann den Frame mit "frame = getdata(obj, 1)" abholen. Da moderne Rechner ziemlich potent sind, kann man so tatsächlich auch eniges an online Bildverarbeitung machen (wenn man einigermaßen optimal coded, d.h. für Matlab vor allem Vektorisieren).

In wie weit das jetzt für deine Netzwerk-Cam anwendbar ist, kann ich aber leider nicht sagen ... Vielleicht hilft es ja einen Schritt in dir richtige Richtung zu machen.

Gruß
Malte