So will ich in der Lage sein, Muster in Bildern zu erkennen (wie eine Nummer 4), habe ich über verschiedene Algorithmen gelesen und ich würde gerne den Nearest Neighbor-Algorithmus verwenden sieht einfach aus und ich verstehe es auf der Grundlage dieses Tutorials: Problem ist, obwohl ich verstehe, wie man es verwendet, um fehlende Datensätze zu füllen, verstehe ich nicht, wie ich es als ein Mustererkennungstool verwenden könnte Bildform-Erkennung. Könnte jemand bitte etwas Licht in die Richtung geben, wie dieser Algorithmus für die Mustererkennung funktionieren könnte? Ich habe Tutorials mit OpenCV gesehen, aber ich möchte diese Bibliothek nicht wirklich verwenden, da ich die Möglichkeit habe, die Vorverarbeitung selbst durchzuführen, und es scheint albern, dass ich diese Bibliothek nur für einen einfachen Nachbarn implementieren würde Algorithmus.Verwenden Nächsten Nachbar Algorithmus für Bildmustererkennung
Antwort
Sie müssen einfach (einfach?) Ein Maß für "Abstand" für Ihre Daten definieren.
Damit haben Sie bereits große Bilder in kleinen Bildern segmentiert, von denen jedes einem Textzeichen entspricht, das Sie klassifizieren möchten. Nehmen wir an, dass es sich um digitale monokulare Bilder handelt, so dass jedes Bild als eine rechteckige Matrix von Werten (Pixeln) in (beispielsweise) dem ganzen Zahlenbereich von 0-255 (Helligkeit) dargestellt wird. Es wird auch angenommen (NN ist ein "überwachte Klassifizierungsalgorithmus"), dass Sie viele bereits gut klassifizierte Bilder haben (Ihr Trainingssatz).
Bei einem neuen kleinen Bild müssen Sie einen Abstand zwischen zwei Bildern definieren, so dass das naheste im Trainingssatz ausgewählt und dessen "Label" als erkanntes Textzeichen ausgewählt wird.
Ein naive Ansatz wäre, die Differenz der Pixel (Summe der Quadrate, zum Beispiel) zu nehmen. Aber dieses Distanzmaß wäre empfindlich gegenüber Übersetzungen (und Rotationen und Skalierungen) und das wollen wir normalerweise nicht. Eine Alternative wäre, den Modul der Fourier-Transformation zu berechnen, der translationsinvariant ist (aber das ist nicht genug). Von hier aus können Sie beginnen - und erkennen, dass das Problem schwierig ist, und diese Art der Klassifizierung erfordert viel Arbeit, um akzeptabel zu funktionieren.
Ich habe den K-Nearest-Neighbor-Algorithmus zur Pose-Erkennung in einer Echtzeit-Pose-Erkennung mit Videokamera verwendet. Ich würde empfehlen, Matlab für das Training und Testen von Datensätzen zu verwenden, da es PRToolbox für diesen Zweck hat und es eine Menge Hilfe und Beispiele gibt. Das Wichtigste ist, dass Sie die Funktionen richtig auswählen, die es ermöglichen, jede Klasse robust darzustellen. Sobald Sie die Features (dies wird eine Reihe von Werten wie, Farbe, Fläche, Positionen ...) und die Klassen haben, benötigen Sie Proben, um den Klassifikator (KNN zum Beispiel) zu trainieren. So wichtig wie der Klassifikator ist, wie Sie die Proben für das Training auswählen. Dann müssen Sie den Klassifikator testen.
Probieren Sie verschiedene Trainingssätze, verschiedene Funktionen, verschiedene Klassifizierer aus, weil vielleicht die KNN nicht die am besten geeignete Methode für Ihre Art von Daten ist.
Ich hoffe, Sie finden das nützlich.
Hier ist eine einfache Implementierung mit Python http://shyamalapriya.github.io/digit-recognition-using-k-nearest-neighbors/