Revision history for MAEIVorverarbeitungInMatlab
Additions:
Durch die Rotation des Bildes in Schritt c) stimmen die Eckpunkte des Kennzeichens nicht mehr mit den angegebenen Polygon-Eckpunkten aus unserer INI-Datei überein. Die Rotation, die wir am Bild vorgenommen haben, müssen wir deshalb identisch auf die Polygon-Eckpunkte übertragen. Da dafür kein spezieller Befehl zur Verfügung steht, muss dies händisch durchgeführt werden. Wir erzeugen also erst einmal eine Rotationsmatrix //R// mit dem Winkel //alphaInRad// um den wir zuvor begradigt haben und definieren unseren Rotationsursprung in der Mitte des Bildes. Eine einfache Multiplikation mit der Rotationsmatrix würde um den Nullpunkt rotieren. Da wir aber um den definierten Rotationsursprung //origin// rotieren wollen, müssen wir diesen zuvor von der Punktkoordinate subtrahieren. Das Ergebnis muss transponiert werden, damit Matrix und Vektor multipliziert werden können. Durch die Multiplikation mit der Rotationsmatrix erfolgt dann die eigentliche Rotation und um den Rotationsprozess abzuschließen, addieren wir den Rotationsursprung wieder auf. Zur Übersicht zeichnen wir die alten Koordinaten rot und die neuen Koordinaten grün in einen Subplot ein.
Deletions:
Additions:
Als Nächstes verwerfen wir alle Informationen im Bild, die für die Kennzeichenerkennung unerheblich ist. Wir erstellen ein Polygon-Maske aus den Koordinaten-Vektoren //x// und //y// und stellen diese als Subplot dar. Danach multiplizieren wir die Pixelfarben der Maske und des Originalbilds elementweise miteinander. Das Ergebnis ist ein größtenteils geschwärztes Bild mit isoliertem Kennzeichen. Dieses tragen wir ebenfalls als Subplot ein.
Durch die Rotation des Bildes in Schritt c) stimmen die Eckpunkte des Kennzeichens nicht mehr mit den angegebenen Polygon-Eckpunkten aus unserer INI-Datei überein. Die Rotation, die wir am Bild vorgenommen haben, müssen wir deshalb identisch auf die Polygon-Eckpunkte übertragen. Da dafür kein spezieller Befehl zur Verfügung steht, muss dies händisch durchgeführt werden. Wir erzeugen also erst einmal eine Rotationsmatrix //R// mit dem Winkel //alphaInRad// um den wir zuvor begradigt haben und definieren unseren Rotationsursprung in der Mitte des Bildes. Eine einfache Multiplikation mit der Rotationsmatrix würde um den Nullpunkt rotieren. Da wir aber um den definierten Rotationsursprung //origin// rotieren wollen, müssen wir diesen zuvor von der Punktkoordinate subtrahieren. Das Ergebnis muss transponiert werden, damit Matrix und Vektor multipliziert werden können. Durch die Multiplikation mit der Rotationsmatrix erfolgt dann die eigentliche Rotation. Um den Rotationsprozess abzuschließen, addieren wir den Rotationsursprung wieder auf. Zur Übersicht zeichnen wir die alten Koordinaten rot und die neuen Koordinaten grün in einen Subplot ein.
Durch die Rotation des Bildes in Schritt c) stimmen die Eckpunkte des Kennzeichens nicht mehr mit den angegebenen Polygon-Eckpunkten aus unserer INI-Datei überein. Die Rotation, die wir am Bild vorgenommen haben, müssen wir deshalb identisch auf die Polygon-Eckpunkte übertragen. Da dafür kein spezieller Befehl zur Verfügung steht, muss dies händisch durchgeführt werden. Wir erzeugen also erst einmal eine Rotationsmatrix //R// mit dem Winkel //alphaInRad// um den wir zuvor begradigt haben und definieren unseren Rotationsursprung in der Mitte des Bildes. Eine einfache Multiplikation mit der Rotationsmatrix würde um den Nullpunkt rotieren. Da wir aber um den definierten Rotationsursprung //origin// rotieren wollen, müssen wir diesen zuvor von der Punktkoordinate subtrahieren. Das Ergebnis muss transponiert werden, damit Matrix und Vektor multipliziert werden können. Durch die Multiplikation mit der Rotationsmatrix erfolgt dann die eigentliche Rotation. Um den Rotationsprozess abzuschließen, addieren wir den Rotationsursprung wieder auf. Zur Übersicht zeichnen wir die alten Koordinaten rot und die neuen Koordinaten grün in einen Subplot ein.
Deletions:
Durch die Rotation des Bildes in Schritt c) stimmen die Eckpunkte des Kennzeichens nicht mehr mit den angegebenen Polygon-Eckpunkten aus unserer INI-Datei überein. Die Rotation, die wir am Bild vorgenommen, müssen wir deshalb identisch auf die Polygon-Eckpunkte übertragen. Da dafür kein spezieller Befehl zur Verfügung steht, muss dies händisch durchgeführt werden. Wir erzeugen also erst einmal eine Rotationsmatrix //R// mit dem Winkel //alphaInRad// um den wir zuvor begradigt haben und definieren unseren Rotationsursprung in der Mitte des Bildes. Eine einfache Multiplikation mit der Rotationsmatrix würde um den Nullpunkt rotieren. Da wir aber um den definierten Rotationsursprung //origin// rotieren wollen, müssen wir diesen zuvor von der Punktkoordinate subtrahieren. Das Ergebnis muss transponiert werden, damit Matrix und Vektor multipliziert werden können. Durch die Multiplikation mit der Rotationsmatrix erfolgt dann die eigentliche Rotation. Um den Rotationsprozess abzuschließen, addieren wir den Rotationsursprung wieder auf. Zur Übersicht zeichnen wir die alten Koordinaten rot und die neuen Koordinaten grün in einen Subplot ein.
Additions:
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 der INI-Datei im Bild ein und weisen dem Subplot einen Titel zu.
Deletions:
Additions:
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 der INI-Dateie im Bild ein und weisen dem Subplot einen Titel zu.
Deletions:
Additions:
Als Nächstes verwerfen wir alle Informationen im Bild, die für die Kennzeichenerkennung unerheblich ist. Wir erstellen ein Polygon-Maske aus den Koordinaten-Vektoren **x** und **y** und stellen diese als Subplot dar. Danach multiplizieren wir die Pixelfarben der Maske und des Originalbilds elementweise miteinander. Das Ergebnis ist ein größtenteils geschwärztes Bild mit isoliertem Kennzeichen. Dieses tragen wir ebenfalls als Subplot ein.
Deletions:
Additions:
close all, subplot(3,3,1), imshow(IMG_1_input), hold on
subplot(3,3,3), imshow(IMG_3_cutOut), title('Ausschnitt')
subplot(3,3,4), imshow(IMG_4_rotated), title('Begradigung')
subplot(3,3,3), imshow(IMG_3_cutOut), title('Ausschnitt')
subplot(3,3,4), imshow(IMG_4_rotated), title('Begradigung')
Deletions:
subplot(2,3,3), imshow(IMG_3_cutOut), title('Ausschnitt')
subplot(2,3,4), imshow(IMG_4_rotated), title('Begradigung')
Additions:
Durch die Rotation des Bildes in Schritt c) stimmen die Eckpunkte des Kennzeichens nicht mehr mit den angegebenen Polygon-Eckpunkten aus unserer INI-Datei überein. Die Rotation, die wir am Bild vorgenommen, müssen wir deshalb identisch auf die Polygon-Eckpunkte übertragen. Da dafür kein spezieller Befehl zur Verfügung steht, muss dies händisch durchgeführt werden. Wir erzeugen also erst einmal eine Rotationsmatrix //R// mit dem Winkel //alphaInRad// um den wir zuvor begradigt haben und definieren unseren Rotationsursprung in der Mitte des Bildes. Eine einfache Multiplikation mit der Rotationsmatrix würde um den Nullpunkt rotieren. Da wir aber um den definierten Rotationsursprung //origin// rotieren wollen, müssen wir diesen zuvor von der Punktkoordinate subtrahieren. Das Ergebnis muss transponiert werden, damit Matrix und Vektor multipliziert werden können. Durch die Multiplikation mit der Rotationsmatrix erfolgt dann die eigentliche Rotation. Um den Rotationsprozess abzuschließen, addieren wir den Rotationsursprung wieder auf. Zur Übersicht zeichnen wir die alten Koordinaten rot und die neuen Koordinaten grün in einen Subplot ein.
Deletions:
Deletions:
Additions:
Durch die Rotation des Bildes in Schritt c) stimmen die Eckpunkte des Kennzeichens nicht mehr mit den angegebenen Polygon-Eckpunkten aus unserer INI-Datei überein. Die Rotation, die wir am Bild vorgenommen, müssen wir deshalb identisch auf die Polygon-Eckpunkte übertragen. Da dafür kein spezieller Befehl zur Verfügung steht, muss dies händisch durchgeführt werden. Wir erzeugen also erst einmal eine Rotationsmatrix //R// mit dem Winkel //alphaInRad// um den wir zuvor begradigt haben und definieren unseren Rotationsursprung in der Mitte des Bildes. Eine einfache Multiplikation mit der Rotationsmatrix würde um den Nullpunkt rotieren. Da wir aber um den definierten Rotationsursprung //origin// rotieren wollen, müssen wir diesen zuvor von der Punktkoordinate subtrahieren. Das Ergebnis muss transponiert werden, damit Matrix und Vektor multipliziert werden können. Durch die Multiplikation mit der Rotationsmatrix erfolgt dann die eigentliche Rotation. Zum Abschluss addieren wir den Rotationsursprung wieder auf. Wir zeichnen abschließend die alten Koordinaten rot und die neuen Koordinaten grün in einen Subplot ein.
Deletions:
Additions:
>>{{image url="CBI05_Schritt4.jpg" title="Begradigung" width="400" class="center"}}>>
Additions:
{{files}}
Durch die Rotation des Bildes in Schritt c) stimmen die Eckpunkte des Kennzeichens nicht mehr mit den angegebenen Polygon-Eckpunkten aus unserer INI-Datei überein. Die Rotation, die wir am Bild vorgenommen, müssen wir deshalb identisch auf die Polygon-Eckpunkte übertragen. Da dafür kein spezieller Befehl zur Verfügung steht, muss dies händisch durchgeführt werden. Wir erzeugen also erst einmal eine Rotationsmatrix //R// mit dem Winkel //alphaInRad// um den wir zuvor begradigt haben und definieren unseren Rotationsursprung in der Mitte des Bildes. Eine einfache Multiplikation mit der Rotationsmatrix würde um den Nullpunkt rotieren. Da wir aber um den definierten Rotationsursprung //origin// rotieren wollen, müssen wir diesen zuvor von der Punktkoordinate subtrahieren. Das Ergebnis muss transponiert werden, damit Matrix und Vektor multipliziert werden können. Durch die Multiplikation mit der Rotationsmatrix erfolgt dann die eigentliche Rotation. Zum Abschluss addieren wir den Rotationsursprung wieder auf.
Durch die Rotation des Bildes in Schritt c) stimmen die Eckpunkte des Kennzeichens nicht mehr mit den angegebenen Polygon-Eckpunkten aus unserer INI-Datei überein. Die Rotation, die wir am Bild vorgenommen, müssen wir deshalb identisch auf die Polygon-Eckpunkte übertragen. Da dafür kein spezieller Befehl zur Verfügung steht, muss dies händisch durchgeführt werden. Wir erzeugen also erst einmal eine Rotationsmatrix //R// mit dem Winkel //alphaInRad// um den wir zuvor begradigt haben und definieren unseren Rotationsursprung in der Mitte des Bildes. Eine einfache Multiplikation mit der Rotationsmatrix würde um den Nullpunkt rotieren. Da wir aber um den definierten Rotationsursprung //origin// rotieren wollen, müssen wir diesen zuvor von der Punktkoordinate subtrahieren. Das Ergebnis muss transponiert werden, damit Matrix und Vektor multipliziert werden können. Durch die Multiplikation mit der Rotationsmatrix erfolgt dann die eigentliche Rotation. Zum Abschluss addieren wir den Rotationsursprung wieder auf.
Deletions:
Additions:
Durch die Rotation des Bildes in Schritt c) stimmen die Eckpunkte des Kennzeichens nicht mehr mit den angegebenen Polygon-Eckpunkten aus unserer INI-Datei überein. Die Rotation, die wir am Bild vorgenommen, müssen wir deshalb identisch auf die Polygon-Eckpunkte übertragen. Da dafür kein spezieller Befehl zur Verfügung steht, muss dies händisch durchgeführt werden. Wir erzeugen also erst einmal eine Rotationsmatrix //R// mit dem Winkel //alphaInRad// um den wir zuvor begradigt haben und definieren unseren Rotationsursprung in der Mitte des Bildes. Eine einfache Multiplikation mit der Rotationsmatrix würde um den Nullpunkt rotieren. Da wir aber um den definierten Rotationsursprung //origin// rotieren wollen, müssen wir diesen zuvor von der Punktkoordinate subtrahieren. Das Ergebnis muss transponiert werden, damit Matrix und Vektor multipliziert werden können. Durch die Multiplikation mit der Rotationsmatrix erfolgt die eigentliche Rotation. Zum Abschluß addieren wir den Rotationsursprung wieder auf.
Deletions:
Additions:
Durch die Rotation des Bildes in Schritt c) stimmen die Eckpunkte des Kennzeichens nicht mehr mit den angegebenen Polygon-Eckpunkten aus unserer INI-Datei überein. Die Rotation, die wir am Bild vorgenommen, müssen wir deshalb identisch auf die Polygon-Eckpunkte übertragen. Da dafür kein spezieller Befehl zur Verfügung steht, muss dies händisch durchgeführt werden. Wir erzeugen also erst einmal eine Rotationsmatrix //R// mit dem Winkel Alpha um den wir zuvor begradigt haben und definieren unseren Rotationsursprung in der Mittel des Bildes. Die Multiplikation mit der Rotationsmatrix rotiert immer um den Nullpunkt, deshalb muss zuvor der gewollte Rotationsursprung //origin// von der Punktkoordinate subtrahiert werden. Dann muss das Ergebnis transponiert werden, damit Matrix und Vektor multipliziert werden können. Durch die Multiplikation mit der Rotationsmatrix erfolgt die eigentliche Rotation. Zum Abschluß addieren wir den Rotationsursprung wieder auf.
Deletions:
No Differences
Additions:
Durch die Rotation des Bildes in Schritt c) stimmen die Eckpunkte des Kennzeichens nicht mehr mit den angegebenen Polygon-Eckpunkten aus unserer INI-Datei überein. Die Rotation, die wir am Bild vorgenommen, müssen wir deshalb identisch auf die Polygon-Eckpunkte übertragen. Da dafür kein spezieller Befehl zur Verfügung steht, müssen wir die Rotation händisch durchführen. Wir erzeugen also erst einmal eine Rotationsmatrix //R// mit dem Winkel Alpha um den wir zuvor begradigt haben und definieren unseren Rotationsursprung in der Mittel des Bildes. Die Multiplikation mit der Rotationsmatrix rotiert immer um den Nullpunkt, deshalb muss zuvor der gewollte Rotationsursprung //origin// von der Punktkoordinate subtrahiert werden. Dann muss das Ergebnis transponiert werden, damit Matrix und Vektor multipliziert werden können. Durch die Multiplikation mit der Rotationsmatrix erfolgt die eigentliche Rotation. Zum Abschluß addieren wir den Rotationsursprung wieder auf.
Additions:
%Rotationsmatrix erzeugen
R = [cos(alphaInRad) sin(alphaInRad); -sin(alphaInRad) cos(alphaInRad)];
%Koordinatenursprung in Bildmitte
origin = [320 240];
%Einzelne Eckpunkte transformieren
for k = 1:4
vertex = [x(k) y(k)];
vertex = R * (vertex - origin)' + origin';
x_corrected(k) = vertex(1);
y_corrected(k) = vertex(2);
end
% Neue Koordinaten (grün) und alte Koordinaten (rot) plotten
subplot(3,3,5), imshow(IMG_4_rotated), title('Punkttransformation'), hold on
plot(x, y, 'r+')
plot(x_corrected, y_corrected, 'g.')
R = [cos(alphaInRad) sin(alphaInRad); -sin(alphaInRad) cos(alphaInRad)];
%Koordinatenursprung in Bildmitte
origin = [320 240];
%Einzelne Eckpunkte transformieren
for k = 1:4
vertex = [x(k) y(k)];
vertex = R * (vertex - origin)' + origin';
x_corrected(k) = vertex(1);
y_corrected(k) = vertex(2);
end
% Neue Koordinaten (grün) und alte Koordinaten (rot) plotten
subplot(3,3,5), imshow(IMG_4_rotated), title('Punkttransformation'), hold on
plot(x, y, 'r+')
plot(x_corrected, y_corrected, 'g.')
Deletions:
R = [cos(alphaInRad) sin(alphaInRad); -sin(alphaInRad) cos(alphaInRad)];
%Koordinatenursprung in Bildmitte
origin = [320 240];
%Einzelne Eckpunkte transformieren
for k = 1:4
vertex = [x(k) y(k)];
vertex = R * (vertex - origin)' + origin';
x_corrected(k) = vertex(1);
y_corrected(k) = vertex(2);
end
subplot(3,3,5), imshow(IMG_4_rotated), title('Punkttransformation'), hold on
plot(x, y, 'r+')
plot(x_corrected, y_corrected, 'g.')
No Differences
Additions:
=== ((3)) Kennzeichen begradigen ===
=== ((3)) Polygon-Koordinaten an Begradigung anpassen ===
% Polygon-Koordinaten transformieren
%Rotationsmatrix erzeugen
R = [cos(alphaInRad) sin(alphaInRad); -sin(alphaInRad) cos(alphaInRad)];
%Koordinatenursprung in Bildmitte
origin = [320 240];
%Einzelne Eckpunkte transformieren
for k = 1:4
vertex = [x(k) y(k)];
vertex = R * (vertex - origin)' + origin';
x_corrected(k) = vertex(1);
y_corrected(k) = vertex(2);
end
subplot(3,3,5), imshow(IMG_4_rotated), title('Punkttransformation'), hold on
plot(x, y, 'r+')
plot(x_corrected, y_corrected, 'g.')
=== ((3)) Polygon-Koordinaten an Begradigung anpassen ===
% Polygon-Koordinaten transformieren
%Rotationsmatrix erzeugen
R = [cos(alphaInRad) sin(alphaInRad); -sin(alphaInRad) cos(alphaInRad)];
%Koordinatenursprung in Bildmitte
origin = [320 240];
%Einzelne Eckpunkte transformieren
for k = 1:4
vertex = [x(k) y(k)];
vertex = R * (vertex - origin)' + origin';
x_corrected(k) = vertex(1);
y_corrected(k) = vertex(2);
end
subplot(3,3,5), imshow(IMG_4_rotated), title('Punkttransformation'), hold on
plot(x, y, 'r+')
plot(x_corrected, y_corrected, 'g.')
Deletions:
Deletions:
Additions:
>>{{image url="CBI01_KFZExpert.jpg" width="400" title="Das Programm KFZ-Expert" class="center"}}>>
>>{{image url="CBI02_Schritt1.jpg" title="Markierung der Eckpunkte" class="center" width="400"}}>>
>>{{image url="CBI03_Schritt2.jpg" title="Maskierung" width="400" class="center"}}>>
>>{{image url="CBI04_Schritt3.jpg" title="Begradigung" width="400" class="center"}}>>
>>{{image url="CBI02_Schritt1.jpg" title="Markierung der Eckpunkte" class="center" width="400"}}>>
>>{{image url="CBI03_Schritt2.jpg" title="Maskierung" width="400" class="center"}}>>
>>{{image url="CBI04_Schritt3.jpg" title="Begradigung" width="400" class="center"}}>>
Deletions:
>>{{image url="CBI02_Schritt1.jpg" title="Markierung der Eckpunkte" class="center" width="200"}}>>
>>{{image url="CBI03_Schritt2.jpg" title="Maskierung" width="300" class="center"}}>>
>>{{image url="CBI04_Schritt3.jpg" title="Begradigung" class="left" width="300" class="center"}}>>
Additions:
>>{{image url="CBI01_KFZExpert.jpg" width="300" title="Das Programm KFZ-Expert" class="center"}}>>
Deletions:
Additions:
>>{{image url="CBI03_Schritt2.jpg" title="Maskierung" width="300" class="center"}}>>
Deletions:
Additions:
>>{{image url="CBI02_Schritt1.jpg" title="Markierung der Eckpunkte" class="center" width="200"}}>>
Deletions:
Additions:
>>{{image url="CBI04_Schritt3.jpg" title="Begradigung" class="left" width="300" class="center"}}>>
Deletions:
Additions:
>>{{image url="CBI03_Schritt2_b.jpg" title="Maskierung" width="200" class="center"}}>>
Deletions:
Additions:
>>{{image url="CBI03_Schritt2_b.jpg" title="Maskierung" width="400" class="center"}}>>
Deletions:
Additions:
{{files}}
Additions:
%Ergebnis als Subplot eintragen
alphaInDeg = alphaInRad * 180 / pi;
%Subplot eintragen
alphaInDeg = alphaInRad * 180 / pi;
%Subplot eintragen
Deletions:
alphaInDeg= alphaInRad * 180 / pi;
%Subplot unten-links eintragen
Additions:
>>{{image url="CBI01_KFZExpert.jpg" width="400" title="Das Programm KFZ-Expert" class="center"}}>>
>>{{image url="CBI04_Schritt3.jpg" title="Begradigung" class="left" width="400" class="center"}}>>
>>{{image url="CBI04_Schritt3.jpg" title="Begradigung" class="left" width="400" class="center"}}>>
Deletions:
>>{{image url="CBI04_Schritt3.jpg" title="Begradigung" class="left" width="600" class="center"}}>>
Additions:
>>{{image url="CBI03_Schritt2.jpg" title="Maskierung" width="400" class="center"}}>>
Deletions:
Deletions:
Additions:
{{files}}
Deletions:
Additions:
CategoryTutoriumMobileEmbeddedIntelligence