Binarisierung

von Paul Vorbach, 22.01.2013Kommentare

In meiner Bachelorarbeit, die den Titel „Erstellung von TrueType-Fonts zu historischen Manuskripten“ trägt, stand ich vor dem Problem, wie Zeichen in gescannten Manuskripten am besten erkannt werden können und wie sie in ein Vektorformat überführt werden können. Dazu hat es sich als hilfreich erwiesen, solche Scans zunächst in eine binarisierte Form zu bringen. Pixelmengen lassen sich sehr einfach gruppieren, wenn es nur schwarze und weiße Pixel gibt.

Zunächst einmal kann man sich ohne Mühe einfache Verfahren ausdenken, die für jeden Pixel eines Bildes entscheiden, ob er schwarz oder weiß erscheinen soll. Das einfachste solche Verfahren ist, einen festen Schwellwert zu verwenden, nach dem das Bild aufgeteilt wird. Ist die Farbe in einem Pixel heller, so wird der Pixel weiß gefärbt, ist der Pixel dunkler, so wird der Pixel schwarz gefärbt.

Bei gescannten Dokumenten und besonders historischen Schriften steht man aber vor dem Problem, dass der Kontrast zwischen Schrift und Hintergrund (teilweise vergilbtes Papier oder Pergament) sehr klein werden können. Außerdem können einzelne Bildbereiche heller oder dunkler sein als andere. Deshalb lässt sich die Schrift mit einem festen Schwellwert nur noch sehr schlecht vom Hintergrund trennen.

Für solche Fälle existieren adaptive Verfahren, die jeweils nur die Umgebung um einen Pixel beim Ermitteln eines lokalen Schwellwerts betrachten. Diese Verfahren sind aber wesentlich aufwändiger als einfache Schwellwertverfahren. Leider existieren keine Programme, die out of the box Bilder adaptiv binarisieren können.

Diesen Umstand habe ich mir zum Anlass genommen, ein kleines Scala-Programm zu schreiben, das diesen Zweck erfüllt und mit einer kleinen GUI daherkommt. Zunächst einmal habe ich nur den Binarisierungsalgorithmus nach Sauvola implementiert. Weitere Verfahren sollen folgen.

Zur Installation benötigt man lediglich das Java Runtime Environment (JRE) 6 oder höher. Die Installation erfolgt über Java WebStart. Der Quelltext steht unter einer MIT-Lizenz und ist bei GitHub verfügbar.