# Gescanntes Bild analysieren



## miras (14. August 2011)

Hy, 
Ich möchte mithilfe von Java den Inhalt eines Bildes analysieren. Die Bilder beinhalten immer einen Text mit den gleichen Schlüssel und einem Wert. 

Beispiel Autobrief: Schlüssel PS -> Wert xxx PS. 
Gibt es eine Möglichkeit ein Bild nach einem Schlüssel, hier PS, auszuwerten********
Ich muss gestehen das ich in diesem Bereich noch absolut keine Ahnung habe....

Ziel des ganzen ist ein Program, welches eingescannte Bilder (hier z.B. eines Autobriefes)
analysiert und die gewonnen Werte dann weiternutzen kann.

Vielen Dank für die Hilfe


----------



## Fabio Hellmann (14. August 2011)

Hi,
ja es gibt eine Möglichkeit das zu machen. Dafür musst du den ByteCode des Bildes analysieren. Dieser besteht immer aus den Blöcken (xxx (rot), xxx (grün), xxx (blau)). Wenn du diese Blöcke zusammenführst, entseht dein Bild. Was du jetzt machen musst, ist die Schrift via den FarbByteCode zu finden.

So ungefähr siet ein ByteCode eines Bildes aus:

```
0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,255,255,255,255,255,255,255,0,0,0,
0,0,0,255,255,255,255,255,255,255,0,0,0,
0,0,0,255,255,255,255,255,255,255,0,0,0,
0,0,0,255,255,255,255,255,255,255,0,0,0,
0,0,0,255,255,255,255,255,255,255,0,0,0,
0,0,0,255,255,255,255,255,255,255,0,0,0,
0,0,0,255,255,255,255,255,255,255,0,0,0,
0,0,0,255,255,255,255,255,255,255,0,0,0,
0,0,0,255,255,255,255,255,255,255,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0
```
Das würde jetzt bei diesem Beispiel ein Bild mit einem Schwarzen Rahmen und weißen Inhalt sein. 11px Hoch & 4px Breit.

Ich sag dir gleich, dass das wirklich nicht einfach ist.

Grüße

Fabio


----------



## timestamp (14. August 2011)

Du müsstest am besten nach vorgefertigten Bibliotheken zur Schrifterkennung suchen. Selbst eine zu schreiben dürfte ziemlich lange Dauern. Alternativ könntest du, wenn immer die gleiche Schriftart vorliegt, eine einfacherere Mustererkennung durchführen.


----------



## SE (14. August 2011)

Also wenn es um Mustererkennung in Bild-Daten geht solltest du dir mal das Thema Houghman-Transformation ansehen. Sehr kompliziert , viel Mathe , aber das sehr effektiv und genau *erfolgsrate bei über 90%*.
Wenn es etwas einfacher sein darf : mit sog. Raster-Matrizen über das eingescannte Bild gehen. Dafür hätte ich sogar noch Code rumliegen *ziemlich unsauber ... aber funktionsfähig*.
Das Problem : die Qualität von gescannten Bildern kan stark schwanken so das du erstmal einen Filter bräuchtest der dir aus einem Input-Bild beliebiger Qualität ein Output-Bild generiert welches eine nahezu immer gleiche Qualität hat. Nur dann kannst du effektiv mit Raster-Matrizen arbeiten.
Dabei arbeitest du aber nicht dierekt mit Bildern sondern mit in der Matrix festgelegten Punkten welche auf vorhandensein im Input geprüft werden. Das spart Rechenzeit , ist aber fehleranfälliger. Je enger die Fix-Punkte in der Matrix angeordnet sind desto größer der Rechenaufwand , desto geringer jedoch die Fehlerquote.

Allgemein wird dieses verfahren *egal wie es bewerkstelligt wird* als OCR bezeichnet. OCR steht für Optical Character Recognition , auf deutsch etwa Optische Zeichenerkennung.

Wenn man allerdings bei google nach "java ocr" googled bekommt man einen großteil nur Captcha-Generatoren und deren Gegenstücke Captcha-Braker. Das hilft dir allerdings bei der maschinellen Verarbeitung von Fahrzeugbriefen nur relativ wenig.


----------



## genodeftest (14. August 2011)

Du solltest dir auf jeden Fall Literatur dazu besorgen (oder irgendwie andere theoretische Grundlagen, z.B. an Unis).

Lehrstuhl für Mustererkennung der Uni Erlangen-Nürnberg: http://www5.informatik.uni-erlangen.de/


----------



## Thomas Darimont (16. August 2011)

Hallo,

suche mal nach OCR Form Processing, oder OCR gestützte Formularverarbeitung, maschinelle Formularverarbeitung.

Ansonsten würde ich versuchen eine Bibliothek zu finden, die OCR Funktionalität mitbringt (oder zumindest die Grundfunktionalität für Bildanalyse bietet) statt diese selber zu entwickeln. Schau dir mal http://code.google.com/p/tesseract-ocr/ an. Dafür gibts Java JNI: http://code.google.com/p/tesjeract/ bzw. JNA Wrapper:  http://tess4j.sourceforge.net/

Ansonsten wäre  OPENCV (http://opencv.willowgarage.com/wiki/) sicherlich auch einen Blick wert.

Gruß Tom


----------



## miras (19. August 2011)

Vielen Dank für die Antworten, ihr habt mir sehr weitergeholfen. 

THX


----------



## Fabio Hellmann (19. August 2011)

Keine Ursache. Kannst du das Thema dann bitte noch als erledigt markieren, Danke.


----------

