Schnelle Bildschwellenbildung

Was ist eine schnelle und zuverlässige Möglichkeit zur Schwellenwert-Bilder mit möglichen Unschärfen und nicht-gleichmäßige Helligkeit?

Beispiel (Unschärfe, aber gleichmäßige Helligkeit):

Schnelle Bildschwellenbildung

Weil das Bild ist nicht garantiert gleichmäßige Helligkeit, es ist nicht möglich, mit einer festen Schwelle. Einer adaptiven Schwelle arbeitet, in Ordnung, aber wegen der Unschärfe schafft es Brüche und Verzerrungen der Funktionen (hier werden die wichtigsten Funktionen sind die Sudoku-stellig):

Schnelle Bildschwellenbildung

Ich habe auch versucht mit Hilfe des Histogramm-Entzerrung (Verwendung von OpenCV ist equalizeHist - Funktion). Es erhöht den Kontrast, ohne die Verringerung der Unterschiede in der Helligkeit.

Die beste Lösung, die ich gefunden habe, ist die Teilung des Bildes durch seine morphologische Schließung (Kredit dieser Beitrag), um die Helligkeit uniform, dann renormalize, dann verwenden Sie eine Feste Schwelle (mit Otsu ' s Algorithmus zur Auswahl des optimalen threshold-level):

Schnelle Bildschwellenbildung

Hier ist der code für diese in OpenCV für Android:

Mat kernel = Imgproc.getStructuringElement(Imgproc.MORPH_ELLIPSE, new Size(19,19));
Mat closed = new Mat(); //closed will have type CV_32F
Imgproc.morphologyEx(image, closed, Imgproc.MORPH_CLOSE, kernel);
Core.divide(image, closed, closed, 1, CvType.CV_32F);
Core.normalize(closed, image, 0, 255, Core.NORM_MINMAX, CvType.CV_8U);
Imgproc.threshold(image, image, -1, 255, Imgproc.THRESH_BINARY_INV
    +Imgproc.THRESH_OTSU); 

Dies funktioniert gut, aber die schließen-operation ist sehr langsam. Die Reduzierung der Größe des strukturierenden Elements erhöht die Geschwindigkeit, verringert aber die Genauigkeit.

Edit: basierend auf den DCS-Vorschlag, versuchte ich mit einem high-pass-filter. Ich entschied mich für den Laplace-filter, aber ich würde erwarten, dass ähnliche Ergebnisse mit Sobel-und Scharr-Filter. Der filter nimmt Hochfrequenz-Störungen in den Bereichen, die nicht die Merkmale enthalten, und Sie leidet unter ähnlichen Verzerrung der adaptiven Schwelle wegen der Unschärfe. es dauert auch etwa so lange als der Schließvorgang. Hier ist ein Beispiel mit einem 15x15-filter:

Schnelle Bildschwellenbildung

Edit 2: Basierend auf AruniRC die Antwort, die ich verwendet, Canny Kantendetektion auf dem Bild mit den vorgeschlagenen Parametern:

double mean = Core.mean(image).val[0];
Imgproc.Canny(image, image, 0.66*mean, 1.33*mean);

Ich bin nicht sicher, wie zuverlässig automatisch fine-Tuning der Parameter zu gelangen stellen.

Schnelle Bildschwellenbildung

InformationsquelleAutor der Frage 1'' | 2013-03-22

Schreibe einen Kommentar