AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Zahlen in Bild erkennen mit Pixelsearch - Genauigkeitsprob.
Thema durchsuchen
Ansicht
Themen-Optionen

Zahlen in Bild erkennen mit Pixelsearch - Genauigkeitsprob.

Offene Frage von "MaToBe"
Ein Thema von MaToBe · begonnen am 7. Mai 2010 · letzter Beitrag vom 28. Mai 2010
Antwort Antwort
Seite 1 von 3  1 23      
MaToBe

Registriert seit: 2. Aug 2008
162 Beiträge
 
#1

Zahlen in Bild erkennen mit Pixelsearch - Genauigkeitsprob.

  Alt 7. Mai 2010, 15:31
Hallo

ich möchte die Zahlen aus den unten angehägten Bildern eindeutig bestimmen.

Als Idee habe ich mir gedacht...zähl doch einfach die schwarzen Pixel. Gemacht getan und funktioniert...aber eben nur fast.

Leider haben die Zahlen 5 und 6 genau die gleiche Anzahl von Pixel.

Außerdem hat leider nicht jede Zahl 6 die gleiche schwarze Pixelanzahl. Die eine 6 hat zB 51 Pixel und die 2te 6 57 Pixel. 57 Pixel hat aber auch schon die 8 wodurch die 6 als 8 erkannt werden würde.

Was kann ich da tun?

MFG Matobe

Im Anhang ist mein Testprogramm und die Bilder.
Angehängte Dateien
Dateityp: rar project1_954.rar (218,6 KB, 82x aufgerufen)
  Mit Zitat antworten Zitat
blackfin
(Gast)

n/a Beiträge
 
#2

Re: Zahlen in Bild erkennen mit Pixelsearch - Genauigkeitspr

  Alt 7. Mai 2010, 15:42
Ist vielleicht ein wenig zuviel des Guten, aber wenn es um Zahlenerkennung allgemein geht, hilft dir vielleicht diese Seite was:

Lipfert Zimmermann (FH Regensburg) - Zahlenerkennung

Wenn es jetzt nicht allzu viele unterschiedliche Varianten gibt, könntest du ja erstmal probieren, das vorhandene Bild mit einem Referenz-Bild zu vergleichen.

Ein einfacher Verusch wäre z.B.:
Du rechnest das Bild erstmal in Schwarz weiss (nicht graustufen!) um und vergleichst dann jeden Pixel mit jedem Pixel deiner Referenz-Zahlen-Bilder. (diese sind natürlich auch schwarz-weiss)
Das Bild, dass die meisten "Pro Pixel"-Übereinstimmungen hat, müsste die gesuchte Zahl sein.

Als zweiten Versuchs-Schritt würde ich die Referenz-Bilder als auch das zu untersuchende Bild erstmal im Programm "freistellen", also alle Randpixel beschneiden, so dass nur noch die Form übrigbleibt. Somit kannst du schonmal nur verschobene Zahlen erkennen.
Taste dich dazu einfach von allen vier Seiten an die Zahl heran. Wenn ein Pixel ungleich weiss (oder schwarz ist, je nachdem wie du s/w umrechnest), merk dir den Beschneidungswert und beschneide dann das bild dementsprechend von allen vier Seiten. Dann untersuch die Pixel-Übereinstimmungen wie in Schritt 1.
  Mit Zitat antworten Zitat
MaToBe

Registriert seit: 2. Aug 2008
162 Beiträge
 
#3

Re: Zahlen in Bild erkennen mit Pixelsearch - Genauigkeitspr

  Alt 10. Mai 2010, 12:28
hab das bild / die bilder in schwarz weiß umgerechnet. Totz ausprobieren von verschiedenen Toleranzwerten gibt es immer noch ein zu unklares Ergebnis, so dass zum Teil Ziffern falsch oder garnicht erkannt werden.

Hat jemand ne Idee?
  Mit Zitat antworten Zitat
MaToBe

Registriert seit: 2. Aug 2008
162 Beiträge
 
#4

Re: Zahlen in Bild erkennen mit Pixelsearch - Genauigkeitspr

  Alt 10. Mai 2010, 18:48
Ich gehe jetzt einer anderen Idee nach... allerdings stehe ich gerade voll auf dem Schlauch.

Kann mir einer sage warum bei dieser Prozedure sich das Programm aufhängt ?? Verhalten wie bei eine Endlosschleife aber ich seh keine ?!?

Delphi-Quellcode:
procedure TfrmMain.btnCodeClick(Sender: TObject);
var ID : string;
    x, y : integer;
begin
   ID := '';
   for x := 0 to Image.Width - 1 do
   begin
     for y := 0 to Image.Height - 1 do
     begin
       if Image.Canvas.Pixels[x,y] = clBlack then
       begin
           ID := ID + 'B';
       end
       else
       begin
           ID := ID + 'W';
       end;
     end;
   end;
   edtCode.Text := ID;
end;
PS: Hab extra ein Bild mit wenig Pixel genommen als Test.
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: Zahlen in Bild erkennen mit Pixelsearch - Genauigkeitspr

  Alt 10. Mai 2010, 18:59
Über wie viele Pixel reden wir, wenn es um "wenig" geht? (Ist ja alles relativ .) Canvas.Pixels[] ist an sich schon nicht der Turbomode unter den Möglichkeiten an Farben zu kommen, und auch das sukzessive zusammenbauen eines Strings auf diese Weise ist sehr fragwürdig. Beides sollte hier bis ein paar zig hundert Pixel zwar noch im Sekunden-Bereich erledigt sein, aber die Pixelanzahl kann ganz flott sehr üppig sein, und dann kann ich mir schon vorstellen, dass das einige Zeit brauchen kann.

Wenn wir hier über Thumbnailgrößen von ~80x80 reden (immerhin schon 6400 Pixel!), sollte das auf einem PC >486er aber schon in <1min durch sein. Wie ist's denn mit wirklich mickrigen Bitmaps? So 16x16 Pixel? Oder auch mal 8x8?
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
MaToBe

Registriert seit: 2. Aug 2008
162 Beiträge
 
#6

Re: Zahlen in Bild erkennen mit Pixelsearch - Genauigkeitspr

  Alt 10. Mai 2010, 19:16
das Testbild hat 7x5 pixel ;D
  Mit Zitat antworten Zitat
Flips

Registriert seit: 17. Feb 2005
Ort: Sankt Wendel
491 Beiträge
 
Delphi 7 Professional
 
#7

Re: Zahlen in Bild erkennen mit Pixelsearch - Genauigkeitspr

  Alt 10. Mai 2010, 19:48
Link

Ist zwar nicht mehr so auf dem neuesten Stand was den Code angeht aber ich denke für reine Zahlenerkennung ideal und auch einfacher als gleich ne Kohonen-Map zu nehmen.
Philipp F.
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#8

Re: Zahlen in Bild erkennen mit Pixelsearch - Genauigkeitspr

  Alt 10. Mai 2010, 20:01
Zitat von MaToBe:
das Testbild hat 7x5 pixel ;D
Das Image auch? An deiner Schleife kann es ja nun nicht liegen, also muss irgend etwas mit dem Image sein. Ich würde auch eher Image.Bitmap nehmen. Und Flips' Beitrag ist auch gut, weil so simple Verfahren ab gewisser (geringer) Qualität des Materials nicht mehr zuverlässig arbeiten können, bzw. auch bei entsprechender Uneindeutigkeit im Material (gerade bei Fotos/Scans müssen 2x der selbe Buchstabe nicht unbedingt pixelgleich sein z.B.).
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
MaToBe

Registriert seit: 2. Aug 2008
162 Beiträge
 
#9

Re: Zahlen in Bild erkennen mit Pixelsearch - Genauigkeitspr

  Alt 11. Mai 2010, 13:38
ich habe genau den Code oben mal in mein anderes "Testprogramm" integiert, da funktioniert er...

Hab aber jetzt ein neues Problem. Nach schwarzen Pixeln zu suchen ist ja einfach => clBlack...

Aber wie bekomm ich den exakten Farbwert von dem Gelb der Bilder? clYellow funktioniert nicht und den Farbwert den ich per Gimp herausgefunden habe (Farbwert = fac953) funkioniert auch nicht wenn ich einfach
Delphi-Quellcode:
$fac953
Image.Canvas.Pixels[m,n] = $fac953
schreibe.
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#10

Re: Zahlen in Bild erkennen mit Pixelsearch - Genauigkeitspr

  Alt 11. Mai 2010, 14:39
Unter anderem aus solchen Gründen wandelt man Bilder für sowas ganz gern in s/w um
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:19 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz