SoSe24 - Praktikum Systementwurf - Inverse Perspektiventransformation (IPT): Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
KKeine Bearbeitungszusammenfassung
(→‎Ergebnisse: Bild angepasst)
 
(30 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
[[Datei:GeradeInKurve IPT.gif|gerahmt|rechts|Abbildung 1: GeradeInKurve in BirdeyeView Perspektive]]
{| class="wikitable"
{| class="wikitable"
|-
|-
Zeile 10: Zeile 9:
| '''Lernzielkontrolle 3:'''  || 04.07.2024
| '''Lernzielkontrolle 3:'''  || 04.07.2024
|}
|}
 
[[Datei:GeradeInKurve IPT Gif.gif|300px|thumb|rechts|Abbildung 1: GeradeInKurve in BirdeyeView Perspektive]]
== Einleitung ==
== Einleitung ==
In diesem Wikiartikel wird dargestellt, wie wir eine Inverse Perspektiventransformation (IPT) auf ein Bild und ein Video angewendet haben. Die angewendete IPT war eine sogenannte Bird's Eye View-Transformation. Diese Technik bietet eine unverzerrte Draufsicht, die die Erkennung und Verfolgung von Fahrspuren erheblich erleichtert, da die Linien parallel und gleichmäßig erscheinen.
In diesem Wikiartikel wird dargestellt, wie wir eine Inverse Perspektiventransformation (IPT) auf ein Bild und ein Video angewendet haben (siehe Abbildung 1). Die angewendete IPT war eine sogenannte Bird's Eye View-Transformation. Diese Technik bietet eine unverzerrte Draufsicht, die die Erkennung und Verfolgung von Fahrspuren erheblich erleichtert, da die Linien parallel und gleichmäßig erscheinen.


== Kalibrierung der Kamera ==
== Kalibrierung der Kamera für Wagen 1==
[[Datei:Original und EntzerrtesBild.jpg|800px|thumb|right|Abbildung 2: Original und entzerrtes Bild]]
[[Datei:Original und EntzerrtesBild.jpg|800px|thumb|right|Abbildung 2: Original und entzerrtes Bild]]


Die Ergebnisse der Entzerrung sehen Sie in Abbildung 2 und Abbildung 3. <br>
Für die Erstellung des kalibrierten Bildes wurden folgende von der App erstellten Parameter verwendet:
Für die Erstellung des kalibrierten Bildes wurden folgende von der App erstellten Parameter verwendet:
{| class="wikitable"
{| class="wikitable"
Zeile 23: Zeile 23:
! Parameter !! Wert  
! Parameter !! Wert  
|-
|-
| FocalLength || [472.3687, 473.2485]
| Brennweite (FocalLength) || [472.3687, 473.2485]
|-
|-
| ImageSize  || [478, 752]
| Bildgröße (ImageSize) || [478, 752]
|-
|-
| RadialDistortion  || [-0.3437, 0.1698, -0.0485]
| Radiale Verzerrung (RadialDistortion) || [-0.3437, 0.1698, -0.0485]
|-
|-
| TangentialDistortion  || [0.0016, -0.0018]  
| Tangentiale Verzerrung (TangentialDistortion) || [0.0016, -0.0018]  
|-
|-
| PrincipalPoint  || [386.103, 228.4705]
| Hauptpunkt (PrincipalPoint) || [386.103, 228.4705]
|-
|-
| MeanReprojectionError || 0.1542  
| Mittlerer Reprojektionsfehler (MeanReprojectionError) || 0.1542  
|}
|}


Zeile 51: Zeile 51:
| Fahrzeugbreite  || 20cm
| Fahrzeugbreite  || 20cm
|}
|}
<br clear="all">
'''Ergebnissdarstellung nach Entzerrung'''
[[Datei:Ergebnissdarstellung nach Entzerrung.png|1000px|mini|links|Abbildung 3: Ergebnissdarstellung nach Entzerrung]]
<br clear="all">


== Inversen Perspektiventransformation ==
== Inversen Perspektiventransformation ==
Beschreibung der MATLAB Funktion(en), Eingangs- und Ausgangsparameter
 
 
{| class="wikitable"
|+ Tabelle 3: Beschreibung der MATLAB Funktion(en), Eingangs- und Ausgangsparameter
|-
! Name der Funktion !! Eingangsparameter !! Ausgangsparameter
|-
| cameraParameters ||
*IntrinsicMatrix: Eine 3x3-Matrix, die die intrinsischen Kameraparameter darstellt.
*RadialDistortion: Ein Vektor, der die radialen Verzerrungskoeffizienten enthält.
*TangentialDistortion: Ein Vektor, der die tangentialen Verzerrungskoeffizienten enthält.
*ImageSize: Eine zweielementige Vektor, die die Größe des Bildes in Pixeln (Breite, Höhe) angibt.
|| Ein cameraParameters-Objekt, das die Kalibrierungsparameter der Kamera enthält.
|-
| cameraIntrinsics ||
*FocalLength: Ein zweielementiger Vektor [fx, fy], der die Brennweiten in Pixeln angibt.
*PrincipalPoint: Ein zweielementiger Vektor [cx, cy], der den Hauptpunkt in Pixeln angibt.
*ImageSize: Eine zweielementige Vektor, die die Größe des Bildes in Pixeln (Breite, Höhe) angibt.
|| Ein cameraIntrinsics-Objekt, das die intrinsischen Parameter der Kamera enthält.
|-
| monoCamera||
*cameraIntrinsics: Ein cameraIntrinsics-Objekt, das die intrinsischen Parameter der Kamera enthält.
*height: Die Höhe der Kamera über dem Boden (in Metern).
*pitch (optional): Der Neigungswinkel der Kamera in Grad.
|| Ein monoCamera-Objekt.
|-
| undistortImage||
*I: Das verzerrte Eingangsbild.
*cameraParams: Ein cameraParameters-Objekt, das die Verzerrungsparameter enthält.
|| J: Das entzerrte Bild.
|-
| im2bw||
*I: Das Eingangs-Graustufenbild.
*level (optional): Der Schwellenwert zum Binarisieren des Bildes. Werte zwischen 0 und 1.
|| BW: Das binäre Bild.
|-
| birdsEyeView||
*sensor: Ein monoCamera-Objekt.
*distAhead: Die Entfernung vor dem Fahrzeug in Metern.
*spaceToOneSide: Die Entfernung zu einer Seite des Fahrzeugs in Metern.
*bottomOffset: Der Abstand des unteren Randes des Bildes zur Kamera in Metern.
*outView (optional): Ein zweielementiger Vektor [width, height] für die Ausgabeansicht in Metern.
|| Ein birdsEyeView-Objekt.
|-
| transformImage||
*BEV: Ein birdsEyeView-Objekt.
*I: Das Eingangsbild.
|| J: Das transformierte Bild.
|-
| VideoReader||
*filename: Der Name der Videodatei.
|| Ein VideoReader-Objekt.
|-
| VideoWriter||
*filename: Der Name der zu schreibenden Videodatei.
*profile (optional): Das Profil für die Videokomprimierung (z.B. 'MPEG-4').
|| Ein VideoWriter-Objekt.
|-
| writeVideo||
*writerObj: Ein VideoWriter-Objekt.
*frame: Der Frame, der in die Datei geschrieben werden soll (kann ein Bild oder ein Array von Bildern sein).
|| Keine. Die Funktion schreibt die Daten in die Datei.
|}


== PAP ==
== PAP ==
Zeile 59: Zeile 127:
| <strong>Programmablaufplan&thinsp;</strong>
| <strong>Programmablaufplan&thinsp;</strong>
|-
|-
| [[Datei:StartInversePerspektivenTransformation_JB.png|600px|thumb|right|Abb. 10: PAP der Inverse Perspektiventransformation]]
| [[Datei:PAP StartInversePerspektivenTransformation.png|600px|thumb|right|Abb. 4: PAP der Inverse Perspektiventransformation]]
|}
|}


== Quelltext ==
== Quelltext ==
{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
| <strong>startInversePerspektivenTransformation.m&thinsp;</strong>
| <strong>Quelltext 1: startInversePerspektivenTransformation.m &thinsp;</strong>
|-
|-
|<source line lang="matlab" style="font-size:medium">
|<source line lang="matlab" style="font-size:small">
%****************************************************************
%****************************************************************
%                  Hochschule Hamm-Lippstadt                  *
%                  Hochschule Hamm-Lippstadt                  *
Zeile 75: Zeile 143:
%                                                              *
%                                                              *
% Funktion        : Inverse Perspektiventransformation          *
% Funktion        : Inverse Perspektiventransformation          *
%                  Entzerrung + IPT + Binarisierung für        *
%                  ein Bild und Video                          *
%                                                              *
%                                                              *
% Implementation  : MATLAB 2023a                                *
% Implementation  : MATLAB 2023a                                *
Zeile 86: Zeile 156:
% Bemerkung      :                                            *
% Bemerkung      :                                            *
%                                                              *
%                                                              *
% Letzte Änderung : 20.06.2024                                  *
% Letzte Änderung : 03.07.2024                                  *
%                                                              *
%                                                              *
%***************************************************************/
%***************************************************************/
Zeile 97: Zeile 167:
addpath 'D:\SVN\SDE_Praktikum_trunk\_Semesterordner\SS2024\Team_1_Block_Janzen\Termin_9\Aufgabe_9_1'
addpath 'D:\SVN\SDE_Praktikum_trunk\_Semesterordner\SS2024\Team_1_Block_Janzen\Termin_9\Aufgabe_9_1'
addpath 'D:\SVN\SDE_Praktikum_trunk\_Semesterordner\SS2024\Team_1_Block_Janzen\Termin_9\Bilder'
addpath 'D:\SVN\SDE_Praktikum_trunk\_Semesterordner\SS2024\Team_1_Block_Janzen\Termin_9\Bilder'
addpath 'D:\SVN\SDE_Praktikum_trunk\_Semesterordner\SS2024\Team_1_Block_Janzen\Termin_9\Aufgabe_9_4\Bilder_Video_Gif'
addpath 'D:\SVN\SDE_Praktikum_trunk\Daten\Vision'
load('cameraParams.mat')
load('cameraParams.mat')
 
% matFileName = 'cameraParams.mat';


%% Bild laden
%% Bild laden
inputImage = imread('Geradeaus.png');
verzertesBild = imread('Geradeaus.png');
%inputImage = imread('Linkskurve.png');
%inputImage = imread('Linkskurve.png');


%% Einstellen der notwendigen Parameter
%% Einladen der benötigten Parameter für die k-Matrix zur Entzerrung
% Focal Length
fc = [cameraParams2.FocalLength(1); cameraParams2.FocalLength(2)];
fcx = fc(1);
fcy = fc(2);
 
% Principal point
cc = [cameraParams2.PrincipalPoint(1); cameraParams2.PrincipalPoint(2)];
ccx = cc(1);
ccy = cc(2);
 
% Scherung
s = 0; % Sensor parallel zur Linse -> s = 0;
 
% Aufstellend der k-Matrix
K = [fcx s ccx; 0 fcy ccy; 0 0 1];
 
% Verzerrungskoeffizienten
% 'RadialDistortion', kc(1:3) in cameraParams2
% 'TangentialDistortion', kc(4:5)) in cameraParams2
kc = [cameraParams2.RadialDistortion(1), cameraParams2.RadialDistortion(2), cameraParams2.RadialDistortion(3), cameraParams2.TangentialDistortion(1), cameraParams2.TangentialDistortion(2)]; % Keine Verzerrungskorrektur
 
% Definieren der Kamera-Parameterstruktur
KameraParameter = cameraParameters('IntrinsicMatrix', K', 'RadialDistortion', kc(1:3), 'TangentialDistortion', kc(4:5));
 
%% IPT für ein Bild mit Entzerrung
% Intrinsischen Parameer
% Intrinsischen Parameer
camIntrinsics = cameraIntrinsics(cameraParams2.FocalLength,cameraParams2.PrincipalPoint,cameraParams2.ImageSize);
camIntrinsics = cameraIntrinsics(cameraParams2.FocalLength,cameraParams2.PrincipalPoint,cameraParams2.ImageSize);
Zeile 116: Zeile 213:
distAhead = 3;
distAhead = 3;
spaceToOneSide = 0.8;
spaceToOneSide = 0.8;
bottomOffset = 0.275;
bottomOffset = 0.7;
outView = [bottomOffset,distAhead,-spaceToOneSide,spaceToOneSide];
outView = [bottomOffset,distAhead,-spaceToOneSide,spaceToOneSide];


% IPT am Bild anwenden
% Entzerrung des Bildes
outImageSize = [NaN,250];
entzerrtesBild = undistortImage(verzertesBild, KameraParameter);
 
% Bild in Schwarz-Weiß umwandeln
BWBild = im2bw(entzerrtesBild);
 
% Einstellungen für die IPT
outImageSize = [NaN,1000];
birdsEyeConfig = birdsEyeView(sensor, outView, outImageSize);
birdsEyeConfig = birdsEyeView(sensor, outView, outImageSize);
outputImage = transformImage(birdsEyeConfig, inputImage);


%% Darstellung des Bildes in BirdeyeView
% Anwenden der IPT am Bild
outputImage = transformImage(birdsEyeConfig, BWBild);
 
% Darstellung des Bildes in BirdeyeView
figure
figure
imshow(outputImage);
imshow(outputImage);
title('Geradeaus in BirdeyeView')
title('Geradeaus in BirdeyeView')


 
%% Video entzerren und transformieren in eine BirdEyeView
%% Video laden
% Video laden
video = VideoReader('GeradeInKurve.mp4');
video = VideoReader('GeradeInKurve.mp4');


% Video Writer initialisieren
% Video Writer initialisieren
outputVideoFile = 'GeradeInKurve_IPT.mp4'; % Speichername des Bearbeiteten Videos festlegen
outputVideoFile = 'GeradeInKurveNeu_IPT.mp4'; % Speichername des Bearbeiteten Videos festlegen
outputVideo = VideoWriter(outputVideoFile, 'MPEG-4'); % Datentyp des Neuen Videos festlegen
outputVideo = VideoWriter(outputVideoFile, 'MPEG-4'); % Datentyp des Neuen Videos festlegen
outputVideo.FrameRate = video.FrameRate; % Festlegen der gleichen Bildrate wie das Originalvideo
outputVideo.FrameRate = video.FrameRate; % Festlegen der gleichen Bildrate wie das Originalvideo
Zeile 144: Zeile 249:
      
      
     % Frame bearbeiten
     % Frame bearbeiten
     processedFrame = transformImage(birdsEyeConfig, frame); % Frame mit der IPT transformeieren
     processedFrame = undistortImage(frame, KameraParameter); % Frame entzerren
     processedFrame = rgb2gray(processedFrame); % Bild in ein Graubild umwandeln
     processedFrame = transformImage(birdsEyeConfig, processedFrame); % Frame mit der IPT transformeieren
     processedFrame = imbinarize(processedFrame); % Bild in ein Binärbild umwandeln
     processedFrame = im2bw(processedFrame); %   In Schwarz-Weiß Bild umwandeln


     % Bearbeitete Frames in das neue Video schreiben
     % Bearbeitete Frames in das neue Video schreiben
Zeile 159: Zeile 264:


== Ergebnisse ==
== Ergebnisse ==
[[Datei:Geradeaus.png|500px|mini|links|Abbildung 3: Original Bild von Geradeaus]]
In Abbildung 5 sehen Sie das Originalbild unverzerrt. <br>
[[Datei:Geradeaus IPT.jpg|170px|mini|zentriert|Abbildung 4: In BirdeyeView Umgewandeltes Bild ]]  
In Abbildung 6 sehen sie das Originalbild entzerrt und in die BirdEyeView transformiert.
[[Datei:Geradeaus.png|500px|mini|links|Abbildung 5: Original Bild von Geradeaus]]
[[Datei:Geradeaus IPT.jpg|600px|mini|zentriert|Abbildung 6: In BirdeyeView Umgewandeltes Bild ]]  
<br clear="all">
<br clear="all">


'''Links zu den Arbeitsergebnissen in SVN fehlen!!'''
SVN-Link zu den Ergebnissen:
<code>https://svn.hshl.de/svn/MTR_SDE_Praktikum/trunk/_Semesterordner/SS2024/Team_1_Block_Janz</code>.


== Analyse ==
== Analyse ==
{| class="wikitable"
{| class="wikitable"
|+ Tabelle 3: Problembeschreibung
|+ Tabelle 4: Problembeschreibung
|-
|-
! Beschreibung !! Das Problem ist..  
! Beschreibung !! Das Problem ist.. !! Das Problem ist nicht...
|-
|-
| Was genau ist das Problem? || Neben der Fahrbahn werden auch Störelemente aufgenommen  
| Was genau ist das Problem? || Neben der Fahrbahn werden auch Störelemente aufgenommen || Die Erstellung von Bildern oder Videos
|-
|-
| Wo tritt das Problem auf? || Die Kamera zeichnet die Störquellen mit auf  
| Wo tritt das Problem auf? || Die Kamera zeichnet die Störquellen mit auf. In dem zur Verfügung gestellten Video "GeradeInKurve" || Die Kamera
|-
|-
| Wie zeigt sich das Problem?|| Zusätzliche Kanten und Muster werden in den transformierten Bildern angezeigt  
| Wie zeigt sich das Problem?|| Zusätzliche Kanten und Muster werden in den transformierten Bildern angezeigt || der gewählte Bereich von Interesse (ROI)
|-
|-
| Wann tritt das Problem auf?|| Bei jedem aufgenommenen Bild
| Wann tritt das Problem auf?|| Wenn eine externe Lichtquelle, wie die Sonne, auf die Fahrbahn scheint || Die Fahrbahn
|-
|-
| Warum ist es ein Problem?|| Bei der Weiterarbeitung und Verwendung kann dies zu Fehl Schlüssen führen
| Warum ist es ein Problem?|| Bei der Weiterarbeitung können ungewollte Kanten erkannt werden || Die Kantenerkennung
|}
|}
{| class="wikitable"
{| class="wikitable"
|+ Tabelle 4: Ursachenanalyse
|+ Tabelle 5: Ursachenanalyse
|-
|-
! Nr. !! Beschreibung  
! Nr. !! Beschreibung  
Zeile 193: Zeile 301:
|}
|}
{| class="wikitable"
{| class="wikitable"
|+ Tabelle 5: Maßnahmen zur Beseitigung der identifizierten Ursache(n)
|+ Tabelle 6: Maßnahmen zur Beseitigung der identifizierten Ursache(n)
|-
|-
! Nr. !! Maßnahme !! Verantwortung !! Termin !! Status
! Nr. !! Maßnahme !! Verantwortung !! Termin !! Status
Zeile 207: Zeile 315:
== Zusammenfassung ==
== Zusammenfassung ==
In diesem Praktikum zum Systementwurf und zur inversen Perspektiventransformation (IPT) wird die Kalibrierung der Kamera, die Transformation von Bildern und Videos in eine Vogelperspektive sowie die Analyse der Ergebnisse beschrieben. Die Kalibrierung der Kamera umfasst die Ermittlung intrinsischer und extrinsischer Parameter. Durch die Anwendung der IPT werden Bilder entzerrt, um die Verfolgung von Fahrspuren zu erleichtern. Die Analyse identifiziert Probleme wie Störelemente in Bildern und schlägt Maßnahmen zur Verbesserung der Bildqualität vor. Die Bearbeitung und Transformation von Videomaterial wird ebenfalls detailliert erläutert.
In diesem Praktikum zum Systementwurf und zur inversen Perspektiventransformation (IPT) wird die Kalibrierung der Kamera, die Transformation von Bildern und Videos in eine Vogelperspektive sowie die Analyse der Ergebnisse beschrieben. Die Kalibrierung der Kamera umfasst die Ermittlung intrinsischer und extrinsischer Parameter. Durch die Anwendung der IPT werden Bilder entzerrt, um die Verfolgung von Fahrspuren zu erleichtern. Die Analyse identifiziert Probleme wie Störelemente in Bildern und schlägt Maßnahmen zur Verbesserung der Bildqualität vor. Die Bearbeitung und Transformation von Videomaterial wird ebenfalls detailliert erläutert.
'''Diskussion der Ergebnisse'''
- Entzerrung der Kamerabilder hat gut funktioniert
- Inverse Perspektiven Transformation hat gut Funktioniert.
- Störelemente konnten nicht durch Color Threshholder entfernt werden.
'''Lessons Learned'''
- Umgang mit Matlab Apps (Camera Calibrator und Color Threshholder)
- Bestimmung der intrinischen und extrinischen Kameraparameter
- Entzerrung von Bildern und Videos in Matlab
- Anwendung der Inverse Perspektiven Transformation auf Bilder und Videos in Matlab


== Beantwortung der Lernzielkontrollfragen ==
== Beantwortung der Lernzielkontrollfragen ==
===Wofür werden die Kamerakalibrierparameter verwendet?===
===Wofür werden die Kamerakalibrierparameter verwendet?===
Kamerakalibrierparameter werden verwendet, um die Verzerrungen einer Kamera zu korrigieren. Diese Parameter beinhalten sowohl intrinsische Parameter (wie Brennweite und optischer Mittelpunkt) als auch extrinsische Parameter (wie Rotation und Translation der Kamera im Raum).
Kamerakalibrierparameter werden verwendet, um die Verzerrungen einer Kamera zu korrigieren. Folgende Parameter sind notwendig: <br>
*Fokuslänge <br>
*Radiale Verzerrung <br>
*Tangentiale Verzerrung <br>
*Mittlerer Reprojektionsfehler <br>
 
Nach Ermittlung dieser Parameter kann eine K-Matrix aufgestellt werden, mithilfe welcher das Kamerabild entzerrt werden kann. Nach der Entzerrung sollte das Bild realitätsnah sein.


===Was ist ein Region-of-Interest (ROI)? Wie wird dieser gewählt?===
===Was ist ein Region-of-Interest (ROI)? Wie wird dieser gewählt?===
Zeile 216: Zeile 348:


===Wie führt man eine effektive Binarisierung durch?===
===Wie führt man eine effektive Binarisierung durch?===
Um eine effektive Binarisierung durchzuführen muss das Bild erst in ein Graubild umgewandelt werden. Um das Graubild in ein Binärbild umzuwandeln stellt Matlab die Funktion "imbinarize" zur Verfügung.
Die Biniarisierung ist ein Verfahren, bei dem ein Bild in zwei Farben (normalerweise schwarz und weiß) umgewandelt wird, basierend auf einem bestimmten Schwellenwert (Threshold). Es ist ein grundlegender Schritt in der Bildverarbeitung, insbesondere für die Segmentierung. Der Threshold sollte so gewählt werden, sodass nur die gewünschten Kanten und Objekte im Biniarisierten Bild erkennbar sind. Die Matlab Funktion, welche wir hier für verwendet haben ist die im2bw Funktion.
Mithilfe dieser Funktion, welche das Graubild als Eingang benötigt, können Bilder in Binärbilder umgewandelt werden.


===Welche Fehler zeigen sich im Binärbild? Wie lassen sich diese beheben?===
===Welche Fehler zeigen sich im Binärbild? Wie lassen sich diese beheben?===
Typische Fehler im Binärbild umfassen Rauschen, unvollständige Segmentierung und fehlerhafte Kanten. Diese lassen sich durch Vorverarbeitungsschritte wie Filterung (z.B. Median- oder Gauss-Filter) beheben.
Fehler die bei Binärbildern auftreten sind häufig fehlerhaft detektierte Kanten. Diese können bei Möglichkeit behoben werden, indem aus dem Eingangsbild die ungewünschten Farben ausgeschlossen werden. Dies ist zum Beispiel mit der Matlab App: Color Tresholder möglich.  
 
----
----
→ zurück zum Hauptartikel: [[Praktikum_SDE|Praktikum SDE]] | [[SDE-Team 2024/25]] | [[SoSe24_-_Praktikum_Systementwurf_-_Lernzielkontrolle_3|Lernzielkontrolle 3]]
→ zurück zum Hauptartikel: [[Praktikum_SDE|Praktikum SDE]] | [[SDE-Team 2024/25]] | [[SoSe24_-_Praktikum_Systementwurf_-_Lernzielkontrolle_3|Lernzielkontrolle 3]]

Aktuelle Version vom 4. Juli 2024, 06:54 Uhr

Autoren: Daniel Block, Paul Janzen
Thema: Inverse Perspektiventransformation (IPT)
Workshoptermin 9: 20.06.2024
Lernzielkontrolle 3: 04.07.2024
Abbildung 1: GeradeInKurve in BirdeyeView Perspektive

Einleitung

In diesem Wikiartikel wird dargestellt, wie wir eine Inverse Perspektiventransformation (IPT) auf ein Bild und ein Video angewendet haben (siehe Abbildung 1). Die angewendete IPT war eine sogenannte Bird's Eye View-Transformation. Diese Technik bietet eine unverzerrte Draufsicht, die die Erkennung und Verfolgung von Fahrspuren erheblich erleichtert, da die Linien parallel und gleichmäßig erscheinen.

Kalibrierung der Kamera für Wagen 1

Abbildung 2: Original und entzerrtes Bild

Die Ergebnisse der Entzerrung sehen Sie in Abbildung 2 und Abbildung 3.
Für die Erstellung des kalibrierten Bildes wurden folgende von der App erstellten Parameter verwendet:

Tabelle 1: Erzeugte Parameter der Matlab Calibrator App
Parameter Wert
Brennweite (FocalLength) [472.3687, 473.2485]
Bildgröße (ImageSize) [478, 752]
Radiale Verzerrung (RadialDistortion) [-0.3437, 0.1698, -0.0485]
Tangentiale Verzerrung (TangentialDistortion) [0.0016, -0.0018]
Hauptpunkt (PrincipalPoint) [386.103, 228.4705]
Mittlerer Reprojektionsfehler (MeanReprojectionError) 0.1542
Tabelle 2: Extrinsische Kameraparameter
Parameter Wert
Kameraneigung 10°
Kamerahöhe über Boden 27,5cm
Fahrzeugfront bis Kamera 27cm
Fahrzeuglänge 41cm
Fahrzeugbreite 20cm


Ergebnissdarstellung nach Entzerrung

Abbildung 3: Ergebnissdarstellung nach Entzerrung


Inversen Perspektiventransformation

Tabelle 3: Beschreibung der MATLAB Funktion(en), Eingangs- und Ausgangsparameter
Name der Funktion Eingangsparameter Ausgangsparameter
cameraParameters
  • IntrinsicMatrix: Eine 3x3-Matrix, die die intrinsischen Kameraparameter darstellt.
  • RadialDistortion: Ein Vektor, der die radialen Verzerrungskoeffizienten enthält.
  • TangentialDistortion: Ein Vektor, der die tangentialen Verzerrungskoeffizienten enthält.
  • ImageSize: Eine zweielementige Vektor, die die Größe des Bildes in Pixeln (Breite, Höhe) angibt.
Ein cameraParameters-Objekt, das die Kalibrierungsparameter der Kamera enthält.
cameraIntrinsics
  • FocalLength: Ein zweielementiger Vektor [fx, fy], der die Brennweiten in Pixeln angibt.
  • PrincipalPoint: Ein zweielementiger Vektor [cx, cy], der den Hauptpunkt in Pixeln angibt.
  • ImageSize: Eine zweielementige Vektor, die die Größe des Bildes in Pixeln (Breite, Höhe) angibt.
Ein cameraIntrinsics-Objekt, das die intrinsischen Parameter der Kamera enthält.
monoCamera
  • cameraIntrinsics: Ein cameraIntrinsics-Objekt, das die intrinsischen Parameter der Kamera enthält.
  • height: Die Höhe der Kamera über dem Boden (in Metern).
  • pitch (optional): Der Neigungswinkel der Kamera in Grad.
Ein monoCamera-Objekt.
undistortImage
  • I: Das verzerrte Eingangsbild.
  • cameraParams: Ein cameraParameters-Objekt, das die Verzerrungsparameter enthält.
J: Das entzerrte Bild.
im2bw
  • I: Das Eingangs-Graustufenbild.
  • level (optional): Der Schwellenwert zum Binarisieren des Bildes. Werte zwischen 0 und 1.
BW: Das binäre Bild.
birdsEyeView
  • sensor: Ein monoCamera-Objekt.
  • distAhead: Die Entfernung vor dem Fahrzeug in Metern.
  • spaceToOneSide: Die Entfernung zu einer Seite des Fahrzeugs in Metern.
  • bottomOffset: Der Abstand des unteren Randes des Bildes zur Kamera in Metern.
  • outView (optional): Ein zweielementiger Vektor [width, height] für die Ausgabeansicht in Metern.
Ein birdsEyeView-Objekt.
transformImage
  • BEV: Ein birdsEyeView-Objekt.
  • I: Das Eingangsbild.
J: Das transformierte Bild.
VideoReader
  • filename: Der Name der Videodatei.
Ein VideoReader-Objekt.
VideoWriter
  • filename: Der Name der zu schreibenden Videodatei.
  • profile (optional): Das Profil für die Videokomprimierung (z.B. 'MPEG-4').
Ein VideoWriter-Objekt.
writeVideo
  • writerObj: Ein VideoWriter-Objekt.
  • frame: Der Frame, der in die Datei geschrieben werden soll (kann ein Bild oder ein Array von Bildern sein).
Keine. Die Funktion schreibt die Daten in die Datei.

PAP

Quelltext

Ergebnisse

In Abbildung 5 sehen Sie das Originalbild unverzerrt.
In Abbildung 6 sehen sie das Originalbild entzerrt und in die BirdEyeView transformiert.

Abbildung 5: Original Bild von Geradeaus
Abbildung 6: In BirdeyeView Umgewandeltes Bild


SVN-Link zu den Ergebnissen: https://svn.hshl.de/svn/MTR_SDE_Praktikum/trunk/_Semesterordner/SS2024/Team_1_Block_Janz.

Analyse

Tabelle 4: Problembeschreibung
Beschreibung Das Problem ist.. Das Problem ist nicht...
Was genau ist das Problem? Neben der Fahrbahn werden auch Störelemente aufgenommen Die Erstellung von Bildern oder Videos
Wo tritt das Problem auf? Die Kamera zeichnet die Störquellen mit auf. In dem zur Verfügung gestellten Video "GeradeInKurve" Die Kamera
Wie zeigt sich das Problem? Zusätzliche Kanten und Muster werden in den transformierten Bildern angezeigt der gewählte Bereich von Interesse (ROI)
Wann tritt das Problem auf? Wenn eine externe Lichtquelle, wie die Sonne, auf die Fahrbahn scheint Die Fahrbahn
Warum ist es ein Problem? Bei der Weiterarbeitung können ungewollte Kanten erkannt werden Die Kantenerkennung
Tabelle 5: Ursachenanalyse
Nr. Beschreibung
1 Licht Empfindlichkeit der Kamera ist zu hoch eingestellt
2 Ungünstiger Lichteinfall zur Bildaufnahme
3 Objekte neben der Fahrbahn
Tabelle 6: Maßnahmen zur Beseitigung der identifizierten Ursache(n)
Nr. Maßnahme Verantwortung Termin Status
1 Auseinandersetzen mit den Kamera Einstellungen Block, Janzen 04.07.2024
2 Abdunkeln der Fenster Block, Janzen 04.07.2024
3 Bewegliche Objekte aus der Kamerasicht entfernen. Nicht bewegliche Objekte abdecken Block, Janzen 04.07.2024

Hinweis: Die Maßnahmen müssen nicht umgesetzt werden.

Zusammenfassung

In diesem Praktikum zum Systementwurf und zur inversen Perspektiventransformation (IPT) wird die Kalibrierung der Kamera, die Transformation von Bildern und Videos in eine Vogelperspektive sowie die Analyse der Ergebnisse beschrieben. Die Kalibrierung der Kamera umfasst die Ermittlung intrinsischer und extrinsischer Parameter. Durch die Anwendung der IPT werden Bilder entzerrt, um die Verfolgung von Fahrspuren zu erleichtern. Die Analyse identifiziert Probleme wie Störelemente in Bildern und schlägt Maßnahmen zur Verbesserung der Bildqualität vor. Die Bearbeitung und Transformation von Videomaterial wird ebenfalls detailliert erläutert.

Diskussion der Ergebnisse

- Entzerrung der Kamerabilder hat gut funktioniert

- Inverse Perspektiven Transformation hat gut Funktioniert.

- Störelemente konnten nicht durch Color Threshholder entfernt werden.

Lessons Learned

- Umgang mit Matlab Apps (Camera Calibrator und Color Threshholder)

- Bestimmung der intrinischen und extrinischen Kameraparameter

- Entzerrung von Bildern und Videos in Matlab

- Anwendung der Inverse Perspektiven Transformation auf Bilder und Videos in Matlab

Beantwortung der Lernzielkontrollfragen

Wofür werden die Kamerakalibrierparameter verwendet?

Kamerakalibrierparameter werden verwendet, um die Verzerrungen einer Kamera zu korrigieren. Folgende Parameter sind notwendig:

  • Fokuslänge
  • Radiale Verzerrung
  • Tangentiale Verzerrung
  • Mittlerer Reprojektionsfehler

Nach Ermittlung dieser Parameter kann eine K-Matrix aufgestellt werden, mithilfe welcher das Kamerabild entzerrt werden kann. Nach der Entzerrung sollte das Bild realitätsnah sein.

Was ist ein Region-of-Interest (ROI)? Wie wird dieser gewählt?

Ein Region-of-Interest (ROI) ist ein spezifischer Bereich eines Bildes, der für die Analyse ausgewählt wird. Dieser wird basierend auf der Relevanz für die aktuelle Aufgabe gewählt, um Rechenressourcen zu sparen und die Analyse zu fokussieren. Kriterien können die Position von Objekten, Bewegungen oder andere relevante Merkmale sein.

Wie führt man eine effektive Binarisierung durch?

Die Biniarisierung ist ein Verfahren, bei dem ein Bild in zwei Farben (normalerweise schwarz und weiß) umgewandelt wird, basierend auf einem bestimmten Schwellenwert (Threshold). Es ist ein grundlegender Schritt in der Bildverarbeitung, insbesondere für die Segmentierung. Der Threshold sollte so gewählt werden, sodass nur die gewünschten Kanten und Objekte im Biniarisierten Bild erkennbar sind. Die Matlab Funktion, welche wir hier für verwendet haben ist die im2bw Funktion.

Welche Fehler zeigen sich im Binärbild? Wie lassen sich diese beheben?

Fehler die bei Binärbildern auftreten sind häufig fehlerhaft detektierte Kanten. Diese können bei Möglichkeit behoben werden, indem aus dem Eingangsbild die ungewünschten Farben ausgeschlossen werden. Dies ist zum Beispiel mit der Matlab App: Color Tresholder möglich.


→ zurück zum Hauptartikel: Praktikum SDE | SDE-Team 2024/25 | Lernzielkontrolle 3