SoSe24 - Praktikum Systementwurf - Inverse Perspektiventransformation (IPT)
Autoren: | Daniel Block, Paul Janzen |
Thema: | Inverse Perspektiventransformation (IPT) |
Workshoptermin 9: | 20.06.2024 |
Lernzielkontrolle 3: | 04.07.2024 |
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
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:
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 |
Parameter | Wert |
---|---|
Kameraneigung | 10° |
Kamerahöhe über Boden | 27,5cm |
Fahrzeugfront bis Kamera | 27cm |
Fahrzeuglänge | 41cm |
Fahrzeugbreite | 20cm |
Ergebnissdarstellung nach Entzerrung
Inversen Perspektiventransformation
Name der Funktion | Eingangsparameter | Ausgangsparameter |
---|---|---|
cameraParameters |
|
Ein cameraParameters-Objekt, das die Kalibrierungsparameter der Kamera enthält. |
cameraIntrinsics |
|
Ein cameraIntrinsics-Objekt, das die intrinsischen Parameter der Kamera enthält. |
monoCamera |
|
Ein monoCamera-Objekt. |
undistortImage |
|
J: Das entzerrte Bild. |
im2bw |
|
BW: Das binäre Bild. |
birdsEyeView |
|
Ein birdsEyeView-Objekt. |
transformImage |
|
J: Das transformierte Bild. |
VideoReader |
|
Ein VideoReader-Objekt. |
VideoWriter |
|
Ein VideoWriter-Objekt. |
writeVideo |
|
Keine. Die Funktion schreibt die Daten in die Datei. |
PAP
Programmablaufplan |
Quelltext
Quelltext 1: startInversePerspektivenTransformation.m |
%****************************************************************
% Hochschule Hamm-Lippstadt *
%****************************************************************
% Modul : SDE-Praktikum *
% *
% Datum : 20.06.2024 *
% *
% Funktion : Inverse Perspektiventransformation *
% Entzerrung + IPT + Binarisierung für *
% ein Bild und Video *
% *
% Implementation : MATLAB 2023a *
% *
% Req. Toolbox : Image Processing Toolbox *
% Computer Vision Toolbox *
% Automated Driving Toolbox *
% *
% Author : Paul Janzen, Daniel Block *
% *
% Bemerkung : *
% *
% Letzte Änderung : 03.07.2024 *
% *
%***************************************************************/
%% Matlab vorbereiten
clear all
close all
clc
%% Pfade einstellen und Parameter laden
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\Aufgabe_9_4\Bilder_Video_Gif'
addpath 'D:\SVN\SDE_Praktikum_trunk\Daten\Vision'
load('cameraParams.mat')
% matFileName = 'cameraParams.mat';
%% Bild laden
verzertesBild = imread('Geradeaus.png');
%inputImage = imread('Linkskurve.png');
%% 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
camIntrinsics = cameraIntrinsics(cameraParams2.FocalLength,cameraParams2.PrincipalPoint,cameraParams2.ImageSize);
% Extrinsischen Parameter
height = 0.275;
pitch = 10;
sensor = monoCamera(camIntrinsics,height,'Pitch',pitch);
% Einstellen der Sichtweite
distAhead = 3;
spaceToOneSide = 0.8;
bottomOffset = 0.7;
outView = [bottomOffset,distAhead,-spaceToOneSide,spaceToOneSide];
% Entzerrung des Bildes
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);
% Anwenden der IPT am Bild
outputImage = transformImage(birdsEyeConfig, BWBild);
% Darstellung des Bildes in BirdeyeView
figure
imshow(outputImage);
title('Geradeaus in BirdeyeView')
%% Video entzerren und transformieren in eine BirdEyeView
% Video laden
video = VideoReader('GeradeInKurve.mp4');
% Video Writer initialisieren
outputVideoFile = 'GeradeInKurveNeu_IPT.mp4'; % Speichername des Bearbeiteten Videos festlegen
outputVideo = VideoWriter(outputVideoFile, 'MPEG-4'); % Datentyp des Neuen Videos festlegen
outputVideo.FrameRate = video.FrameRate; % Festlegen der gleichen Bildrate wie das Originalvideo
open(outputVideo);
% Frames extrahieren, bearbeiten und in das neue Video schreiben
while hasFrame(video)
frame = readFrame(video); % Einlesen der einzelnen Frames
% Frame bearbeiten
processedFrame = undistortImage(frame, KameraParameter); % Frame entzerren
processedFrame = transformImage(birdsEyeConfig, processedFrame); % Frame mit der IPT transformeieren
processedFrame = im2bw(processedFrame); % In Schwarz-Weiß Bild umwandeln
% Bearbeitete Frames in das neue Video schreiben
writeVideo(outputVideo, im2uint8(processedFrame));
end
% Video Writer schließen
close(outputVideo);
|
Ergebnisse
In Abbildung 5 sehen Sie das Originalbild unverzerrt.
In Abbildung 6 sehen sie das Originalbild entzerrt und in die BirdEyeView transformiert.
SVN-Link zu den Ergebnissen:
https://svn.hshl.de/svn/MTR_SDE_Praktikum/trunk/_Semesterordner/SS2024/Team_1_Block_Janz
.
Analyse
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 |
Nr. | Beschreibung |
---|---|
1 | Licht Empfindlichkeit der Kamera ist zu hoch eingestellt |
2 | Ungünstiger Lichteinfall zur Bildaufnahme |
3 | Objekte neben der Fahrbahn |
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