DSB18: Inverse Perspektiventransformation: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
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 ==
*
== Literatur ==
*[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, 08:10 Uhr

Autor:
Betreuer: Prof. Schneider

IPM-Algorithmus

Motivation

Autonome Fahrzeuge benötigen eine virtuelle Rundumsicht.

Ziel

Die perspektivischen Daten einer Kamera sollen anhand intrinsischer und extrinsischer Parameter in eine Rundumsicht

Anforderungen

  1. Kalibrieren Sie die verwendete Kamera.
  2. Transformieren Sie ein Objekt aus der Kameraperspektive in Weltkoordinaten.
  3. Stellen Sie die Objekte im Sichtfeld in der Draufsich metrisch dar.
  4. Schätzen Sie die Genauigkeit Ihres 3D-Sensors ab.
  5. Wissenschaftliche Dokumentation als HSHL-Wiki Artikel
  6. Softwareentwicklung nach SDE Standard in SVN
  7. 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

Input Bild

Output 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

Parking Assistant]


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