SigSys15 Stereo-View: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
Zeile 53: Zeile 53:
Um die Kalibrierung zu initiieren ist es zunächst einmal erforderlich die Bilder für die Kalibrierung zu laden. Hierbei wird der Nutzer nach dem Ordner gefragt indem sich die Bilder, zunächst von der linken Webkamera und anschließen von der rechten Webkamera, befinden.
Um die Kalibrierung zu initiieren ist es zunächst einmal erforderlich die Bilder für die Kalibrierung zu laden. Hierbei wird der Nutzer nach dem Ordner gefragt indem sich die Bilder, zunächst von der linken Webkamera und anschließen von der rechten Webkamera, befinden.
Nachdem die Quellorder definiert wurden, werden aus den Ordnern alle Bilddateien mit der Endung PNG geladen (Zeile 30 bis 35) und die Anzahl der Bilder im jeweili-gen Ordner wird definiert (Zeiele 38 und 39).
Nachdem die Quellorder definiert wurden, werden aus den Ordnern alle Bilddateien mit der Endung PNG geladen (Zeile 30 bis 35) und die Anzahl der Bilder im jeweili-gen Ordner wird definiert (Zeiele 38 und 39).
In der Zeile 42 wird überprüft ob sich in dem Ordner mindestens 10 Bilder befinden. Enthält einer der beiden Ordner weniger als 10 PNG-Dateien wird der Programmver-lauf abgebrochen und die Fehlermeldung „Achtung!!! Die Anzahl der Bilder ist für die Kalibrierung nicht ausreichend!“ erscheint im Matlab Command Window.
In der Zeile 42 wird überprüft ob sich in dem Ordner mindestens 10 Bilder befinden. Enthält einer der beiden Ordner weniger als 10 PNG-Dateien wird der Programmverlauf abgebrochen und die Fehlermeldung „Achtung!!! Die Anzahl der Bilder ist für die Kalibrierung nicht ausreichend!“ erscheint im Matlab Command Window.
Die Matlab Funktion detectCheckerboardPoint sucht das Bild nach einem Schach-brettmuster ab und liefert die Postition des Schachbretts im Bild, sowie die Schach-brettgröße und die Anzahl der verwendeten Bilder für die suche des Schachbretts. Dabei erwartet die Funktion detectCheckerboardPoint die Pfade der Bilder als Einga-beparameter.
Die Matlab Funktion detectCheckerboardPoint sucht das Bild nach einem Schach-brettmuster ab und liefert die Postition des Schachbretts im Bild, sowie die Schach-brettgröße und die Anzahl der verwendeten Bilder für die suche des Schachbretts. Dabei erwartet die Funktion detectCheckerboardPoint die Pfade der Bilder als Einga-beparameter.
Anschließend wir überprüft ob ein Schachbrett gefunden wurde. Falls die Funktion kein Schachbrett im Bild gefunden hat wird der weitere Verlauf mit der Fehlermel-dung „Achtung!!! Es wurde kein Schachbrettmuster erkannt!“ abgebrochen.
Anschließend wir überprüft ob ein Schachbrett gefunden wurde. Falls die Funktion kein Schachbrett im Bild gefunden hat wird der weitere Verlauf mit der Fehlermeldung '''„Achtung!!! Es wurde kein Schachbrettmuster erkannt!“''' abgebrochen.
Ab der Zeile 91 bis 114 werden die verwendeten Bilder für die detectCheckerboard-Point Funktion geladen und angezeigt, siehe Abbildung 3.  
Ab der Zeile 91 bis 114 werden die verwendeten Bilder für die detectCheckerboard-Point Funktion geladen und angezeigt, siehe Abbildung 3.  


Zeile 66: Zeile 66:
</source>
</source>
mithilfe der Eingabe im Matlab Command Window.
mithilfe der Eingabe im Matlab Command Window.
Sollte das Schachbrett dem tatsächlichen Schachbrett entsprechen, so werden in der Zeile 149 die Kameraparameter bestimmt. Bevor die Kameraparameter bestimmt werden können, muss zunächst in der Zeile 143 die Kantenlänge der Schachbrettfel-der definiert werden um in der Zeile 146 die Koordinaten der Schachbrettfelder, un-ter Zuhilfenahme der Matlab-Funktion generateCheckerboardPoints, in der realen Welt zu bestimmen.
Sollte das Schachbrett dem tatsächlichen Schachbrett entsprechen, so werden in der Zeile 149 die Kameraparameter bestimmt. Bevor die Kameraparameter bestimmt werden können, muss zunächst in der Zeile 143 die Kantenlänge der Schachbrettfel-der definiert werden um in der Zeile 146 die Koordinaten der Schachbrettfelder, unter Zuhilfenahme der Matlab-Funktion generateCheckerboardPoints, in der realen Welt zu bestimmen.
Anschließend werden ab der Zeile 152 die Pixel-Abweichungen und die Umgebung zum Zeitpunkt der Aufnahme der Bilder zur Kalibrierung simuliert, siehe Abbildung 4.
Anschließend werden ab der Zeile 152 die Pixel-Abweichungen und die Umgebung zum Zeitpunkt der Aufnahme der Bilder zur Kalibrierung simuliert, siehe Abbildung 4.



Version vom 22. Juni 2015, 10:15 Uhr

Autor:
Betreuer: Prof. Schneider

Motivation

Durch die Verwendung von zwei Mono-Kameras lässt sich eine Tiefeninformation gewinnen.

Ziel

Verarbeiten Sie die Bilder zweier Mono-Webcams mit Matlab zu einem Bild mit Tiefeninformation.

Aufgabe

  1. Montieren Sie zwei Webcams mit festem seitlichen Abstand auf einem Stativ.
  2. Triangulieren Sie aus beiden Bildern eine Tiefeninformation
  3. Kalibrieren Sie die Kameras.
  4. Transformieren Sie ein Objekt aus der Kameraperspektive in Weltkoordinaten.
  5. Stellen Sie die Objekte im Sichtfeld in der Draufsich dar.
  6. Schätzen Sie die Genauigkeit Ihres 3D-Sensors ab.


Lösungen

EINLEITUNG

Die hier erläuterte Projektarbeit wurde im Rahmen der Veranstaltung „Signalverar-beitenden Systeme“, bei Prof. Dr.-Ing. Ulrich Schneider, im Sommer Semester 2015 realisiert. Ziel der Projektarbeit ist es eine 3D-Kamera mithilfe von zwei handelsübli-chen Webcams zu realisieren und so ein 3D-Bild zu erhalten.

HARDWARE-KOMPONENTEN

Für den Aufbau des stereoskopischen Systems wurden zwei gleiche Webcams (Watson, Modell CAM-M130) verwendet. Die Webcams wurden nahezu parallel, auf einem Plastikdeckel, aufgebaut, siehe Abbildung 1. Der Seitliche Abstand der Webcams beträgt 11,2 cm.

Abbildung 1: Verschiedene Ansichten der "3D-Webcam"

SOFTWARE

Die Software zur Projektarbeit ist aufgebaut aus der Hauptdatei stereoview.m. Diese teilt sich auf in die Kalibrierung (siehe Zeile 35) und das laden und auswerten der Bilder und die Erzeugung eines 3D-Bildes ab Zeile 37. Bevor die stereoview.m-Datei ausgeführt werden kann, müssen zuerst einmal die Bilder für die Kalibrierung aufgenommen werden.

Aufnahme der erforderlichen Bilder zur Kalibrierung

Für die Aufnahme der Bilder für die Kalibrierung soll die Datei bilderFuerKalibrie-rung.m ausgeführt werden. Dabei werden in der Zeile 4,

camL = webcam(1); camR = webcam(2);

die Webcams initialisiert und in Zeile 6 wird die Auflösung der Bilder auf 1280 x 960 geändert. Anschließend werden die erforderlichen Bilder aufgenommen

linkesBild = snapshot(camL); rechtesBild = snapshot(camR);

und in dem Zielorder gespeichert.

imwrite(linkesBild, fullfile('LinkesAuge', sprintf('left%02d.png', i))); 
imwrite(rechtesBild, fullfile('RechtesAuge', sprintf('right%02d.png', i)));

Durch die While-Schleife kann der Benutzer die Anzahl der Aufnahmen bestimmen. Es empfiehlt sich eine Mindestanzahl von 10 Bildern (im Programm sind mindestens 10 Bilder erforderlich).

Kalibrierung des Kamerasystems

Um die Kalibrierung zu initiieren ist es zunächst einmal erforderlich die Bilder für die Kalibrierung zu laden. Hierbei wird der Nutzer nach dem Ordner gefragt indem sich die Bilder, zunächst von der linken Webkamera und anschließen von der rechten Webkamera, befinden. Nachdem die Quellorder definiert wurden, werden aus den Ordnern alle Bilddateien mit der Endung PNG geladen (Zeile 30 bis 35) und die Anzahl der Bilder im jeweili-gen Ordner wird definiert (Zeiele 38 und 39). In der Zeile 42 wird überprüft ob sich in dem Ordner mindestens 10 Bilder befinden. Enthält einer der beiden Ordner weniger als 10 PNG-Dateien wird der Programmverlauf abgebrochen und die Fehlermeldung „Achtung!!! Die Anzahl der Bilder ist für die Kalibrierung nicht ausreichend!“ erscheint im Matlab Command Window. Die Matlab Funktion detectCheckerboardPoint sucht das Bild nach einem Schach-brettmuster ab und liefert die Postition des Schachbretts im Bild, sowie die Schach-brettgröße und die Anzahl der verwendeten Bilder für die suche des Schachbretts. Dabei erwartet die Funktion detectCheckerboardPoint die Pfade der Bilder als Einga-beparameter. Anschließend wir überprüft ob ein Schachbrett gefunden wurde. Falls die Funktion kein Schachbrett im Bild gefunden hat wird der weitere Verlauf mit der Fehlermeldung „Achtung!!! Es wurde kein Schachbrettmuster erkannt!“ abgebrochen. Ab der Zeile 91 bis 114 werden die verwendeten Bilder für die detectCheckerboard-Point Funktion geladen und angezeigt, siehe Abbildung 3.

Abbildung 3: Anzeige der gefundenen Schachbrettmuster im Bild. Dabei wird in das geladen Bild das erkannte Schachbrett kenntlich gemacht und der Nutzer muss entscheiden ob das gefundene Schachbrett dem tatsächlichen Schach-brett entsprich oder ob es sich um einen Fehler handelt. Die Abfrage hierzu erfolgt in der Ziele 120

(abfrageOK = input('\n\nWurde das Schachbrettmuster richtig erkannt? JA/NEIN\n', 's');)

mithilfe der Eingabe im Matlab Command Window. Sollte das Schachbrett dem tatsächlichen Schachbrett entsprechen, so werden in der Zeile 149 die Kameraparameter bestimmt. Bevor die Kameraparameter bestimmt werden können, muss zunächst in der Zeile 143 die Kantenlänge der Schachbrettfel-der definiert werden um in der Zeile 146 die Koordinaten der Schachbrettfelder, unter Zuhilfenahme der Matlab-Funktion generateCheckerboardPoints, in der realen Welt zu bestimmen. Anschließend werden ab der Zeile 152 die Pixel-Abweichungen und die Umgebung zum Zeitpunkt der Aufnahme der Bilder zur Kalibrierung simuliert, siehe Abbildung 4.

Abbildung 4: Durchgeführte Kalibrierung und die Bestimmung der Umgebung.

Bestimmung der Position, der erkannten Objekte in der re-alen Welt

Nachdem die Kalibrierung des Kamerasystems erfolgt ist, und die Funktion „kalibrierung“ verlassen wurde schauen wir uns wieder die stereoview.m an. Zunächst werden zwei aktuelle Kamerabilder geladen (Zeile 37 bis 44) oder zwei Standbilder (Zeile 46 und 47). Das laden der Kamerabilder ist analog der Aufnahme der Bilder für die Ka-librierung (siehe Aufnahme der erforderlichen Bilder zur Kalibrierung). Anschließend werden die geladenen Bilder berichtigt (Zeile 54) und als Anaglyphen-Bilder dargestellt (siehe Abbildung 5).

Abbildung 5: 3D-Projektion der Bilder und die Darstellung der Objekte in Weltkoordinaten Die Berichtigung der Bilder erfolgt mithilfe der Matlab-Funktion „rectifyS-tereoImages“. Diese korrigiert die Bilder anhand der Kameraparameter. Anschließend wird ab der Zeile der Sichtbereich der Kamera eingestellt und er wer-den die Objekte in dem Weltkoordinaten-System dargestellt (siehe Abbildung 5).

Weblinks


→ zurück zum Hauptartikel: Signalverarbeitende Systeme SoSe2015