2015-01-06 19 views
5

Ich verwende den ImageMagick-Dienst, um das Quittungsbild vorzuverarbeiten, bevor ich die Tesseract-OCR-Engine zum Extrahieren von Texten verwende. Ich muss den Hintergrund der Quittungen entfernen. Ich habe durch Maskierung gegangen, um den Rand zu entfernen here. Aber ich kann die Maske für die Quittungen nicht erstellen.Entfernen der Quittungsbildgrenze mit ImageMagick

Allerdings habe ich versucht, Schatten aus den Quittungsbildern zu entfernen.

Anfangsbild (Beispiel Quittung)

enter image description here

convert input.png -colorspace gray \ 
     \(+clone -blur 0x2 \) +swap -compose divide -composite \ 
     -linear-stretch 5%x0% photocopy.png 

Nachdem der Code angewendet wird:

enter image description here

Ich habe den Code unten versucht, alle Farben, außer weiß zu machen zu schwarz, aber das scheint den Hintergrund von photocopy.png nicht komplett zu verdunkeln.

convert receipt.jpg -fill black -fuzz 20% +opaque "#ffffff" black_border.jpg 

enter image description here

Gibt es eine Möglichkeit, die Grenze des Eingangs Bild zu entfernen? Oder irgendwelche Masken aus dem Bild erstellen? Hinweis: Ich muss Rauschen und Rahmen für mehrere Bilder mit unterschiedlichen Hintergründen entfernen.

Antwort

1

Um Ihre Frage zu

„Gibt es eine Möglichkeit, die Grenze des Eingangs Bild zu entfernen? Oder erstellen Sie aus dem Bild, jede Art von Masken?“ zu beantworten

Die folgende Befehl (basierend auf Ihrem eigenen Code) erstellt ein Bild, das Sie verwenden können, um die Abmessungen einer anwendbaren Maske abzuleiten:

convert      \ 
    origscan.jpg    \ 
    -colorspace gray   \ 
    \(+clone 0 -blur 0x2 \) \ 
    +swap      \ 
    -compose divide   \ 
    -composite    \ 
    -linear-stretch 5%x0%  \ 
    -threshold 5%    \ 
    -trim      \ 
    mask-image.png 

können Sie diese Maske-Bild verwenden, um eine monochrome (schwarz) Maske zu erzeugen - in einem Befehl:

convert      \ 
    origscan.jpg    \ 
    -colorspace gray   \ 
    \(+clone 0 -blur 0x2 \) \ 
    +swap      \ 
    -compose divide   \ 
    -composite    \ 
    -linear-stretch 5%x0%  \ 
    -threshold 5%    \ 
    \(      \ 
     -clone 0    \ 
     -fill '#000000'  \ 
     -colorize 100   \ 
    \)      \ 
    -delete 0     \ 
    black-mask.png 

Hier werden die Ergebnisse der beiden oben genannten Befehle, die nebeneinander sind:

 

können Sie identify verwenden, um die Geometrie des mask-image.png sowie black-mask.png zu erhalten:

identify -format "%g\n" *mask*.png 
    2322x4128+366+144 
    2322x4128+366+144 

Die Bild-Leinwände sind also 2322 Pixel breit und 4128 Pixel hoch. Die sichtbaren Teile beider Bilder sind natürlich kleiner, nach unserer -trim Operation. (Der +366+144 Teil zeigt eine horizontal/vertikal von der oberen linken Ecke des Originalbildes ausgeglichen.)


Zusätzlicher Kommentar: Having said all dies: Sie wirklich in der Schaffung bessere Fotos aussehen sollen deine Quittungen!(Wenn Sie eine Kamera haben, die Bilder mit einer Höhe von 4128 Pixeln erstellen kann, sollte dies kein Problem sein. Wenn Sie so viele Quittungen verarbeiten müssen, wie Sie sagen, dann ist es vielleicht eine gute Idee, ein kleines Plattenglas zu erwerben Legen Sie es auf das Papier, damit es beim Fotografieren gerade wird.

+0

Code mit anderen Bildern ausprobiert, aber -trim scheint nicht für Bilder mit dunkleren Hintergründen zu arbeiten. Ich habe versucht, Schwellenwerte zu ändern, aber unterschiedliche Bilder erfordern unterschiedliche Schwellenwerte. Können Sie bitte andere Möglichkeiten zum Entfernen der Grenze vorschlagen? In letzter Zeit habe ich SWT 'Stroke Width Transform' gefunden, um Texte in natürlichen Bildern zu identifizieren. Kann dies über imagemagic geschehen, um den Textbereich irgendwie zu finden und andere Teile zu entfernen? Danke im Voraus. –

0

Wenn Sie ImageMagick auf einem Unix-ähnlichen System verwenden, können Sie mein Textreiniger-Skript ausprobieren.

textcleaner -f 20 -o 10 -e normalize UhSV6.jpg result.jpg 

enter image description here