Quindi voglio essere in grado di riconoscere i pattern nelle immagini (come il numero 4), ho letto diversi algoritmi e mi piacerebbe davvero usare l'algoritmo del vicino più vicino, sembra semplice e lo capisco in base a questo tutorial: http://people.revoledu.com/kardi/tutorial/KNN/KNN_Numerical-example.html Il problema è, anche se capisco come usarlo per riempire insiemi di dati mancanti, non capisco come potrei usarlo come uno strumento di riconoscimento del modello per mirare in Riconoscimento forma immagine. Qualcuno potrebbe per favore far luce su come questo algoritmo potrebbe funzionare per il riconoscimento dei pattern? Ho visto tutorial che usano OpenCV, tuttavia non voglio usare questa libreria perché ho la possibilità di fare da sola la pre-elaborazione, e sembra sciocco che implementerei questa libreria solo per quello che dovrebbe essere un vicino più vicino algoritmo.Utilizzo dell'algoritmo del vicinato più vicino per il riconoscimento del modello di immagine
risposta
Devi semplicemente (semplicemente?) Definire una misura di "distanza" per i tuoi dati.
Ti consente di segmentare l'immagine ingrandita in piccole immagini, ognuna corrispondente al carattere di testo che desideri classificare. Supponiamo che si tratti di immagini monocrome digitali, quindi ogni immagine è rappresentata come una matrice rettangolare di valori (pixel) nell'intervallo 0-255 (luminosità). Si presume anche che (NN sia un "algoritmo di classificazione controllato") che tu abbia molte immagini già ben classificate (il tuo set di allenamento).
Data una nuova piccola immagine, è necessario definire una distanza tra due immagini in modo da scegliere quella più vicina nel set di allenamento e la sua "etichetta" scelta come carattere di testo riconosciuto.
Un approccio ingenuo sarebbe prendere la differenza di pixel (somma di quadrati, ad esempio). Ma questa misura di distanza sarebbe sensibile alle traduzioni (e alle rotazioni e al ridimensionamento) e di solito non lo vogliamo. Un'alternativa sarebbe calcolare il modulo della trasformata di Fourier, che è invariante di traduzione (ma questo non è sufficiente). Da qui puoi iniziare - e apprezzo che il problema è difficile, e questo tipo di classificazione richiede molto lavoro per funzionare in modo accettabile.
Ho usato l'algoritmo K-Nearest-Neighbor per il riconoscimento della posa in un Pose-Recognition in tempo reale con videocamera. Ti consiglio di utilizzare Matlab per la formazione e il test dei set di dati, poiché dispone di PRToolbox per questo scopo e offre molto aiuto e campioni. La cosa più importante è che si scelgono correttamente le funzionalità che renderanno possibile rappresentare ogni classe in modo solido. Una volta che hai le caratteristiche (questo sarà un insieme di valori come, colore, area, posizioni ...) e le classi, hai bisogno di campioni per addestrare il classificatore (KNN per esempio). Importante quanto il classificatore è come si scelgono i campioni per l'allenamento. Quindi dovrai testare il classificatore.
Prova diversi set di allenamento, caratteristiche diverse, classificatori diversi, perché forse KNN non è il metodo più adatto per il tuo tipo di dati.
Spero che questo sia utile.
Ecco una semplice implementazione utilizzando Python http://shyamalapriya.github.io/digit-recognition-using-k-nearest-neighbors/