2016-07-04 22 views
0

enter image description hereExtrahieren von Daten digital

Ich habe 200 Kopien dieser Seite (15 * 10-Matrix), und ich habe alle Zahlen zu schreiben, von 0 bis 9 in jeder entsprechenden Zelle und dann diese Ziffern digital in einem separaten Bild extrahiert von (32 * 32 Pixel) für jede Ziffer, nachdem jede Seite einmal gescannt wurde. Wie kann ich das erreichen? Dies ist für meinen Forschungszweck erforderlich. Ich bin ein CS Student, also kann ich auch kodieren.

Update: Für Marke: Hier ist einer des gescannten Bildes

enter image description here

Dies ist für einige lokale Sprache (0 - 9) ..

Update 2:

Die Befehle für das vorherige Bild funktionieren gut, aber bei neuen Bildern wird etwas falsch (irgendeine Art von Versätzen). Ich füge das Bild unter an

Welche Änderungen schlagen Sie vor?

+0

Wie wäre es uns eine gescannte Seite geben, so können wir die Qualität sehen, Ausrichtung, Auflösung, Kontrast, den Sie zur Verfügung haben? –

+0

einfache Art und Weise: Installieren ImageJ, lesen Sie diese http://imagej.1557.x6.nabble.com/How-to-create-a-regular-grid-of-rectangular-ROI-s-td3685056.html, implementieren. Wenn Sie eine eigene Anwendung erstellen möchten, sollten Sie OpenCV oder eine andere Bildverarbeitungsbibliothek verwenden. Dies ist eine sehr einfache Aufgabe, die jede Bibliothek lösen kann. – Piglet

+0

@ Mark Setchell - Siehe mein Beitrag aktualisiert – user3366497

Antwort

1

aktualisiert Antwort

Ich habe Feedback genommen und verbessert den Algorithmus der folgenden bash Skript jetzt ...

#!/bin/bash 
################################################################################ 
# dice 
# 
# Trim borders off an image (twice) and then dice into 10x15 cells. 
# 
# Usage: ./dice image 
################################################################################ 
# Pick up image name from first parameter 
image="$1" 
echo DEBUG: Processing image $image... 

# Apply median filter to remove noisy black dots around image and then get the 
# dimensions of the "trim box" - note we don't use the (degraded) median-filtered image in 
# later steps. 
trimbox=$(convert "$image" -median 9x9 -fuzz 50% -format %@ info:) 
echo DEBUG: trimbox $trimbox 

# Now trim original unfiltered image into stage1-$$.png (for debug) 
convert "$1" -crop $trimbox +repage stage1-$$.png 
echo DEBUG: Trimmed outer: stage1-$$.png 

# Now trim column headings 
convert stage1-$$.png -crop 2000x2590+120+190 +repage stage2-$$.png 
echo DEBUG: Trimmed inner: stage2-$$.png 

# Now slice into 10x15 rectangles 
echo DEBUG: Slicing and dicing 
convert stage2-$$.png -crop [email protected] +repage rectangles-%03d.png 

# Now trim the edges off the rectangles and resize all to a constant size 
for f in rectangles*png; do 
    echo DEBUG: Trimming and resizing $f 
    trimbox=$(convert "$f" -median 9x9 -shave 15x15 -bordercolor black -border 15 -threshold 50% -floodfill +0+0 white -fuzz 50% -format %@ info:) 
    echo DEBUG: Cell trimbox $trimbox 
    convert "$f" -crop $trimbox +repage -resize 32x32! "$f" 
done 

Hier sind die resultierenden Zellen - das heißt 150 separate Bilddateien. Ich habe einen roten Rahmen um die einzelnen Zellen/Dateien setzen, so dass Sie ihr Ausmaß sehen können:

enter image description here

Original-Antwort

ich tun würde, dass mit ImageMagick, die auf freie und installiert ist die meisten Linux-Distributionen und ist auch für OSX und Windows verfügbar. Es gibt Perl-, PHP-, Java-, Knoten-, .NET-, Ruby-, C/C++ - Bindungen, auch wenn Sie diese Sprachen bevorzugen. Hier verwende ich die Befehlszeile in Terminal.

Erste Aufgabe ist es Lärm loszuwerden und schneiden Sie die äußeren Kanten:

convert scan.jpg -median 3x3 -fuzz 50% -trim +repage trimmed1.png 

enter image description here

nun wieder trimmen, um loszuwerden äußeren Rahmen und Spaltentitel über die Spitze:

convert trimmed1.png -crop 2000x2590+120+190 +repage trimmed2.png 

enter image description here

jetzt int teilen o 10 Zellen von 15 Zellen und speichern als rectangles-nnn.png

convert trimmed2.png -crop [email protected] rectangles-%03d.png 

prüfen, was wir haben - ja, 150 Bilder:

ls -l rect* 

rectangles-000.png rectangles-022.png rectangles-044.png rectangles-066.png rectangles-088.png rectangles-110.png rectangles-132.png 
rectangles-001.png rectangles-023.png rectangles-045.png rectangles-067.png rectangles-089.png rectangles-111.png rectangles-133.png 
rectangles-002.png rectangles-024.png rectangles-046.png rectangles-068.png rectangles-090.png rectangles-112.png rectangles-134.png 
rectangles-003.png rectangles-025.png rectangles-047.png rectangles-069.png rectangles-091.png rectangles-113.png rectangles-135.png 
rectangles-004.png rectangles-026.png rectangles-048.png rectangles-070.png rectangles-092.png rectangles-114.png rectangles-136.png 
rectangles-005.png rectangles-027.png rectangles-049.png rectangles-071.png rectangles-093.png rectangles-115.png rectangles-137.png 
rectangles-006.png rectangles-028.png rectangles-050.png rectangles-072.png rectangles-094.png rectangles-116.png rectangles-138.png 
rectangles-007.png rectangles-029.png rectangles-051.png rectangles-073.png rectangles-095.png rectangles-117.png rectangles-139.png 
rectangles-008.png rectangles-030.png rectangles-052.png rectangles-074.png rectangles-096.png rectangles-118.png rectangles-140.png 
rectangles-009.png rectangles-031.png rectangles-053.png rectangles-075.png rectangles-097.png rectangles-119.png rectangles-141.png 
rectangles-010.png rectangles-032.png rectangles-054.png rectangles-076.png rectangles-098.png rectangles-120.png rectangles-142.png 
rectangles-011.png rectangles-033.png rectangles-055.png rectangles-077.png rectangles-099.png rectangles-121.png rectangles-143.png 
rectangles-012.png rectangles-034.png rectangles-056.png rectangles-078.png rectangles-100.png rectangles-122.png rectangles-144.png 
rectangles-013.png rectangles-035.png rectangles-057.png rectangles-079.png rectangles-101.png rectangles-123.png rectangles-145.png 
rectangles-014.png rectangles-036.png rectangles-058.png rectangles-080.png rectangles-102.png rectangles-124.png rectangles-146.png 
rectangles-015.png rectangles-037.png rectangles-059.png rectangles-081.png rectangles-103.png rectangles-125.png rectangles-147.png 
rectangles-016.png rectangles-038.png rectangles-060.png rectangles-082.png rectangles-104.png rectangles-126.png rectangles-148.png 
rectangles-017.png rectangles-039.png rectangles-061.png rectangles-083.png rectangles-105.png rectangles-127.png rectangles-149.png 
rectangles-018.png rectangles-040.png rectangles-062.png rectangles-084.png rectangles-106.png rectangles-128.png 
rectangles-019.png rectangles-041.png rectangles-063.png rectangles-085.png rectangles-107.png rectangles-129.png 
rectangles-020.png rectangles-042.png rectangles-064.png rectangles-086.png rectangles-108.png rectangles-130.png 
rectangles-021.png rectangles-043.png rectangles-065.png rectangles-087.png rectangles-109.png rectangles-131.png 

Blick auf den ersten paar:

enter image description here enter image description here

Sie können diese 3 Schritte in 1 so machen:

convert scan.jpg -median 3x3 -fuzz 50% -trim +repage \ 
    -crop 2000x2590+120+190 +repage     \ 
    -crop [email protected] rectangles-%03d.png 

Sie möchten vielleicht ein paar Pixel aus jeder Seite jedes Bild rasieren und die Größe mit so etwas wie (nicht getestet) bis 32x32:

mogrify -shave 3x3 -resize 32x32! rectangles*png 
+0

Wow !!! Danke für die Hilfe! Ich werde das versuchen und werde Sie im Falle von irgendwelchen Fehlern/Problemen informieren ... Vielen Dank :) – user3366497

+0

Hallo Markus! Ich habe es versucht, es funktioniert ganz gut. Das einzige Problem, das ich jetzt habe, ist, dass einige Zeilen auch mit einigen Bildern kommen ... Also gibt es irgendeinen Weg, so dass wir nach dem zweiten Schritt die Matrix löschen können (15 * 10) ohne den Inhalt innerhalb jeder Zelle zu beeinflussen, so dass schließlich jedes Bild frei ist von irgendwelchen Arten von Linien? – user3366497

+1

Versuchen Sie 'mogrify -save 5x5 -resize 32x32 laufen zu lassen! + repage Rechtecke * png' am Ende, um alle Kanten zu trimmen und sie zu 32x32 Pixel Quadraten zu machen. –