Dienstag, 25. Juni 2013

Binarisierung

Vorwort


Mit der Binarisierung ist das Überführen eines Farb- oder Graustufenbildes in eine monochrome, dh. nur schwarze oder weiße Pixel enthaltene Dartsellung.

Gescannte Vorlagen binarisiert man aus zwei Gründen, zum einen sparen monochrome Bilder Speicherplatz, zum anderen soll mit der Binarisierung versucht werden, den Kontrast der Scanvorlagen so zu erhöhen, daß eine eindeutige Zuordnung zwischen Vordergrund und Hintergrund möglich ist.

Schwierig bis unsinnig ist die Binarisierung dann, wenn man mehrfarbige Schrift ev. sogar auf mehrfarbige Hintergründe hat. Auf dieses Problem gehe ich in einem zukünftigen Beitrag ein. Nicht sinnvoll ist Binarisierung von Photos (abgesehen von einer künstlerisch gewollten Gestaltung).

Schwellwert-Variante


Das einfachste Verfahren ist das Schwellwertverfahren. Dazu wandeln wir das Eingangsbild im RGB-Modus zum Beispiel nach der Formel

  Y = 0.212671 * R + 0.715160 * G + 0.072169 * B;


in ein Graustufenbild um.
(aus: ITU-R Recommendation BT.709, Basic Parameter Values for the HDTV
Standard for the Studio and for International Programme Exchange (1990),
[formerly CCIR Rec. 709], ITU, 1211 Geneva 20, Switzerland.)

Wenn wir nun einen geeigneten Schwellwert zwischen 0.0 und 1.0 finden, haben wir eine einfache Binarisierung erreicht, wie sie zum Beispiel Gimp anbietet.

Globale vs. lokale Anwendung


Der Nachteil des Schwellwertverfahrens wird dann deutlich, wenn wir annehmen der optimale Schwellwert wäre 0.5 und die Schrift ist grau mit Wert 0,5 auf dunklem Hintergrund im ersten Teil des Bildes und weiß mit Wert 1,0 auf hellem Hintergrund mit Wert 0,5 des anderen Teil des Bildes. Würden wir einen globalen Schwellwert anwenden, würde ein Teil der Schrift dann untergehen.
Graustufenbild s/w-Bild mit globalem Threshold
Würden wir stattdessen immer die lokale Umgebung eines Pixels betrachten, zB. 30x30 Pixel um den aktuellen herum, würde das Ergebnis so aussehen:
lokaler Threshold

Nachteilig bei lokalen Verfahren ist die deutlich höhere Rechenzeit, da für jeden Pixel die nähere Umgebung angeschaut werden muß.

Verschiedene Verfahren

Es gibt etliche Verfahren, den "optimalen" Schwellwert, sowohl global, wie auch lokal zu bestimmen. Als Test habe ich das oben schon gezeigte Eingangsbild genommen. In der Praxis hat sich lokales Sauvola mit Fenster von 30x30 Pixeln bewährt.

Hier die Ergebnisse:

gescannt
niblack local 30x30, 0,2
Sauvola global
Sauvola local, 30x30
Gimp, threshold







Kurzfassung Algorithmus Niblack

Beim niblack-Algorithmus, wird der Mittelwert m und die Standardabweichung s über alle Pixelwerte gebildet und nach folgender Vorschrift angewandt:

T = m + K* s

mit K=0,2

Wenn der Pixelwert P > T ist wird er weiß eingefärbt, sonst schwarz.

Kurzfassung Algorithmus Sauvola

Bei Sauvola sieht die Formel ein klein wenig anders aus:

T = m + ( 1 + (0,6 * (s / r - 1.0))

mit r = 128 für 256 Grauwerte.

Weiterführende Infos

Ebenfalls einen guten Eindruck der verschiedenen Verfahren bietet Stackoverflow.
Und  bei Sezgin and Sankur findet man im "Survey over image thresholding techniques and quantitive performance evaluation", Journal of Electronic Imaging 13(1), 146-165 (January 2004) eine Überblicksanalyse.