-         

Ergebnis 1 bis 6 von 6

Thema: Bilderfassung und -verarbeitung

  1. #1

    Bilderfassung und -verarbeitung

    Anzeige

    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:
    Code:
    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

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.08.2006
    Ort
    Budapest
    Alter
    30
    Beiträge
    563
    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

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von Felix G
    Registriert seit
    29.06.2004
    Ort
    49°32'N 8°40'E
    Alter
    34
    Beiträge
    1.780
    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 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
    So viele Treppen und so wenig Zeit!

  4. #4
    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

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    18.06.2013
    Ort
    Berlin
    Alter
    52
    Beiträge
    11
    Hi,

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

    Grüßi..

  6. #6
    Erfahrener Benutzer Roboter Genie Avatar von malthy
    Registriert seit
    19.04.2004
    Ort
    Oldenburg
    Beiträge
    1.379
    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

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •