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

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
Zeile 9: Zeile 9:
Das Video wurde bereits von einer anderen Gruppe in die Vogelperspektive transformiert. Damit das zu analysierende Video mit Matlab bearbeitet werden kann, muss dieses zuerst durch den Befehl <code>VideoReader()</code> eingelesen werden. Dabei werden der zugewiesenen Variable alle benötigten Informationen über das Video übergeben. Auf diese kann dann mit dem Punkt-Operator zugegriffen werden, wodurch unter Anderem die Auflösung und die gesamte Videolänge für die weitere Verarbeitung verwendet werden kann.  
Das Video wurde bereits von einer anderen Gruppe in die Vogelperspektive transformiert. Damit das zu analysierende Video mit Matlab bearbeitet werden kann, muss dieses zuerst durch den Befehl <code>VideoReader()</code> eingelesen werden. Dabei werden der zugewiesenen Variable alle benötigten Informationen über das Video übergeben. Auf diese kann dann mit dem Punkt-Operator zugegriffen werden, wodurch unter Anderem die Auflösung und die gesamte Videolänge für die weitere Verarbeitung verwendet werden kann.  


Damit möglichst viele Frames des Videos in Matlab wiedergegeben werden können, wird eine übergeordnete Schleife erstellt, welche alle 0,2 Sekunden ein Frame des Videos über die gesamte Länge bearbeitet und ausgibt. Da es sich bei dem Video jedoch um ein RGB-Video handelt, müssen diese Frames mit dem Befehl <code>im2bw()</code> zuerst in eine Binärdatei umgewandelt werden. Danach erhält man ein Bild bzw. eine Matrix, welche nur mit 1en oder 0en gefüllt ist und somit auf dem Bild nur schwarze oder weiße Pixel vorhanden sind. Damit das System nun auch erkennt, welche Pixel zu einem Segment gehören, wird der Befehl <code>bwb</code> mit der Binärdatei als Eingabewert angewendet. Dadurch wird das Frame in seine einzelnen Segmente unterteilt und ebenfalls automatisch farbig gekennzeichnet. Zudem wurde auch das Signalwort 'noholes' übergeben, welches bewirkt, dass einzelne Pixel entfernt werden.
Damit möglichst viele Frames des Videos in Matlab wiedergegeben werden können, wird eine übergeordnete Schleife erstellt, welche alle 0,2 Sekunden ein Frame des Videos über die gesamte Länge bearbeitet und ausgibt. Da es sich bei dem Video jedoch um ein RGB-Video handelt, müssen diese Frames mit dem Befehl <code>im2bw()</code> zuerst in eine Binärdatei umgewandelt werden. Danach erhält man ein Bild bzw. eine Matrix, welche nur mit 1en oder 0en gefüllt ist und somit auf dem Bild nur schwarze oder weiße Pixel vorhanden sind. Damit das System nun auch erkennt, welche Pixel zu einem Segment gehören, wird der Befehl <code>bwboundaries</code> mit der Binärdatei als Eingabewert angewendet. Dadurch wird das Frame in seine einzelnen Segmente unterteilt und ebenfalls automatisch farbig gekennzeichnet. Zudem wurde auch das Signalwort 'noholes' übergeben, welches bewirkt, dass einzelne Pixel entfernt werden.


Die beiden darauf folgenden verschachtelten <code>for</code>-Schleifen dienen zur Erkennung der Segmente des linken, rechten und mittleren Fahrstreifens. Die äußere Schleife zählt in 5er-Schritten von 0 bis 40 hoch und die innere Schleife von 1 bis 70 in 1er-Schritten. Der Sinn dahinter ist, dass ein Anfangspunkt aus einem Frame gewählt bzw. geschätzt wird, wo das autonome Fahrzeug sich vermutlich ungefähr befindet. Darauf wird dann mit der inneren Schleife von dem Ausgangspunkt bis zu 70 Pixel nach rechts gesucht, bis ein Segment gefunden wird. Sollte keines gefunden werden, wird der Startpunkt mit der äußeren <code>for</code>-Schleife um 5 Pixel nach oben verschoben, von wo dann dieselbe Suche fortgeführt wird. Wird ein beliebiges Segment gefunden, wird es in diesem Fall als die rechte Spur identifiziert und der Farbwert, den dieses Segment besitzt, wird sich gemerkt und zwischengespeichert. Mit dieser Vorgehensweise werden ebenfalls die mittlere und linke Spur gesucht, wobei der einzige unterschied ist, dass diese andere Ausgangspunkte, ab denen gesucht werden, besitzen. Werden alle drei Farben der Segmente der jeweiligen Spuren ermittelt, werden diese beiden Schleifen frühzeitig durch einen <code>break</code>-Befehl beendet.
Die beiden darauf folgenden verschachtelten <code>for</code>-Schleifen dienen zur Erkennung der Segmente des linken, rechten und mittleren Fahrstreifens. Die äußere Schleife zählt in 5er-Schritten von 0 bis 40 hoch und die innere Schleife von 1 bis 70 in 1er-Schritten. Der Sinn dahinter ist, dass ein Anfangspunkt aus einem Frame gewählt bzw. geschätzt wird, wo das autonome Fahrzeug sich vermutlich ungefähr befindet. Darauf wird dann mit der inneren Schleife von dem Ausgangspunkt bis zu 70 Pixel nach rechts gesucht, bis ein Segment gefunden wird. Sollte keines gefunden werden, wird der Startpunkt mit der äußeren <code>for</code>-Schleife um 5 Pixel nach oben verschoben, von wo dann dieselbe Suche fortgeführt wird. Wird ein beliebiges Segment gefunden, wird es in diesem Fall als die rechte Spur identifiziert und der Farbwert, den dieses Segment besitzt, wird sich gemerkt und zwischengespeichert. Mit dieser Vorgehensweise werden ebenfalls die mittlere und linke Spur gesucht, wobei der einzige unterschied ist, dass diese andere Ausgangspunkte, ab denen gesucht werden, besitzen. Werden alle drei Farben der Segmente der jeweiligen Spuren ermittelt, werden diese beiden Schleifen frühzeitig durch einen <code>break</code>-Befehl beendet.

Version vom 1. Juni 2023, 14:41 Uhr

Autoren: Johann Kismann & Dominik Koenig

Einleitung

Im 6. Semester des Studiengangs Mechatronik findet das Praktikum Systementwurf statt. Dabei werden semesterbegleitend Workshops absolviert, welche sich mit einem autonomen Fahrzeug beschäftigen. Im Rahmen dieses Praktikums handelt der 9. Workshop über die Objekt- und Spurenerkennung mit der Kamera, wobei unsere Gruppe das Thema "Segmentierung der Fahrbahnmarkierungen" bekommen hat.

Anhand der kalibrierten Kamera des autonomen Fahrzeuges wurde ein Video aufgenommen, welches so segmentiert werden soll, dass die Fahrbahnmarkierungen segmentiert und farbig erkenntlich gemacht werden.

Segmentierung mit Matlab

Das Video wurde bereits von einer anderen Gruppe in die Vogelperspektive transformiert. Damit das zu analysierende Video mit Matlab bearbeitet werden kann, muss dieses zuerst durch den Befehl VideoReader() eingelesen werden. Dabei werden der zugewiesenen Variable alle benötigten Informationen über das Video übergeben. Auf diese kann dann mit dem Punkt-Operator zugegriffen werden, wodurch unter Anderem die Auflösung und die gesamte Videolänge für die weitere Verarbeitung verwendet werden kann.

Damit möglichst viele Frames des Videos in Matlab wiedergegeben werden können, wird eine übergeordnete Schleife erstellt, welche alle 0,2 Sekunden ein Frame des Videos über die gesamte Länge bearbeitet und ausgibt. Da es sich bei dem Video jedoch um ein RGB-Video handelt, müssen diese Frames mit dem Befehl im2bw() zuerst in eine Binärdatei umgewandelt werden. Danach erhält man ein Bild bzw. eine Matrix, welche nur mit 1en oder 0en gefüllt ist und somit auf dem Bild nur schwarze oder weiße Pixel vorhanden sind. Damit das System nun auch erkennt, welche Pixel zu einem Segment gehören, wird der Befehl bwboundaries mit der Binärdatei als Eingabewert angewendet. Dadurch wird das Frame in seine einzelnen Segmente unterteilt und ebenfalls automatisch farbig gekennzeichnet. Zudem wurde auch das Signalwort 'noholes' übergeben, welches bewirkt, dass einzelne Pixel entfernt werden.

Die beiden darauf folgenden verschachtelten for-Schleifen dienen zur Erkennung der Segmente des linken, rechten und mittleren Fahrstreifens. Die äußere Schleife zählt in 5er-Schritten von 0 bis 40 hoch und die innere Schleife von 1 bis 70 in 1er-Schritten. Der Sinn dahinter ist, dass ein Anfangspunkt aus einem Frame gewählt bzw. geschätzt wird, wo das autonome Fahrzeug sich vermutlich ungefähr befindet. Darauf wird dann mit der inneren Schleife von dem Ausgangspunkt bis zu 70 Pixel nach rechts gesucht, bis ein Segment gefunden wird. Sollte keines gefunden werden, wird der Startpunkt mit der äußeren for-Schleife um 5 Pixel nach oben verschoben, von wo dann dieselbe Suche fortgeführt wird. Wird ein beliebiges Segment gefunden, wird es in diesem Fall als die rechte Spur identifiziert und der Farbwert, den dieses Segment besitzt, wird sich gemerkt und zwischengespeichert. Mit dieser Vorgehensweise werden ebenfalls die mittlere und linke Spur gesucht, wobei der einzige unterschied ist, dass diese andere Ausgangspunkte, ab denen gesucht werden, besitzen. Werden alle drei Farben der Segmente der jeweiligen Spuren ermittelt, werden diese beiden Schleifen frühzeitig durch einen break-Befehl beendet.