Ich habe in den letzten Tagen versucht, ein Sudoku-Gitter aus einem Bild zu erhalten, und ich habe mich bemüht, die kleineren Quadrate des Gitters zu erhalten. Ich arbeite an dem Bild unten. Ich dachte, die Verarbeitung des Bildes mit einem schlauen Filter würde gut funktionieren, aber das tat es nicht und ich konnte nicht jede Kontur jedes Quadrats erhalten. Ich habe dann den adaptiven Schwellenwert, das Otsu und einen klassischen Schwellenwert auf die Probe gestellt, aber jedes Mal konnte es einfach nicht jedes kleine Quadrat erfassen.
Das letzte Ziel ist es, die Zellen, die eine Zahl enthalten, zu erhalten und die Zahlen mit Pytorch zu erkennen. Ich hätte also gerne ein paar saubere Bilder der Zahlen, damit die Erkennung nicht schief geht :)
Hätte jemand eine Idee, wie dies erreicht werden kann? Vielen Dank im Voraus! : D.
Antworten:
Hier ist eine mögliche Lösung:
Erhalten Sie ein Binärbild. Bild in Graustufen und adaptiven Schwellenwert konvertieren
Filtern Sie alle Zahlen und Rauschen heraus, um nur Kästchen zu isolieren. Wir filtern anhand des Konturbereichs , um die Zahlen zu entfernen, da wir nur jede einzelne Zelle wollen
imutils.contours.sort_contours()
mit dem Parametertop-to-bottom
undleft-to-right
Hier ist das anfängliche Binärbild (links) und herausgefilterte Zahlen + reparierte Gitterlinien + invertiertes Bild (rechts)
Hier ist eine Visualisierung der Iteration jeder Zelle
Die erkannten Zahlen in jeder Zelle
Code
Hinweis: Die Sortieridee wurde aus einer alten vorherigen Antwort in der Farbextraktion des Rubrik-Würfellösers übernommen .
quelle
Wenn das Bild nur das eng anliegende Sudoku-Gitter enthält, besteht eine grobe Möglichkeit, dies zu erreichen, darin, das Bild in ein gleiches 9X9-Gitter zu unterteilen und dann zu versuchen, die Anzahl in jedem dieser Gitter zu extrahieren.
quelle
Schritte:
Code:
verzogen:
th3:
warped2:
Sudoku-Ergebnis:
Alle extrahierten Ziffern:
Verweise:
Gitterpunkte
Funktionen (von Ziffern) abrufen
Bildbeispiele
quelle