Ich mache gerade eine Projekt zur Erkennung von Alarmsignalen im Armaturenbrett. Meine Aufgabe ich so aufgebaut, dass ich von verschiedenen Armaturenbrettern das Alarmsymbol für ein zu nahes Auto erkennen lassen muss. Dazu stehen mir Videoaufnahme (.avi) vom Armaturenbrett zur Verfügung.
Da die Alarmsymbole aber ziemlich unterschiedlich sind, stehe ich vor einigen Problemen. Die Symbole können in der Farbe (rot, orange, grau) und in der Form (autoförmig/viereckiges Popup) sowie das Video in der Qualität variieren. Außerdem gibt es Spiegelungen und manche Armaturenbretter sind beleuchtet.
Zurzeit löse ich das Problem über eine Differenzbildanalyse und Schleife:
Code:
% Schleife
% Vorbereitung
bild=read(autovideo, 1); % Video ist bereits eingelesen
r=1*bild(:,:,1);
bild_abw=bild_1; % Abweichungsbild in Graustufen
bild_1=imadjust(bild_1); % Kontrast erhöhen
sw=graythresh(bild_1); % Findet automatisch den Schwellenwert
bild_1=im2bw(bild_1,sw); % Umwandeln in schwarz-weiß / Binär
bild_1=bwareaopen(bild_1,Pixel); % Entferne objekte mit weniger Pixel
bild_1=imclearborder(bild_1,8); % Alle zusammenhängende Punkte am Rand werden entfernt
%bild_1=imfill(bild_1,'holes'); % Alle Löcher werden gefüllt.
Bild_Wert=sum(sum(bild_1)); % Summe der Werte der Matrix
Leider schlägt das Tool jetzt schon bei kleinesten Bewegungen von Drehzahlzeiger aus. Ich könnte den Pixelwert höher setzten damit der Zeiger auch weggeschnitten wird. Aber das muss man wieder manuell machen, was ich gerne verhindern würde.
Ich habe vom jemanden den Tipp bekommen, dass, da der Zeiger relativ lang und dünn ist, ich ihn mit shrink verschwinden lassen kann. Dazu habe ich aber nichts gefunden. Kann mir jemand sagen wie die Funktion in Matlab aussieht und/oder auch eine andere Möglichkeit nennen, wie ich Störobjekte (Spiegelungen/Blinker) entferne außer mit bwareaopen ?
Außerdem möchte ich gerne alle Pixel wegschneiden, die nicht die richtige Farbe haben (ich gehe jetzt erst mal nur von roten Symbolen aus). ich habe dazu was vom Threshvalue gehört. Weiß leider auch nicht wie ich diese einbauen kann. Soll so aussehen, dass man Matlab aus der Matrix alle Werte löscht, die kleiner als dieser Wert sind.
Wenn jemand Tipps zur Vorgehensweise hat, die vielleicht erfolgsversprechender ist, wäre ich natürlich auch sehr dankbar. Ich dachte mir, dass eine Differenzbildanalyse flexibler auf sich ändernde Symbole reagiert.
das sind gleich viele Fragen. Daher zunächst die Antwort auf die Funktion "shrink", die zu >>bwmorph gehört. Ob sie zum richtigen Resultat führt lässt sich nicht vorhersagen, da Bilder extrem empfindlich auf diese Funktion reagieren und zu nicht vorhersehbaren Ergebnissen führen. Dazu ein Beispiel. Das Bild gehört zu Matlab.
Ändere den Schwellwert und stelle fest, ob die Funktion passt. Ein 2. Weg wäre über die Mustererkennung. Die Symbole, die erscheinen, lassen sich bestimmt abschließend auflisten - oder sind sie noch vielfältiger?
Wenn sich die Bildqualität verschlechtert, vermutlich nimmt das Rauschen zu, müsste die richtige Funktion zum entrauschen gefunden werden. Eine, die nicht so stark die Kanten aufweicht.
Ich würde zunächst feststellen, ob dir die obige Funktion weiter hilft. Wenn nicht, kann man den nächsten Schritt angehen.
kriege ich den Zeiger wirklich weg, muss dazu aber den Schwellwert sw höher setzen(0.7), damit die (leichten) Spiegelungen auch verschwinden.
Ich möchte die Aufnahmen gern synchron zur Zeit angeben, habe aber gesehen, dass es einen Delay gibt. Du weißt nicht zufällig, wie ich aus den Videos den Delay berechnen kann. Das Problem ist, dass der Delay variabel sein soll, also sich vergrößert oder verkleinert jenachdem wie gut die Qualität des Videos ist und die Lichtverhältnisse sind.
Wollte jetzt nicht unbedingt ein neues Thema dafür eröffnen.
Kannst du mir (obwohl das mit shrink funktioniert hat) auch noch kurz erklären, wie ich das mit den threshvalue bei den Farben machen kann. Also wenn ich alle Pixel entfernen möchte die keinen Rotwert von z.B. 150 haben?
Sobald ich etwas Zeit finde, werde ich mich an Matlab setzen und es mal ausprobieren.
Grüße
Canni
Einstellungen und Berechtigungen
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.