Kurzausflug Speicherplatz

Wie ich im vorigen Beitrag schrieb, hatte ich aus Platzgründen die Scans als JPEG abgespeichert. Pro Scanseite macht das ca. 1,2 MB. Bei der Konvertierung arbeite ich im folgenden auf Bitmapebene, so das pro Scanseite 25MB anfallen.

Für jedes Zwischenergebnis braucht es also genug Platz.

Gerade drehen

Mein Scanner scannt im A4 Format und die Seiten habe ich als Doppelseiten gescannt, die wie folgt aussehen:



Leider erwartet jeder spätere Verarbeitungsschritt die  Seiten als Doppelseiten, also genau um 90° gedreht.

Hier hilft mir ImageMagick weiter, mit dem ich wie folgt im Verzeichnis ppm/ die neuen Bilder rotiere und gleichzeitig konvertiere. PPM ist ein Bitmapformat (kommt aus der Unix-Ecke). Da zum Beispiel unpaper dieses Format verarbeiten kann, sieht mein Aufruf so aus:
 
for i in *.jpg; do convert $i -rotate 90 ppm/$(basename $i ".jpg").ppm; done

Nun habe ich im Unterverzeichnis die korrekt gedrehten Bilder:



Doppelseiten auftrennen


Leider liegen meine Scans immer noch als Doppelseite vor. Mit unpaper kann ich die Doppelseiten auftrennen. Dazu erzeuge ich zum einen ein neues Verzeichnis ppm_single/ und rufe dann unpaper mit den File-Pattern "img%3d.ppm" auf. %3d gibt hierbei an, daß 3 Ziffern enthalten sind. Die Option "-op 2" splittet mir dann die Doppelseiten auf. Der komplette Aufruf lautet:

unpaper -op 2 ppm/img%03d.ppm ppm_single/img%03d.ppm

Der ganze Prozess dauert ein Weilchen und ich trinke erstmal 'nen Kaffee.

PS.: unpaper macht eigentlich noch ein paar Sachen mehr, zum Beispiel korrigiert es noch leichte Verdrehungen und entfernt Fliegendreck, lest dazu mal die Doku :)

Erstes PDF erzeugen


Da wir ja ein erstes Ergebnis haben wollen, bauen wir uns schnell die Seiten als PDF zusammen. Dazu wieder mit ImageMagick aus den PPMs ein JPEGs erzeugen:

for i in ppm_single/*.ppm; do convert $i jpg/$(basename $i ".ppm").jpg; done


Jetzt habe wir im Verzeichnis jpg/ alle Seiten als JPEG vorliegen. Diese müssen mit Hilfe von pdfjoin, einem Programm aus der TexLive-Distribution, zusammengefügt werden. Es gibt aber auch andere Möglichkeiten, zum Beispiel mit pdftk.

pdfjoin --outfile bilder_aus_dem_sachsenlande.pdf jpg/*.jpg

Das PDF hat 416 Seiten und ist 238MB groß. Wenn wir statt JPEG pdfjoin mit PNG genutzt hätten, wäre das PDF 1,6GB groß geworden.

Die Seitenaufteilung hat erstmal nur suboptimal funktioniert. Darum kümmern wir uns später nochmal.

DJVu erzeugen

Was ist denn DJVu?

Das ist ein krasses Kompressionsformat, ursprünglich für die Online-Präsentation von Bibliotheks- und Archivdaten entwickelt. Archive.org verwendet djvu für das Millon Book Project Hinter djvu stehen zwei Prinzipien:

  • Trenne Scans in Vorder- und Hintergrundebenen auf
  • Komprimiere jede der Ebenen mit dem bestmöglichen Verfahren

Eine Seite unseres gescanntes Buches besteht zum einen aus vergilbtem Papier, welches den Hintergrund darstellt. Dieser Hintergrund ist durch Farbverläufe, relativ weiche Übergänge und geringe Kontraständerungen gekennzeichnet. Der Hintergrund wird daher mit Wavelets kodiert, ähnlich wie JPEG2000 diese verwendet.

Zum anderen besteht die Seite aus Buchstaben die im Vergleich zur Umgebung einen sehr hohen Kontrast aufweisen. Dort interessiert es niemanden, ob diese innerhalb der Schrift leichte Farbnuancen aufweisen. Und vermutlich kommen auf der Seite auch viele gleiche Buchstaben vor. Diese Informationen werden ausgenutzt und die Buchstaben als Verweis auf eine Tabelle gespeichert.

Kurzum, djvu ist richtig krasses Zeugs und wir bekommen eine gegenüber PDF deutlich kleinere Datei hin. Für weitere Informationen schaut Euch djvulibre an. :)

Gut, gut, wie erzeuge ich das denn?


Auf djvulibre von der obengenannten Webseite (aber auch bei Linux-Distributionen in der Regel dabei) gibt es das Programm pdf2djvu. Ein PDF haben wir schon, und wir können folgenden Aufruf nutzen:

pdf2djvu --lossy -j0 --fg-colors=black --bg-subsample=4 -o bilder_aus_dem_sachsenlande.djvu bilder_aus_dem_sachsenlande.pdf



Alternativ können wir den Online-Konverter nutzen.

So, das war es erstmal, die fertige djvu-Datei  ist 160MB groß.

Demnächst geht es weiter mit der Korrektur der Seitentrennung, der OCR-Verarbeitung und wie wir uns langsam Richtung Ebook vortasten.

Update 2012-11-21


Besser als das Tool pdf2djvu ist djvudigital, weil es einen besseren Algorithmus zum Auftrennen der Bildebenen in Hinter- und Vordergrund benutzt. Leider benötigt djvudigital einen speziell angepassten Ghostscript.

Daher entschied ich mich statt aus dem PDF aus den Einzelseiten ein DJVU zu erzeugen. Dies geht mit dem Programm didjvu wie folgt:


didjvu bundle --output bilder_aus_dem_sachsenlande.djvu ppm_single/img*.ppm


Die erzeugte djvu-Datei ist nur noch 21MB groß, hier der Download-Link: https://www.dropbox.com/s/nzij79ulmuh64m7/bilder_aus_dem_sachsenlande.djvu

Viel Spaß beim Durchblättern, demnächst geht es weiter...