Objekterkennung: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
Zeile 93: Zeile 93:
     stats = [regionprops(L)]; % Objektdaten anlegen
     stats = [regionprops(L)]; % Objektdaten anlegen
</source>
</source>
[[Datei:ObjekterkennungHan2.png|mini|Bearbeitetes Bild]]


== Siehe auch ==
== Siehe auch ==

Version vom 19. Juni 2014, 21:16 Uhr

Autor: Alexander Haneke
Betreuer: Prof. Schneider

Motivation

Kartons bilden die Objekte beim Carolo-Cup. Es bedarf einer robusten Objekterkennung auf Basis des Kamerabildes.

Ziel

  • Vertiefung der Lehrveranstaltung Digitale Signal- und Bildverarbeitung.\
  • Vorstellung eines Konzeptes zur Objekterkennung
  • Umsetzung des Konzeptes in Matlab
  • Einblendung der Objekte in das Videobild

Aufgabe

  1. Recherchieren Sie die theoretische Hintergründe der Objekterkennung.
  2. Recherchieren Sie welche Verfahren zur Objekterkennung und -verfolgung sich für unseren Fall anwenden lassen. Publikationen zu diesem Thema finden Sie beispielsweise [1].
  3. Unter Demos finden Sie ein Demo zur Objekterkennung. Dieses dürfen Sie gern für die Einarbeitung nutzen. Verändern sie es jedoch bitte nicht, sondern legen Sie einen Entwicklungszweig (Branch) in Ihrem Arbeitsverzeichnis an.
  4. Detektieren Sie die Kopierkartons im Videobild.
  5. Zeigen Sie die Kartonumrisse als Rechteck in Weltkoordinaten an.
  6. Ermitteln Sie den Referenzpunkt (Mittelpunkt Vorderkante).
  7. Bestimmen Sie die Objektparameter gemäß Schnittstellendokumentation.

Lösung

Einlesen des Videobildes

Um eine Erkennung aus dem Livebild zu ermöglichen, musste zuerst das Einlesen des Videobildes der Webcam implementiert werden. Hier wurde die videoinput Befehl der Image Acquisation Toolbox verwendet. Um eine geeignete Verarbeitungsgeschwindigkeit zu ermöglichen, wurde ein Timer implementiert, der die Weitergabe von 5 Bildern pro Sekunde an die Verarbeitung realisiert.

%% Webcam einbinden Parameter setzen 

   vid = videoinput('winvideo', 1);
      
% Triggerkonfiguration
set(vid,'FramesPerTrigger',1);
set(vid,'TriggerRepeat',Inf);
set(vid,'ReturnedColorSpace','grayscale');
  
 triggerconfig(vid, 'manual')

% Timer erstellen
TimerData=timer('TimerFcn', {@Bildverarbeitung,vid},'Period',1/Bildrate,'ExecutionMode','fixedRate','BusyMode','drop');

% Start video und Timer
start(vid);
start(TimerData);

Bearbeitung des Bildes

Um aus einem Kamerabild ein Objekt zu erkennen, muss man die Überlegung angehen, welche optischen Eigenschaften des Objekts eine gute Grundlage für eine Erkennung bieten. Da die weissen Kartons auf einer schwarzen Fahrbahn detektiert werden sollen, macht es Sinn, die starken Kanten des Kartons als Grundlage zu nehmen. Der lokale Kontrast am Übergang der Fahrbahn zum Karton ist relativ hoch, sodass diese Vorgehensweise sich anbietet. Zuerst wurde jedoch das Bild zur Kantenerkennung vorbereitet. Hierzu wurde die automatische Kontrastanpassung imadjust aus der Image Processing Toolbox verwendet und das Bild über eine Schwellwertsegmentierung in ein Binärbild umgewandelt. Der Schwellwert wurde auf 0.8 festgelegt. Es wurde außerdem ein Außenrand von 100 Pixeln von der Auswertung ausgeschlossen, um eine geeignete RoI zu ermöglichen. Hierzu wurde eine Matrix erstellt, die in diesem Außenrand mit Einsen aufgefüllt wurde und in der RoI mit Nullen. Diese Matrix wurde dann auf die vorhandene Bildmatrix addiert, sodass der Außenrand komplett schwarz ist.

IMAGE = imadjust(IMAGE); %Automatische Kontrastanpassung
   
   %Rand mit 1en auffüllen
   
   bild_matrix((Aussenrand:(size(IMAGE,1)-Aussenrand)),(Aussenrand:size(IMAGE,2)-Aussenrand))=1;
    
    bild_bw = im2bw(IMAGE, 0.8); % Umwandeln des Graustufenbildes in ein b/w-Bild (Schwarz-Weiß oder auch binär) in Abhängigkeit des vorherbestimmten Schwellenwertes

Das Bild wurde nun nach Kanten gefiltert. Die Image Acquisation Toolbox bietet mit dem Edge-Befehl die Möglichkeit, die verschiedenen Kantenfilter anzuwenden. Es stellte sich als gute Lösung heraus, das Bild erst mit dem LaPlacien of Gaussian (LoG)- Filter zu filtern und anschließend das Sobel-Filter anzuwenden.

bild_log = edge(bild_bw, 'log'); % LoG Filter
   
    
bild_sobel = edge(bild_log, 'sobel'); % Sobel Filter

Um irrelevante Objekte auszuschließen, wurden mit der Funktion bwareaopen Objekte unterhalb einer Grenze ausgelöscht. Anschließend wurden Felder, die von Kanten umschlossen sind, weiss aufgefüllt. Die vorhandenen Kanten wurden anschließend durch den strel-Befehl hervorgehoben.

 bild_area = bwareaopen(bild_sobel,800,8);
    
    bild_gefuellt = imfill(bild_area,'holes');% alle schwarzen Bereiche, die von weißen Kanten umgeben sind, auf weiß gesetzt
   
   se = strel('disk',10); % Hervorhebung der geschlossenen Kanten
   
   bild_gefuellt = imclose(bild_area,se);

Die Erkennung großer einfarbiger Objekte ist nun gegeben, sodass die Objekte nun gelabelt und mit ihren Eigenschaften abgelegt werden können.

 L = bwlabel( bild_area2,4); %Objekte Labeln
    
    stats = [regionprops(L)]; % Objektdaten anlegen
Bearbeitetes Bild

Siehe auch

  1. Corke, P.: Robotics, Vision and Control. Heidelberg: Springer Verlag, 2013. ISBN 978-3-642-20143-1
  2. Doege, K.-P.: Videodetektion im Straßenverkehr. München: Oldenbourg Wissenschaftsverlag GmbH, 2013. ISBN 978-3-486-70893-3
  3. Tönnies, K. D.: Grundlagen der Bildverarbeitung. München: Pearson Studium, 2005. ISBN 3-8273-7155-4
  4. Mathworks: Object Detection, Motion Estimation, and Tracking. URL

Weblinks



→ zurück zum Hauptartikel: Digitale Signal- und Bildverarbeitung SoSe2014