Version [80878]
Dies ist eine alte Version von ComputerBasierteIntelligenzVorverarbeitung erstellt von mstruening am 2017-07-03 20:58:57.
Kennzeichenerkennung
Datenvorverarbeitung in MATLAB
Vorbereitung
Für dieses Tutorium wurde Ihnen ein Archiv mit folgenden Inhalten bereitgestellt:
- 100 Bilddateien von Kraftfahrzeugen mit mehr oder weniger erkennbaren Kennzeichen
- Zugehörige INI-Dateien
- Das Werkzeug "KFZ-Expert"
1. Manuelle Vorverarbeitung
Als erstes müssen alle 100 Bilddateien von Ihnen mit dem Programm "KFZ-Expert" bearbeitet werden. "KFZ-Expert" ermöglicht Ihnen das Setzen der ROI und des erwarteten Klassifikationsergebnisses. Wenn Sie das Programm gestartet haben, setzen Sie bitte als Erstes das Verzeichnis mit den Kennzeichen-Bildern aus den Archiv im mittleren Teil des Programms und wählen Sie das erste Bild aus. Sie sollten jetzt in der oberen linken Ecke ein Bild eines Fahrzeugs sehen. Im unteren Teil sehen sie die ausgewählte ROI, die nicht unbedingt optimal gesetzt ist.
Ihre Aufgabe besteht jetzt darin, für alle 100 Bilder die Eckpunkte so zu setzen, dass sich möglichst das vollständige Kennzeichen im roten Rahmen befindet und der Rahmen keine Zeichen schneidet. Außerdem sollten die Kanten des Rahmens zur Ausrichtung der Buchstaben parallel sein, wie es im folgenden Bild zu sehen ist. Zudem sollen Sie den Text des Kennzeichens und ob es vollständig zu sehen ist in der Software in die entsprechenden Felder eintragen. Bitte verzichten Sie auf die Eingabe von Leerzeichen im Kennzeichen und geben sie 0 und 1 anstelle von O und I an. Die Software speichert alle Ihre Änderungen automatisch in einer INI-Datei mit identischem Namen zum Bild.
| Steuerung von KFZ-Expert:
|
2. Automatisierte Vorverarbeitung
Die Vorgehensweise der automatisierten Vorverarbeitung soll vorerst nur an einem einzigen Bild demonstriert werden. Für das maschinelle Lernen werden die folgenden Schritte später an allen 100 Bildern wiederholt.
Im ersten automatisiertem Schritt laden wir das Bild in den Speicher und lesen die zugehörige INI-Datei aus. Darin finden wir, die von uns zuvor festgelegten Eckpunkte und den Kennzeichentext. Da MATLAB keinen direkten Support für INI-Dateien anbietet, verwenden wir dafür den INI-Reader von Primoz Cermelj, der auf Matlab Central (https://de.mathworks.com/matlabcentral/fileexchange/2976-inifile) zu finden ist. Jeden unserer Schritte stellen wir zur Nachvollziehbarkeit in einem eigenen Subplot dar. Das hat auch den Vorteil, dass Programmierfehler in den einzelnen Schritten besser erkannt werden können und uns somit das Debuggen erleichtert wird. Wir zeichnen schlussendlich noch die Eckpunkte aus den INI-Dateien im Bild ein und weisen dem Subplot einen Titel zu.
% Bilder und zugehörige INI-Dateien einlesen
%Dateipfad Eingabedaten PATH_inputImg = ['data\img00' num2str(dataIndex)]; %Dateipfad Ausgabebild PATH_outputImg = ['graf\img00' num2str(dataIndex)]; %Eingabebild einlesen IMG_1_input = imread([PATH_inputImg '.jpg']); %Eingabebild in Subplot oben-links eintragen close all, subplot(2,3,1), imshow(IMG_1_input), hold on %Cell Array für INI-Read konstruieren % Mit Funktion inifile(iniFileName, mode, modeParams) % Jede Zeile in CellArray 'readParams' muss enthalten: % Section, Subsection, Key, Format(s:string, d:double) %Reihenfolge: Kennzeichentext, x-Koordinaten, y-Koordinaten section = 'Plate'; readParams = {section,'','name','s'; section,'','x1','d'; section,'','x2','d'; section,'','x3','d'; section,'','x4','d'; section,'','y1','d'; section,'','y2','d'; section,'','y3','d'; section,'','y4','d'}; %INI-Read ausführen %Ergebnisse liegen in selber Reihenfolge wie mit readParams angefordert iniValues = inifile([PATH_inputImg '.ini'], 'read', readParams); %Erste Zeile: Kennzeichentext plateText = iniValues{1,1}; %Zeile 2-5: x-Koordinaten x = cell2mat(iniValues(2:5)); %Zeile 6-9: y-Koordinaten y = cell2mat(iniValues(6:9)); %Polygon-Koordinaten in Original-Bild eintragen plot(x, y,'g*') %Bildindex und Kennzeichen als Titel title(['Bild: ' num2str(dataIndex) ' ' plateText]) |