Um visuelle Umfeldwahrnehmung in Echtzeit betreiben zu können, muss die Datenmenge, welche von einer Kamera erzeugt wird, zur weiteren Verarbeitung drastisch reduziert werden. Ein Bild ist nichts anderes als eine Matrix, in welcher für jedes Pixel die 3 Farben rot, grün, blau abgespeichert werden. Demzufolge hat ein 1280x720px Bild eine Matrix-Dimension von 1280x720x3.
Die Struktur des Bildes ist dann in Matlab zum Beispiel so aufgebaut:
Kantenerkennung
Für viele Anwendungen im Bereich der Umfeldsensorik ist es notwendig Kanten im Bild zu erkennen. Einerseits lässt sich damit das Bild segmentieren, andererseits kann man Objekte klassifizieren oder Fahrspuren erkennen.
Canny-Algorithmus mit Matlab
Der Klassiker unter den Kantendetektoren ist der Canny-Algorithmus, welcher im wesentlichen auf Faltung der Bild-Grauwerte mit einer Maske beruht.
[matlab]
bild = rgb2gray(imread(‚Foto.jpg‘));
edges = edge(bild, ‚canny‘, 0.2);
imagesc(edges);
[/matlab]
Das Ergebnis der Operation ist ein Bild, welches entweder eine 0 (keine Kante) oder eine 1 (Kante) enthält. Mitunter ist diese harte 0/1 Erkennung nicht immer hilfreich, sodass das Ergebnis nachträglich noch mit einem Gauss-Filter ‚verwaschen‘ werden kann. Dies ergibt einen harmonischeren Bereich, welcher eine Kante charakterisiert.
[matlab]
gaussfilter = fspecial(‚gaussian‘, [1 15], 5);
smoothedges = imfilter(double(edges), gaussfilter, ‚replicate‘);
imagesc(smoothedges);
[/matlab]
Es wurden nur die vertikalen Kanten detektiert und horizontal ‚verwaschen‘.
Verfahren nach THOMANEK (Betragsoperator)
Eine weitere Möglichkeit ist die Variante, welche 1996 von THOMANEK (Visuelle Erkennung und Zustandsschätzung von mehreren Straßenfahrzeugen zur autonomen Fahrzeugführung, Dissertation, Universität der Bundeswehr München, Fakultät für Luft- und Raumfahrttechnik) vorgestellt wurde. Dabei wird eine Korrelation zwischen einem erwarteten Helligkeitsübergang und dem Bild (in welchem dieser Helligkeitsübergang zu finden sein soll) gebildet.
Es wird ein horizontaler Bildstreifen der Höhe h an jeder Stelle (u,v) des Bildes ausgewertet und die Korrelation zwischen dem Betragsoperator und der Helligkeit ermittelt.
[math]K(u,v)=\sum_{i=-h}^h \left| \sum_{j=1}^b (B(u+j,v+i)-B(u-j,v+i)) \right|[/math]
Je höher die Korrelation, desto unstetiger ist der Helligkeitsverlauf, was ein Merkmal für eine Kante sein könnte.
[matlab]
for u= b+1:1:umax-b-1
for i= -h:1:h
for j= 1:1:b
graydiff = img(v+i, u+j) – img(v+i, u-j);
temp(v,u)= temp(v,u) + graydiff;
end
K(v,u) = K(v,u) + abs(temp(v,u));
end
end
[/matlab]
Beispielhaft für zwei Zeilen (schwarz) des Bildes berechnet, ergäbe sich folgender Korrelationsverlauf (blau) für die Helligkeitsunstetigkeiten:
Das Ergebnis des Algorithmus‘ auf das gesamte Bild angewendet, ist das nachfolgend dargestellte:
Vergleich
Der Nachteil des Korrelationsverfahrens mit der ternären Maske ist die zeitaufwendige 3-fach-Schleife, welche nicht sehr effizient ist. Allerdings wurde bei dieser Betrachtung auch keinesfalls auf Effizienz oder mathematische Optimierung geachtet. Es soll lediglich die Ergebnisse der Algorithmen darstellen.