Scans Nachbearbeiten

Posted on Wed 27 December 2023 in Computer & Electronics

Ich habe einen alten Trecker geerbt. Konkret ist es ein McCormick IHC 624. Baujahr 1969, 58PS und schön rot.

Nun bin ich nicht so der Traktorspezialist und so habe ich als erstes eine Betriebsanleitung organisiert, damit ich vor lauter Hebeln nicht völlig die Orientierung verliere.

Apropos verlieren – Handbücher verliere/verlege ich traditionell schneller, als eine unbeladene Afrikanische Schwalbe fliegen kann. Und deshalb war klar: das muss ich sofort scannen. Ich habe zwar einen schönen Einzugscanner, aber dann hätte ich das Handbuch zerschneiden müssen und das wollte ich nicht. Also lieber den Flachbettscanner nehmen. Damit die Rückseiten nicht durchscheinen, habe ich immer ein schwarzes Blatt Tonpapier dazwischen gelegt. So bekommt man schon ganz ordentliche Scans. Den Scanner habe ich auf 300DPI eingestellt und schon geht es los.

Der Einband ist im Gegensatz zum Inhalt farbig, deshalb habe ich Deckblatt und Rückseite separat eingescannt. Als nächstes dann den Inhalt in ein großes PDF scannen. Leider hat mir der blöde Scanner dann 3 Seiten vor Schluss erklärt, der Speicher sei voll und er werde den Vorgang nun beenden. Na toll! Also nochmal von vorn. Diesmal ca. in der Mitte aufhören und dann den Rest in ein eigenes PDF. Und dann die beiden Teile zu einem zusammenfügen:

pdftk part1.pdf part2.pdf cat output pages.pdf

Eigentlich wären wir nun fast fertig, aber in der Praxis zeigt sich meist, dass die Scans noch etwas nachbearbeitet werden müssen. Z.B. um dunkle Grauschleier loszuwerden, die Buchstaben etwas klarer zu bekommen und angeschnittene Ränder loszuwerden. Das könnte man alles in GIMP machen, aber wenn man viele Seiten hat ist das viel zu mühsam. Also besser in der Kommandozeile mit Imagemagick, pdftk und Co.. Und das wollen wir heute mal gemeinsam machen.

Als erstes müssen wir mal die ganzen Bilder aus dem PDF extrahieren:

pdfimages pages.pdf page
pdfimages front.pdf front
pdfimages back.pdf back

Nun haben wir einen Haufen *.ppm Files – eines pro Seite. Als nächstes schauen wir mal wie groß die so sind:

> file *.ppm
back.ppm:     Netpbm image data, size = 2400 x 3437, rawbits, pixmap
front.ppm:    Netpbm image data, size = 2400 x 3437, rawbits, pixmap
page-000.ppm: Netpbm image data, size = 2400 x 3437, rawbits, pixmap
page-001.ppm: Netpbm image data, size = 2400 x 3437, rawbits, pixmap
page-002.ppm: Netpbm image data, size = 2400 x 3437, rawbits, pixmap
[...]

Und so erfahre ich, dass jedes Bild das Format 2400x3437 hat. Schauen wir uns die Bilder alle mal an stellen wir schnell fest, dass der rechte Rand nicht perfekt ist. Da ist die Papierkante zu sehen:

Die wollen wir nicht sehen. Also schneiden wir die weg. Etwas herumprobieren ergab, dass ca. 3.3% weg müssen. Und die entfernen wir nun mit imagemagick:

for i in *.ppm; do mogrify -crop 96.7%x100%+0+0 $i; done

Besser:

Nun ist es so, dass man auf den meisten Flachbettscannern der Deckel so angebracht ist, dass man die gerade und ungeraden Seiten nicht in der gleichen Orientierung auflegen kann, weil die jeweils andere Seite dann mit den Scharnieren kollidiert. D.h. bei meinem Scanner haben die geraden Seiten die korrekte Orientierung und die ungerade Seiten stehen auf dem Kopf. Null Problemo – dann drehen wir die eben:

for i in page-{000..048..2}.ppm; do mogrify -rotate 180 $i ; done

Das Ergebnis sieht schon sehr manierlich aus. Allerdings hatten wir ja im vorigen Schritt die rechte Kante beschnitten und nun stimmt das Seitenverhältnis nicht mehr, wenn wir am Ende wieder A4 Format haben wollen. Also beschneiden wir nun die Unterkante ebenfalls um 3.3%:

for i in *.ppm; do mogrify -crop 100%x96.7%+0+1.6% $i ; done

Sehr gut – nun sehen die Seiten gut aus. Aber es gibt noch störende graue Artefakte in den Bereichen, die eigentlich weiß sein sollten. Das kann man leicht beheben, indem man eine sigmoidale Helligkeits- oder Kontrastkorrektur anwendet. In GIMP heißt das "curves" (im color Menü). In Imagemagick gibt es dazu die -sigmoidal-contrast Option. Diese braucht zwei Parameter: der Erste gibt an, wie stark die Korrektur ausfallen soll und der zweite bestimmt den Symmetriepunkt. Hier war ein bisschen Ausprobieren angesagt, bis das Ergebnis so ausfiel, wie ich es mir vorgestellt hatte. Am Ende habe ich dann alles so transformiert:

for i in page-*.ppm; do mogrify -sigmoidal-contrast 5,25%  $i ; done

Das sieht schon recht gut aus. Hier war viel Fingerspitzengefühl gefragt, damit man einen guten Mittelweg findet. D.h. dass die weißen Flächen möglichst hell werden und die schwarzen Buchstaben etwas kräftiger, ohne dass man gleichzeitig die Bilder total verhunzt. Perfekt ist es nicht, aber ich glaube ich kann mit dem Ergebnis leben.

Bei Titelblatt und Rückseite habe ich es tatsächlich manuell in GIMP gemacht und auch ein bisschen die Farbflächen retuschiert, damit alles gut aussieht. Alle Seiten nochmal kontrollieren und dann sind wir soweit, das alles wieder zu einem großen PDF zusammen zu schrauben.

Zunächst alles wieder ins PDF Format verwandeln:

for i in *.ppm; do convert $i -page a4 `basename -s .ppm $i`.pdf; done

Und dann zu einem PDF vereinen:

pdftk front.pdf page-*.pdf back.pdf cat output ../manual.pdf

Im PDF-Viewer öffnen und nochmal kontrollieren. Sieht alles gut aus. D.h. eigentlich sind wir fertig. Aber es wäre natürlich noch schön, wenn wir das PDF nicht nur lesen, sondern auch durchsuchen könnten. Dazu müssen wir es mit OCR (optical character recognition) laufen lassen. Ich verwende dazu ocrmypdf, welches seinerseits Tesseract als OCR-Engine verwendet:

ocrmypdf -l deu manual.pdf manual-ocr.pdf

Fertig!

Und zuguterletzt habe ich das alles in ein kleines Bash-Skript verpackt, damit es reproduzierbar ist. Das hilft auch dabei Parameter wie Beschnitt und Helligkeitskorrektur optimal einzustellen.