Otsu-Binarisierung mit Werterhaltung

8

Ich versuche, eine modifizierte Version des otsu-Binärisierungsalgorithmus zu implementieren. Ich versuche, Dokumentbilder zu binarisieren. Bei der Binärisierung möchte ich jedoch, dass das Objekt (in diesem Fall der Text) seinen ursprünglichen Graustufenwert beibehält, während der Hintergrund den Wert 255 annimmt. das heißt, weiß. Ich veröffentliche eine Beispielbildversion, die ich in einem Artikel gefunden habe.

Dies ist das Originalbild: Geben Sie hier die Bildbeschreibung ein

Dies ist das resultierende Bild, das ich erhalten möchte: Geben Sie hier die Bildbeschreibung ein

Könnte mir bitte jemand sagen, wie es in Matlab geht?

Kennzeichen
quelle
Sie möchten den riesigen grauen Fleck behalten?
Endolith
Ich möchte die ursprünglichen Werte aller Pixel beibehalten, deren Wert über dem Schwellenwert liegt. Das schließt in diesem Fall den Blob ein.
Markieren Sie
Matlab Quellcode für die Otsu-Binarisierung mit Werterhaltung.

Antworten:

8

Ich habe Matlab nicht zur Hand, aber hier ist, wie Sie es in OpenCV machen . Im folgenden Beispiel wird die Python-Oberfläche über Python (x, y) verwendet :

test = cv2.imread("test.jpg", 0)
(_, otsu) = cv2.threshold(test, 0.0, 255.0, cv2.THRESH_TOZERO_INV + cv2.THRESH_OTSU)
cv2.imshow('otsu', otsu)

Dies führt zu Ihrer gewünschten Ausgabe: Geben Sie hier die Bildbeschreibung ein

EDIT: Ich habe keine Kopie von Matlab, aber ich denke, so würden Sie es machen (vorausgesetzt, Sie haben die Image Processing Toolbox):

Verwenden Sie Graythresh , um den Otsu-Level zu erhalten, und setzen Sie dann alles über diesem Level auf Weiß (oder 255).

I = imread('doc.jpg');
I = rgb2gray(I);
otsuLevel = graythresh(I);
I(I > otsuLevel) = 255;

Ich hoffe, das hilft!

Mevatron
quelle
Ich brauche den Code in Matlab. Ich bin ein wenig neu in der Software, brauche also ein wenig Hilfe bei der Codierung
markieren Sie
@mark Eine mögliche Matlab-Lösung finden Sie in meiner Bearbeitung.
Mevatron
6

Mit Mathematica geht das ganz einfach:

img = ColorNegate@ColorConvert[Import["../Desktop/sample.jpg"], "Grayscale"]
ColorNegate@ImageMultiply[Binarize[img], img]

Das Negations- und Multiplikationsgeschäft besteht darin, die Beibehaltung des ursprünglichen Graustufenwerts sicherzustellen. Sie können dies leicht in jede Sprache übersetzen, denke ich.

Gefiltertes Ergebnis

Emre
quelle