SoSe24 - Praktikum Systementwurf - Segmentierung der Fahrbahnmarkierungen: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
 
(17 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
[[Datei:PolynomVorKalman.gif|600px|thumb|right|Abb. 1: Fügen Sie hier ein animiertes GIF Ihres Ergebnisses ein.]]
[[Datei:GeradeInKurve SegmenteGIF.gif|600px|thumb|right|Abb. 1: Das Ergebnis unseres Algorithmus.]]
{| class="wikitable"
{| class="wikitable"
|-
|-
Zeile 19: Zeile 19:
| <strong>Programmablaufplan des Hauptprogramms&thinsp;</strong>
| <strong>Programmablaufplan des Hauptprogramms&thinsp;</strong>
|-
|-
|[[Datei:SegmentiereFahrbahnmarkierungen Team2.png]]
|[[Datei:SegmentiereFahrbahnmarkierungen Team2.png|600px|thumb|Abb. 2: PAP des Hauptprogramms]]
|}
|}
{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
{| role="presentation" class="wikitable mw-collapsible mw-collapsed"
| <strong>Programmablaufplan des Algorithmus&thinsp;</strong>
| <strong>Programmablaufplan des Algorithmus&thinsp;</strong>
|-
|-
|[[Datei:MarkRoadway-Methode.png]]
|[[Datei:MarkRoadway-Methode.png|600px|thumb|Abb. 3: PAP der Methode markRoadway]]
|}
|}


Zeile 34: Zeile 34:
|-
|-
|<source line lang="matlab" style="font-size:medium">
|<source line lang="matlab" style="font-size:medium">
%****************************************************************
%                  Hochschule Hamm-Lippstadt                  *
%****************************************************************
% Modul           : segementiereFahrbahnmarkierungen.m          *
%                                                              *
% Datum          : 20.06.2024                                  *
%                                                              *
% Funktion        : Fahrbahnmarkierungserkennung für            *
%                  das CaroloCup Fahrzeug                      *
%                                                              *
% Implementation  : MATLAB 2019b                                *
%                                                              *
% Req. Toolbox    :                                            *
%                                                              *
% Author          : 2024 Philipp Sander, Dennis Fleer          *
%                                                              *
% Bemerkung      : Lernzielkontrolle 3 vom 04.07.24            *
%                                                              *
% Verwendete Datei: GeradeInKurve_IPT.mp4                      *
%                                                              *
% Letzte Änderung : 03.07.2024                                *
%                                                              *
%***************************************************************/
clear all,
clear all,
close all
close all
Zeile 57: Zeile 80:
      
      
     % Frame bearbeiten
     % Frame bearbeiten
    %grayFrame = rgb2gray(frame);
     processedFrame = markRoadway(frame, centerX, centerY, areaDistance);
     processedFrame = markRoadway(frame, centerX, centerY, areaDistance);
     % Bearbeitete Frames in das neue Video schreiben
     % Bearbeitete Frames in das neue Video schreiben
Zeile 66: Zeile 88:
close(outputVideo);
close(outputVideo);


 
%****************************************************************
% Modul           : segementiereFahrbahnmarkierungen.m          *
%                                                              *
% Datum          : 20.06.2024                                  *
%                                                              *
% Funktion        : Algorithmus zur Erkennung und Einfärbung    *
%                  der Fahrbahnmarkierung in einem Bild        *
%                                                              *
% Implementation  : MATLAB 2019b                                *
%                                                              *
% Req. Toolbox    :                                            *
%                                                              *
% Author          : 2024 Philipp Sander, Dennis Fleer          *
%                                                              *
% Bemerkung      : Lernzielkontrolle 3 vom 04.07.24            *
%                                                              *
% Verwendete Datei: GeradeInKurve_IPT.mp4                      *
%                                                              *
% Letzte Änderung : 03.07.2024                                *
%                                                              *
%***************************************************************/
function markedIm = markRoadway(image, centerX, centerY, areaDistance)
function markedIm = markRoadway(image, centerX, centerY, areaDistance)
    %Bild biniarisieren
     binIm = imbinarize(image);
     binIm = imbinarize(image);
    %Objekte detektieren
     CC = bwconncomp(binIm);
     CC = bwconncomp(binIm);
     imSize = CC.ImageSize;
     imSize = CC.ImageSize;
     n = CC.NumObjects;
     n = CC.NumObjects;
      
      
    %Detektionsebene (Region of Interest) definieren
     centerArea = [centerX-areaDistance, centerX; centerY-areaDistance, centerY+areaDistance];
     centerArea = [centerX-areaDistance, centerX; centerY-areaDistance, centerY+areaDistance];
      
      
Zeile 146: Zeile 191:
     end
     end
end
end
 
%****************************************************************
% Modul           : segementiereFahrbahnmarkierungen.m          *
%                                                              *
% Datum          : 20.06.2024                                  *
%                                                              *
% Funktion        : Überprüfung ob alle Pixel eines Objekts in  *
%                  der angegebenen Ebene liegt                *
%                                                              *
% Implementation  : MATLAB 2019b                                *
%                                                              *
% Req. Toolbox    :                                            *
%                                                              *
% Author          : 2024 Philipp Sander, Dennis Fleer          *
%                                                              *
% Bemerkung      : Lernzielkontrolle 3 vom 04.07.24            *
%                                                              *
% Verwendete Datei: GeradeInKurve_IPT.mp4                      *
%                                                              *
% Letzte Änderung : 03.07.2024                                  *
%                                                              *
%***************************************************************/
function result = inBetweenArea(area, objectX, objectY)
function result = inBetweenArea(area, objectX, objectY)
     resX = all(objectX >= area(1, 1) & objectX <= area(1, 2));
     resX = all(objectX >= area(1, 1) & objectX <= area(1, 2));
Zeile 153: Zeile 218:
     result = resX & resY;
     result = resX & resY;
end
end
 
%****************************************************************
% Modul           : segementiereFahrbahnmarkierungen.m          *
%                                                              *
% Datum          : 20.06.2024                                  *
%                                                              *
% Funktion        : Überprüfung ob ein Objekt in min. 1 Pixel  *
%                  in einer Ebene liegt                        *
%                                                              *
% Implementation  : MATLAB 2019b                                *
%                                                              *
% Req. Toolbox    :                                            *
%                                                              *
% Author          : 2024 Philipp Sander, Dennis Fleer          *
%                                                              *
% Bemerkung      : Lernzielkontrolle 3 vom 04.07.24            *
%                                                              *
% Verwendete Datei: GeradeInKurve_IPT.mp4                      *
%                                                              *
% Letzte Änderung : 03.07.2024                                  *
%                                                              *
%***************************************************************/
function result = touchingArea(area, objectX, objectY)
function result = touchingArea(area, objectX, objectY)
     resX = any(objectX >= area(1, 1) & objectX <= area(1, 2));
     resX = any(objectX >= area(1, 1) & objectX <= area(1, 2));
Zeile 160: Zeile 245:
     result = resX & resY;
     result = resX & resY;
end
end
 
%****************************************************************
% Modul           : segementiereFahrbahnmarkierungen.m          *
%                                                              *
% Datum          : 20.06.2024                                  *
%                                                              *
% Funktion        : Einzeichnen eines RGB Rechtecks in ein Bild *
%                                                              *
% Implementation  : MATLAB 2019b                                *
%                                                              *
% Req. Toolbox    :                                            *
%                                                              *
% Author          : 2024 Philipp Sander, Dennis Fleer          *
%                                                              *
% Bemerkung      : Lernzielkontrolle 3 vom 04.07.24            *
%                                                              *
%                                                              *
% Letzte Änderung : 03.07.2024                                *
%                                                              *
%***************************************************************/
function outImage = drawRectangle(image, x1, x2, y1, y2, r, g, b)  
function outImage = drawRectangle(image, x1, x2, y1, y2, r, g, b)  
     imSize = size(image);
     imSize = size(image);
Zeile 214: Zeile 317:


== Ergebnisse ==
== Ergebnisse ==
* Darstellung der Ergebnisse
* '''Darstellung der Ergebnisse'''
* '''Links zu den Arbeitsergebnissen'''
[[Datei:Unbearbeitete Fahrbahn.jpg|600px|]]
* ''Abb. 4: Das ist ein biniarisiertes Bild von einer Aufnahme der Kamera. Man sieht die Fahrbahnmarkierungen und eine weitere. ''
 
[[Datei:Erkannte fahrbahn.jpg|600px|]]
* ''Abb. 5: Das ist das bearbeitete Bild welches aus der Aufnahme durch den Algorithmus entstanden ist. ''
 
* '''Links zu den Arbeitsergebnissen :'''
[https://svn.hshl.de/svn/MTR_SDE_Praktikum/trunk/_Semesterordner/SS2024/Team_2_Sander_Fleer/Termin_9/9_5/ Link zu dem SVN-Ordner der Arbeitsergebnisse]
[https://svn.hshl.de/svn/MTR_SDE_Praktikum/trunk/_Semesterordner/SS2024/Team_2_Sander_Fleer/Termin_9/9_5/ Link zu dem SVN-Ordner der Arbeitsergebnisse]


Zeile 224: Zeile 333:
! Beschreibung !! Das Problem ist.. !! Das Problem ist nicht...
! Beschreibung !! Das Problem ist.. !! Das Problem ist nicht...
|-
|-
| Was genau ist das Problem? || Äußere Einflüsse wie Licht oder Objekte werfen Flecken ||  
| Was genau ist das Problem? || Äußere Einflüsse wie Licht oder Objekte werfen Flecken || Objekte innerhalb der Ebene erkennen
|-
|-
| Wo tritt das Problem auf? || Beispiel || Beispiel
| Wo tritt das Problem auf? || Am Rand der Detektionsebene || Außerhalb der Detektionsebene liegende Objekte
|-
|-
| Wie zeigt sich das Problem?|| Beispiel || Beispiel
| Wie zeigt sich das Problem?|| Er springt zwischen Objekten || Er bleibt konstant auf dem falschen Objekt
|-
|-
| Wann tritt das Problem auf?|| Beispiel || Beispiel
| Wann tritt das Problem auf?|| Bei der dynamischen Erkennung im Video || Bei der statischen Erkennung in einem Bild
|-
|-
| Warum ist es ein Problem?|| Beispiel || Beispiel
| Warum ist es ein Problem?|| Weil dadurch die erkannte Fahrbahn sich verändert || Außerhalb der Detektionsebene liegende Objekte werden als Fahrbahn identifiziert
|}
|}
{| class="wikitable"
{| class="wikitable"
Zeile 239: Zeile 348:
! Nr. !! Beschreibung  
! Nr. !! Beschreibung  
|-
|-
| 1 || Warum?
| 1 || Die Objekte die nicht zu 100% in der Ebene liegen
|-
| 2 || Kleine Objekte am unteren Rand werden zu einem Rauschen
|}
|}
{| class="wikitable"
{| class="wikitable"
|+ Tabelle 3: Maßnahmen zur Beseitigung der identifizierten Ursache(n)
|+ Tabelle 3: Maßnahmen zur Beseitigung der identifizierten Ursache(n)
|-
|-
! Nr. !! Maßnahme !! Verantwortung !! Termin !! Status
! Nr. !! Maßnahme !! Verantwortung !! Status
|-
| 1 ||  Teilüberschneidung der Objekte mit der Ebene zu lassen || Fleer, Sander ||  [[Datei:Status 0.jpg|ohne|20px]]
|-
|-
| 1 ||   || Max Mustermann || ||  [[Datei:Status 0.jpg|ohne|20px]]
| 2 || Objekte müssen eine Mindestgröße aufweisen || Fleer, Sander ||  [[Datei:Status 0.jpg|ohne|20px]]
|}
|}
Hinweis: Die Maßnahmen müssen nicht umgesetzt werden.
Hinweis: Die Maßnahmen müssen nicht umgesetzt werden.
Zeile 264: Zeile 377:


== Beantwortung der Lernzielkontrollfragen ==
== Beantwortung der Lernzielkontrollfragen ==
# Mit welchen Ansätzen lassen sich die Mittle- und rechte Fahrspur segmentieren? Wir haben den Einsatz einer Ebene gewählt, damit schließt man im ersten Schritt viele der äußeren Einflüsse wie Lichtreflektionen und ähnliches aus. Im nächsten Schritt haben wir versucht Objekte zu finden, die größer sind als die Ebene, aber dennoch diese in ihren untersten Punkten berühren. Im Anschluss sortieren wir die gefundenen Objekte nach der Nähe zum Mittelpunkt. Und so finden wir die Linke und Rechte Fahrbahnmarkierungen. Die mittlere finden wir durch die Linke und Rechte Begrenzung, jedes weitere gefundene Objekt muss sich dazwischen befinden um als eine Mittellinie erkannt zu werden. Die außerhalb liegenden Mittellinien können dann über die Gradienten der gefundenen Mittellinien berechnet werden.
# '''Mit welchen Ansätzen lassen sich die Mittle- und rechte Fahrspur segmentieren?''' Wir haben den Einsatz einer Ebene gewählt, damit schließt man im ersten Schritt viele der äußeren Einflüsse wie Lichtreflektionen und ähnliches aus. Im nächsten Schritt haben wir versucht Objekte zu finden, die größer sind als die Ebene, aber dennoch diese in ihren untersten Punkten berühren. Im Anschluss sortieren wir die gefundenen Objekte nach der Nähe zum Mittelpunkt. Und so finden wir die Linke und Rechte Fahrbahnmarkierungen. Die mittlere finden wir durch die Linke und Rechte Begrenzung, jedes weitere gefundene Objekt muss sich dazwischen befinden um als eine Mittellinie erkannt zu werden. Die außerhalb liegenden Mittellinien können dann über die Gradienten der gefundenen Mittellinien berechnet werden.
# Wieso sollten alle Fahrbahnränder segmentiert werden? Bei Kurvenfahrten kann es passieren, dass eine der Fahrbahnränder nicht mehr von der Kamera gesehen wird und dementsprechend muss darauf reagiert werden können. Wenn ich mindestens Links und Rechts nehme habe ich das Problem der Kurvenfahrt nicht mehr, da immer ein Fahrbahnrand übrig ist. Die Mittellinien braucht man, damit das Auto nicht auf der falschen Seite fährt und es so zu Unfällen kommen kann.
# '''Wieso sollten alle Fahrbahnränder segmentiert werden?''' Bei Kurvenfahrten kann es passieren, dass eine der Fahrbahnränder nicht mehr von der Kamera gesehen wird und dementsprechend muss darauf reagiert werden können. Wenn ich mindestens Links und Rechts nehme habe ich das Problem der Kurvenfahrt nicht mehr, da immer ein Fahrbahnrand übrig ist. Die Mittellinien braucht man, damit das Auto nicht auf der falschen Seite fährt und es so zu Unfällen kommen kann.
# Welche Vor- und Nachteile hat die Segmentierung? Die Segmentierung ist ein schnelles Verfahren welches in Echtzeit angewendet werden kann. Ein großer Nachteil sind Lichteinflüsse da diese mehrere Segmente miteinander verbinden, so kann nicht mehr alles richtig segmentiert werden kann.
# '''Welche Vor- und Nachteile hat die Segmentierung?''' Die Segmentierung ist ein schnelles Verfahren welches in Echtzeit angewendet werden kann. Ein großer Nachteil sind Lichteinflüsse da diese mehrere Segmente miteinander verbinden, so kann nicht mehr alles richtig segmentiert werden kann. Ein weitere Nachteil ist, da wir uns auf Basis eines biniarisierten Bildes befinden, dass Farben nicht erkannt werden können.
 
# '''Wie könnten die Nachteile behandelt werden?''' Man könnte das ganze mit der Hough Transformation machen, da diese Präzise auf Linien reagieren kann. Hough Transformationen haben eine höhere Resistenz gegenüber äußeren Einflüssen, dafür ist diese allerdings langsamer. Das Farbproblem lässt sich durch die Verwendung von Modellbasierten Algorithmen lösen.
# Wie könnten die Nachteile behandelt werden?
Man könnte das ganze mit der Hough Transformation machen, da diese Präzise auf Linien reagieren kann. Hough Transformationen haben eine höhere Resistenz gegenüber äußeren Einflüssen, dafür ist diese allerdings langsamer.
----
----
→ 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, 07:52 Uhr

Abb. 1: Das Ergebnis unseres Algorithmus.
Autoren: Dennis Fleer, Philipp Sander
Thema: Segmentierung der Fahrbahnmarkierungen
Workshoptermin 9: 20.06.2024
Lernzielkontrolle 3: 04.07.2024

Einleitung

Aufgabe war es einen Algorithmus zu entwickeln, welcher die Fahrbahnmarkierungen erkennt. Dieses wurde mit Hilfe von Matlab und der bwconncomp Methode umgesetzt.

PAP

Das PAP des Hauptprogramms liefert einen Überblick über das generelle Programm, während das PAP des Algorithmus sich mehr auf die Details bezieht wie die Fahrbahn erkannt wird.

Quelltext

Ergebnisse

  • Darstellung der Ergebnisse

  • Abb. 4: Das ist ein biniarisiertes Bild von einer Aufnahme der Kamera. Man sieht die Fahrbahnmarkierungen und eine weitere.

  • Abb. 5: Das ist das bearbeitete Bild welches aus der Aufnahme durch den Algorithmus entstanden ist.
  • Links zu den Arbeitsergebnissen :

Link zu dem SVN-Ordner der Arbeitsergebnisse

Analyse

Tabelle 1: Problembeschreibung
Beschreibung Das Problem ist.. Das Problem ist nicht...
Was genau ist das Problem? Äußere Einflüsse wie Licht oder Objekte werfen Flecken Objekte innerhalb der Ebene erkennen
Wo tritt das Problem auf? Am Rand der Detektionsebene Außerhalb der Detektionsebene liegende Objekte
Wie zeigt sich das Problem? Er springt zwischen Objekten Er bleibt konstant auf dem falschen Objekt
Wann tritt das Problem auf? Bei der dynamischen Erkennung im Video Bei der statischen Erkennung in einem Bild
Warum ist es ein Problem? Weil dadurch die erkannte Fahrbahn sich verändert Außerhalb der Detektionsebene liegende Objekte werden als Fahrbahn identifiziert
Tabelle 2: Ursachenanalyse
Nr. Beschreibung
1 Die Objekte die nicht zu 100% in der Ebene liegen
2 Kleine Objekte am unteren Rand werden zu einem Rauschen
Tabelle 3: Maßnahmen zur Beseitigung der identifizierten Ursache(n)
Nr. Maßnahme Verantwortung Status
1 Teilüberschneidung der Objekte mit der Ebene zu lassen Fleer, Sander
2 Objekte müssen eine Mindestgröße aufweisen Fleer, Sander

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

Zusammenfassung

  • Zusammenfassung

Der Algorithmus funktioniert auf Bilderebene einwandfrei, allerdings tut er sich aus unerklärlichen Gründen bei einem Video deutlich schwerer, wobei eigentlich ein Video auch nur aus hintereinander gereihten Bildern besteht.

  • Diskussion der Ergebnisse

Die Ergebnisse sind nicht wirklich zufriedenstellend. Der Algorithmus hat noch viele Fehler weswegen eine Spurführung quasi unmöglich wäre.

  • Ausblick

Eine deutliche Verbesserung des Algorithmus wäre eine Weiterführung der Mittleren Linien durch die Gradientenvektoren.

  • Lessons Learned

So einen Algorithmus zu entwerfen macht Spaß ist aber extrem zeit intensiv. Die Entwicklung für den Algorithmus hat ca. 20 Stunden gebraucht und er funktioniert immernoch nicht richtig, was sehr frustrierend ist.

Beantwortung der Lernzielkontrollfragen

  1. Mit welchen Ansätzen lassen sich die Mittle- und rechte Fahrspur segmentieren? Wir haben den Einsatz einer Ebene gewählt, damit schließt man im ersten Schritt viele der äußeren Einflüsse wie Lichtreflektionen und ähnliches aus. Im nächsten Schritt haben wir versucht Objekte zu finden, die größer sind als die Ebene, aber dennoch diese in ihren untersten Punkten berühren. Im Anschluss sortieren wir die gefundenen Objekte nach der Nähe zum Mittelpunkt. Und so finden wir die Linke und Rechte Fahrbahnmarkierungen. Die mittlere finden wir durch die Linke und Rechte Begrenzung, jedes weitere gefundene Objekt muss sich dazwischen befinden um als eine Mittellinie erkannt zu werden. Die außerhalb liegenden Mittellinien können dann über die Gradienten der gefundenen Mittellinien berechnet werden.
  2. Wieso sollten alle Fahrbahnränder segmentiert werden? Bei Kurvenfahrten kann es passieren, dass eine der Fahrbahnränder nicht mehr von der Kamera gesehen wird und dementsprechend muss darauf reagiert werden können. Wenn ich mindestens Links und Rechts nehme habe ich das Problem der Kurvenfahrt nicht mehr, da immer ein Fahrbahnrand übrig ist. Die Mittellinien braucht man, damit das Auto nicht auf der falschen Seite fährt und es so zu Unfällen kommen kann.
  3. Welche Vor- und Nachteile hat die Segmentierung? Die Segmentierung ist ein schnelles Verfahren welches in Echtzeit angewendet werden kann. Ein großer Nachteil sind Lichteinflüsse da diese mehrere Segmente miteinander verbinden, so kann nicht mehr alles richtig segmentiert werden kann. Ein weitere Nachteil ist, da wir uns auf Basis eines biniarisierten Bildes befinden, dass Farben nicht erkannt werden können.
  4. Wie könnten die Nachteile behandelt werden? Man könnte das ganze mit der Hough Transformation machen, da diese Präzise auf Linien reagieren kann. Hough Transformationen haben eine höhere Resistenz gegenüber äußeren Einflüssen, dafür ist diese allerdings langsamer. Das Farbproblem lässt sich durch die Verwendung von Modellbasierten Algorithmen lösen.

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