DSB18: Inverse Perspektiventransformation: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
|||
Zeile 20: | Zeile 20: | ||
== Lösungen == | == Lösungen == | ||
=== 1. Kalibrieren Sie die verwendete Kamera. === | |||
Es wurde die Matlab App "Camera Calibration" verwendet. Diese App ließt Bilder ein und überprüft ob diese ein Schachbrett Muster enthalten. Für eine gute Kalibrierung werden 20 bis 30 Bilder von Mathworks empfholen. Die Kalibrierungs Daten können dann in der App als Script gespeichert werden oder als Parameter, welcher Matlab dann einlesen kann. | |||
Die Bilder für die Kalibrierung sind unter "https://svn.hshl.de/svn/DSB/trunk/User/SoSe2018/Michael Menke/Kalibrierung" gespeichert. | |||
Die Parameter sind unter "https://svn.hshl.de/svn/DSB/trunk/User/SoSe2018/Michael Menke/cameraParams.mat" gespeichert. | |||
Des Weiteren befindet sich in dem Hauptprogramm folgenden Code, welcher eine Kalibrierung durchführt, wenn keine "cameraParams.mat" vorliegt. Der Anfänglich von Matlab erzeugte Code enthielt keine Überprüfung ob die Parameter schon vorhanden ist und hatte eine feste Liste von Bild Dateien. Die Angepasste Version überprüft ob die Parameter schon vorhanden sind und ließt alle Bilder aus einem Ordner ein. | |||
<syntaxhighlight lang="matlab" line='line'> | |||
%% Kamera Calibrierung - Von Matlab Autogeneriert und angepasst. | |||
if exist(Paras,'file') % Checkt Camera Parameter als Datei vorliegen | |||
load(Paras) % Lädt Camera Parameter | |||
else | |||
cd(Folder) % Ordner Öffnen | |||
FileNames = dir('*.JPG'); % Ordner nach Bilder durchsuchen | |||
% Define images to process | |||
imageFileNames = {FileNames.name}; | |||
% Detect checkerboards in images | |||
[imagePoints, boardSize, imagesUsed] = detectCheckerboardPoints(imageFileNames); | |||
imageFileNames = imageFileNames(imagesUsed); | |||
% Read the first image to obtain image size | |||
originalImage = imread(imageFileNames{1}); | |||
[mrows, ncols, ~] = size(originalImage); %Farbtiefe wird nicht benötigt | |||
worldPoints = generateCheckerboardPoints(boardSize, squareSize); % Generate world coordinates of the corners of the squares | |||
% Calibrate the camera | |||
[cameraParams, imagesUsed, estimationErrors] = estimateCameraParameters(... | |||
imagePoints, worldPoints, ... | |||
'EstimateSkew', false, ... | |||
'EstimateTangentialDistortion', false, ... | |||
'NumRadialDistortionCoefficients', 2, ... | |||
'WorldUnits', 'millimeters', ... | |||
'InitialIntrinsicMatrix', [], ... | |||
'InitialRadialDistortion', [], ... | |||
'ImageSize', [mrows, ncols]); | |||
cd('..') % Zurück in den Hauptordner | |||
end | |||
</syntaxhighlight> | |||
=== 2. Transformieren Sie ein Objekt aus der Kameraperspektive in Weltkoordinaten. === | |||
Für diese Umsetzung wurde eine Toolbox von Matlab verwendet. Diese übernimmt die Transformation. | |||
<syntaxhighlight lang="matlab" line='line'> | |||
outputImage = transformImage(birdsEyeConfig, inputImage); | |||
</syntaxhighlight> | |||
Für eine Erfoglreiche Transformation muss das "birdsEyeConfig" mit Informationen gefüllt werden. | |||
Dafür wird die Ausrichtung und die Kamera Parameter benötigt. Dabei ist zu beachten das die Genauigkeit der Aufnahme stark von der Genauigkeit der Angaben richtet. Diese Parameter wurden mit den Sensoren eines Smartphones erfasst. | |||
<syntaxhighlight lang="matlab" line='line'> | |||
camHeight = 700; % Höhe der Kamera vom Boden aus in mm | |||
% Drehung der Kamera in Grad | |||
CamDegX = 70; % Pitch | |||
CamDegY = 3; % Roll | |||
CamDegZ = 0; % Yaw | |||
camIntrinsics = cameraIntrinsics( ... | |||
cameraParams.FocalLength, ... | |||
cameraParams.PrincipalPoint, ... | |||
cameraParams.ImageSize); | |||
sensor = monoCamera( ... | |||
camIntrinsics, ... | |||
camHeight, ... | |||
'Pitch', CamDegX, ... | |||
'Yaw', CamDegZ, ... | |||
'Roll', CamDegY); | |||
</syntaxhighlight> | |||
Es wurden auch Parameter für das Auszugebene Bild festgelegt. | |||
<syntaxhighlight lang="matlab" line='line'> | |||
% Welt Parameter | |||
xmin = 0; % Offset Hinten | |||
xmax = 2500; % Abstand Vorne | |||
ymin = -1500; % Linke Seite | |||
ymax = 1500; % Rechte Seite | |||
outView = [xmin, xmax, ymin, ymax]; %Äußere Parameter | |||
imageSize = [NaN, cameraParams.ImageSize(2)]; %Höhe nicht angegben damit die Bildverhältnisse Stimmen | |||
</syntaxhighlight> | |||
Abschließend wurden die Daten in das birdsEyeView Format gebracht. | |||
<syntaxhighlight lang="matlab" line='line'> | |||
birdsEyeConfig = birdsEyeView(sensor, outView, imageSize); | |||
</syntaxhighlight> | |||
=== 3. Stellen Sie die Objekte im Sichtfeld in der Draufsich metrisch dar. === | |||
Input Bild | |||
[[File:Input.jpg|Input Bild|250px]] | |||
Output Bild | |||
[[File:Output.jpg|Output Bild|250px]] | |||
=== 4. Schätzen Sie die Genauigkeit Ihres 3D-Sensors ab. === | |||
Dafür wurde eine Fliese auf dem Bild ausgemessen, diese ist genau 31 cm lang. Dazu wurde im Folgeden Bild ein Strich gezeichnet, welche | |||
=== 5. Wissenschaftliche Dokumentation als HSHL-Wiki Artikel === | |||
http://193.175.248.52/wiki/index.php?title=DSB18:_Inverse_Perspektiventransformation | |||
=== 6. Softwareentwicklung nach SDE Standard in SVN === | |||
https://svn.hshl.de/svn/DSB/trunk/User/SoSe2018/Michael Menke/ | |||
=== 7. Funktionsnachweis als YouTube-Video (vgl. [[Veranstaltungsregeln_DSB_SoSe2018|Veranstaltungsregeln]]) === | |||
Folgt. | |||
=== Sonstige Tätigkeiten === | |||
Versucht die alten Anforderungen umzusetzen. Diese Forderten eine Kamera Kalibrierung über ArucoMaker. | |||
== Weblinks == | == Weblinks == | ||
*[https://www.google.de/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0ahUKEwjQ65Wq2LLaAhVKJ1AKHd_HCRAQFggtMAA&url=http%3A%2F%2Fwww.mdpi.com%2F1424-8220%2F12%2F4%2F4431%2Fpdf&usg=AOvVaw125NrkR8PO9y_ro8JoSe1q A Vision Based Top-View Transformation Model for a Vehicle | *[https://www.google.de/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0ahUKEwjQ65Wq2LLaAhVKJ1AKHd_HCRAQFggtMAA&url=http%3A%2F%2Fwww.mdpi.com%2F1424-8220%2F12%2F4%2F4431%2Fpdf&usg=AOvVaw125NrkR8PO9y_ro8JoSe1q A Vision Based Top-View Transformation Model for a Vehicle | ||
Parking Assistant] | Parking Assistant] |
Version vom 25. Juni 2018, 09:10 Uhr
Autor:
Betreuer: Prof. Schneider
Motivation
Autonome Fahrzeuge benötigen eine virtuelle Rundumsicht.
Ziel
Die perspektivischen Daten einer Kamera sollen anhand intrinsischer und extrinsischer Parameter in eine Rundumsicht
Anforderungen
- Kalibrieren Sie die verwendete Kamera.
- Transformieren Sie ein Objekt aus der Kameraperspektive in Weltkoordinaten.
- Stellen Sie die Objekte im Sichtfeld in der Draufsich metrisch dar.
- Schätzen Sie die Genauigkeit Ihres 3D-Sensors ab.
- Wissenschaftliche Dokumentation als HSHL-Wiki Artikel
- Softwareentwicklung nach SDE Standard in SVN
- Funktionsnachweis als YouTube-Video (vgl. Veranstaltungsregeln)
Lösungen
1. Kalibrieren Sie die verwendete Kamera.
Es wurde die Matlab App "Camera Calibration" verwendet. Diese App ließt Bilder ein und überprüft ob diese ein Schachbrett Muster enthalten. Für eine gute Kalibrierung werden 20 bis 30 Bilder von Mathworks empfholen. Die Kalibrierungs Daten können dann in der App als Script gespeichert werden oder als Parameter, welcher Matlab dann einlesen kann.
Die Bilder für die Kalibrierung sind unter "https://svn.hshl.de/svn/DSB/trunk/User/SoSe2018/Michael Menke/Kalibrierung" gespeichert.
Die Parameter sind unter "https://svn.hshl.de/svn/DSB/trunk/User/SoSe2018/Michael Menke/cameraParams.mat" gespeichert.
Des Weiteren befindet sich in dem Hauptprogramm folgenden Code, welcher eine Kalibrierung durchführt, wenn keine "cameraParams.mat" vorliegt. Der Anfänglich von Matlab erzeugte Code enthielt keine Überprüfung ob die Parameter schon vorhanden ist und hatte eine feste Liste von Bild Dateien. Die Angepasste Version überprüft ob die Parameter schon vorhanden sind und ließt alle Bilder aus einem Ordner ein.
%% Kamera Calibrierung - Von Matlab Autogeneriert und angepasst.
if exist(Paras,'file') % Checkt Camera Parameter als Datei vorliegen
load(Paras) % Lädt Camera Parameter
else
cd(Folder) % Ordner Öffnen
FileNames = dir('*.JPG'); % Ordner nach Bilder durchsuchen
% Define images to process
imageFileNames = {FileNames.name};
% Detect checkerboards in images
[imagePoints, boardSize, imagesUsed] = detectCheckerboardPoints(imageFileNames);
imageFileNames = imageFileNames(imagesUsed);
% Read the first image to obtain image size
originalImage = imread(imageFileNames{1});
[mrows, ncols, ~] = size(originalImage); %Farbtiefe wird nicht benötigt
worldPoints = generateCheckerboardPoints(boardSize, squareSize); % Generate world coordinates of the corners of the squares
% Calibrate the camera
[cameraParams, imagesUsed, estimationErrors] = estimateCameraParameters(...
imagePoints, worldPoints, ...
'EstimateSkew', false, ...
'EstimateTangentialDistortion', false, ...
'NumRadialDistortionCoefficients', 2, ...
'WorldUnits', 'millimeters', ...
'InitialIntrinsicMatrix', [], ...
'InitialRadialDistortion', [], ...
'ImageSize', [mrows, ncols]);
cd('..') % Zurück in den Hauptordner
end
2. Transformieren Sie ein Objekt aus der Kameraperspektive in Weltkoordinaten.
Für diese Umsetzung wurde eine Toolbox von Matlab verwendet. Diese übernimmt die Transformation.
outputImage = transformImage(birdsEyeConfig, inputImage);
Für eine Erfoglreiche Transformation muss das "birdsEyeConfig" mit Informationen gefüllt werden.
Dafür wird die Ausrichtung und die Kamera Parameter benötigt. Dabei ist zu beachten das die Genauigkeit der Aufnahme stark von der Genauigkeit der Angaben richtet. Diese Parameter wurden mit den Sensoren eines Smartphones erfasst.
camHeight = 700; % Höhe der Kamera vom Boden aus in mm
% Drehung der Kamera in Grad
CamDegX = 70; % Pitch
CamDegY = 3; % Roll
CamDegZ = 0; % Yaw
camIntrinsics = cameraIntrinsics( ...
cameraParams.FocalLength, ...
cameraParams.PrincipalPoint, ...
cameraParams.ImageSize);
sensor = monoCamera( ...
camIntrinsics, ...
camHeight, ...
'Pitch', CamDegX, ...
'Yaw', CamDegZ, ...
'Roll', CamDegY);
Es wurden auch Parameter für das Auszugebene Bild festgelegt.
% Welt Parameter
xmin = 0; % Offset Hinten
xmax = 2500; % Abstand Vorne
ymin = -1500; % Linke Seite
ymax = 1500; % Rechte Seite
outView = [xmin, xmax, ymin, ymax]; %Äußere Parameter
imageSize = [NaN, cameraParams.ImageSize(2)]; %Höhe nicht angegben damit die Bildverhältnisse Stimmen
Abschließend wurden die Daten in das birdsEyeView Format gebracht.
birdsEyeConfig = birdsEyeView(sensor, outView, imageSize);
3. Stellen Sie die Objekte im Sichtfeld in der Draufsich metrisch dar.
Input Bild
Output Bild
4. Schätzen Sie die Genauigkeit Ihres 3D-Sensors ab.
Dafür wurde eine Fliese auf dem Bild ausgemessen, diese ist genau 31 cm lang. Dazu wurde im Folgeden Bild ein Strich gezeichnet, welche
5. Wissenschaftliche Dokumentation als HSHL-Wiki Artikel
http://193.175.248.52/wiki/index.php?title=DSB18:_Inverse_Perspektiventransformation
6. Softwareentwicklung nach SDE Standard in SVN
https://svn.hshl.de/svn/DSB/trunk/User/SoSe2018/Michael Menke/
7. Funktionsnachweis als YouTube-Video (vgl. Veranstaltungsregeln)
Folgt.
Sonstige Tätigkeiten
Versucht die alten Anforderungen umzusetzen. Diese Forderten eine Kamera Kalibrierung über ArucoMaker.
Weblinks
- [https://www.google.de/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0ahUKEwjQ65Wq2LLaAhVKJ1AKHd_HCRAQFggtMAA&url=http%3A%2F%2Fwww.mdpi.com%2F1424-8220%2F12%2F4%2F4431%2Fpdf&usg=AOvVaw125NrkR8PO9y_ro8JoSe1q A Vision Based Top-View Transformation Model for a Vehicle
Parking Assistant]
- Camera Calibration and Inverse Perspective
- BirdEye - an Automatic Method for Inverse Perspective Transformation of Road Image without Calibration
BSD-Lizenzbedingung BSD-Lizenz
Copyright (c) 2014, Hochschule Hamm-Lippstadt, Dep. Lip. 1, Prof. Schneider
Hochschule Hamm-Lippstadt. Alle Rechte vorbehalten.
→ zurück zum Hauptartikel: Digitale Signal- und Bildverarbeitung SoSe2018