Vorgeschlagene Vorverarbeitungsmethoden für OCR auf kreisförmigen Bildern

8

Hallo, dies ist mein Beispielbild. Ich werde bei solchen Bildern eine Echtzeit-Zeichenerkennung durchführen.

Ich habe versucht, SURF, SIFT, MSER und Template ohne Vorverarbeitung auf dem Originalbild abzugleichen. Ich kann Zeichen erkennen, aber wenn sich das Bild ändert, funktioniert diese Funktionserkennungsmethode nicht, da die Zeichen auf dem Bild nicht viele interessierende Punkte enthalten. Ich bin mir nicht ganz sicher, welche Art von Vorverarbeitung ich für eine höhere Genauigkeit durchführen soll.

Meine Frage ist also, welche Methoden ihr mir vorschlagen könnt, um die Zeichenerkennung mit höherer Genauigkeit durchzuführen.

Danke im Voraus.

Geben Sie hier die Bildbeschreibung ein

Anar Bayramov
quelle

Antworten:

8

Folgendes habe ich für einen Kunden getan (Was Sie fragen, ist dasselbe).

Angenommen, Sie haben Zugriff auf einen bestimmten Mustertyp im Bild (oder in der Mitte des Lochs), können Sie die Vorlage jederzeit erkennen, um die Position eines möglichen Unwarps zu ermitteln:

Mustervergleich

Beachten Sie, dass im transformierten Bild zwei Bereiche von Interesse definiert sind und der Bereich, in dem wir die Zeichen lesen möchten, der Torus ist, der zwischen zwei Kreisen liegt. Mit diesen Informationen könnten wir dieses Bild mithilfe einer inversen Polartransformation verziehen, um Folgendes zu erhalten:

inverse_polar_transform

Ich stelle auch den MATLAB-Code für diese Transformation in diesem Dateiaustauschbeitrag zur Verfügung .

Im nächsten Schritt liegen die zu lesenden Zeichen dank der Vorlagenübereinstimmung immer in der im obigen Bild definierten lokalen Region. Wenn Sie nun über eine angemessene Beleuchtung verfügen, ist die Zeichensegmentierung nichts anderes als ein trivialer Satz von Bildverarbeitungsvorgängen:

Zeichensegmentierung

Die erhaltenen verbundenen Komponenten werden schließlich in ein neuronales Netzwerk oder eine SVM eingespeist, um zuerst zu trainieren und dann zu klassifizieren. Dieser Teil besteht nur aus einer grundlegenden maschinellen Lernaufgabe, auf die ich hier nicht näher eingehen werde.

Vergessen Sie nicht, gut auf die Beleuchtung zu achten, da das Problem fast zur Hälfte gelöst ist.

Tolga Birdal
quelle
Danke für die Antwort! Stört es Sie, die inverse Polarfunktion zu teilen, um ein lineares Bild zu erhalten?
Anar Bayramov
1
Ich habe eine Beispielimplementierung in MATLAB FileExchange veröffentlicht. Sie finden es hier: mathworks.com/matlabcentral/fileexchange/48911
Tolga Birdal
@ TolgaBirdal Können Sie erklären, wie Sie die Zeichensegmentierung implementiert haben?
Ahasbini
Nun, es besteht aus lokalem Schwellenwert + Analyse verbundener Komponenten + Größenfilterung + dynamischer Programmierung, um den verbleibenden interessierenden Bereich in einzelne Zeichen zu unterteilen. Ich denke, jeder Schritt ist selbstbeschreibend :)
Tolga Birdal
1
ja es würde es verbinden. Dann könnte man die möglichen Teilungspunkte durchsuchen und den 'anhängenden' Text horizontal in disjunkte Teile aufteilen. Dies führt zu 'p', 'e', ​​'n' und 'd'. Um zu entscheiden, wo es zerhackt werden soll, kann man viele Techniken verwenden, einschließlich einer Form einer dynamischen Programmierung, um Einschränkungen global zu erfüllen. Ich werde jetzt nicht näher darauf eingehen. Ein einfacher gieriger Ansatz würde den Text nur von einem Punkt abschneiden, an dem die Zeichenbreite ausreichend groß ist und der Berührungspunkt einige Pixel beträgt.
Tolga Birdal