Registriert seit: 2. Aug 2008
162 Beiträge
|
Re: Zahlen in Bild erkennen mit Pixelsearch - Genauigkeitspr
11. Mai 2010, 21:52
okay jetzt gibts schon wieder ein neues Problem.
Meine Idee ist es, jeder Ziffer eine Art Code zu geben durch die sie identifizierbar ist. Der Code einer Ziffer wird generiert durch deren Schwarz-Weiß Bild. In diese werden dann die Wechsel zwischen schwarzen und weißen Pixeln verarbeitet.
Der Code für die Ziffer 1 sieht dann so aus:
Ziffer_1 : array[0..9] of integer = (251, 1, 26, 1, 26, 1, 24, 13, 14, 13);
Auf menschlich: 251 weiße Pixel, auf diese folgt 1 schwarzes Pixel, dann kommen 26 weiße Pixel, dann 1 schwarzes usw.
Alle Zifferncodes:
Delphi-Quellcode:
Ziffer_1 : array[0..9] of integer = (251, 1, 26, 1, 26, 1, 24, 13, 14, 13);
Ziffer_2 : array[0..37] of integer = (250, 3, 6, 3, 14, 4, 5, 4, 14, 2, 6, 5, 14, 2, 6, 2, 1, 2, 14, 1, 6,
2, 2, 2, 14, 2, 4, 2, 3, 2, 14, 7, 4, 2, 15, 6, 4, 2);
Ziffer_3 : array[0..35] of integer = (250, 2, 7, 2, 15, 3, 7, 3, 14, 2, 10, 1, 14, 1, 5, 1, 5, 2, 13, 1, 5,
1, 5, 2, 13, 2, 3, 3, 3, 2, 14, 13, 16, 3, 2, 5);
Ziffer_4 : array[0..27] of integer = (230, 2, 23, 4, 22, 2, 2, 1, 20, 2, 4, 1, 18, 3, 5, 1, 17, 2, 7, 1, 17,
13, 14, 13, 22, 2, 26, 1);
Ziffer_5 : array[0..41] of integer = (232, 1, 16, 7, 3, 3, 14, 7, 3, 3, 14, 2, 3, 1, 6, 2, 13, 2, 3, 1, 6, 2,
13, 2, 3, 2, 5, 2, 13, 2, 3, 2, 4, 2, 14, 2, 3, 8, 14, 2, 4, 6);
Ziffer_6 : array[0..41] of integer = (226, 6, 18, 11, 16, 3, 2, 2, 2, 3, 14, 2, 3, 2, 5, 1, 14, 2, 3, 1, 6, 2,
13, 1, 4, 2, 5, 2, 13, 2, 3, 2, 4, 2, 14, 3, 2, 8, 15, 2, 3, 6);
Ziffer_7 : array[0..27] of integer = (222, 2, 25, 2, 25, 2, 9, 2, 14, 2, 6, 5, 14, 2, 4, 7, 14, 2, 2, 4, 19, 2,
1, 3, 21, 4, 23, 3);
Ziffer_8 : array[0..37] of integer = (250, 4, 2, 5, 15, 13, 14, 2, 3, 3, 4, 1, 14, 1, 4, 2, 5, 2, 13, 1, 4, 2, 5,
2, 13, 2, 3, 2, 5, 2, 13, 13, 15, 4, 2, 5, 24, 1);
Ziffer_9 : array[0..39] of integer = (225, 3, 22, 7, 3, 2, 14, 3, 2, 3, 3, 2, 14, 2, 5, 1, 4, 2, 13, 1, 6, 1, 4,
2, 13, 1, 6, 1, 4, 2, 13, 2, 4, 2, 3, 2, 15, 11, 17, 9);
Meine Idee ist es jetzt, dass wenn eins der Bilder mit einer Ziffer eingelesen wird, für dieses Bild solch ein Code erstellt wird. Dann wird der Code auf die größtmögliche Gemeinsamkeit mit den 9 definierten Codes überprüft. Die größte Gemeinsamkeit soll dann als Treffer angenommen werden.
Und hier ist jetzt mein Problem. Wie vergleiche ich den neu generierten Code mit den 9 vodefinierten auf die größte Ähnlichkeit?
Meine Folgende Lösung war leider von der Idee her gut, aber viel zu ungenau:
Delphi-Quellcode:
.....
for i := 0 to 34 do
begin
aktErgebnis := aktErgebnis + (strtoint(aktZiffer[i]) - Ziffer_3[i]); //Die Differenz jeder Stelle des Codes aufaddieren
end;
if abs(aktErgebnis) < abs(bestErgebnis) then //Die kleinste Differenz ist die gesuchte Zahl
begin
bestErgebnis := abs(aktErgebnis);
totalErgebnis := 3;
end
....
€: Ich suche diesmal keine Hilfe für das eigentliche Programmieren, sonder vielmehr logische, mathematische Ideen wie man die Codes am besten vergleicht!
|