2012-06-27 6 views
1

Nous travaillons actuellement sur une application Android ocr en utilisant opencv.pre-traitement, la segmentation, les étapes d'extraction de fonctionnalités sont effectuées. La classification est l'étape restante et nous sommes bloqués .. Nous utilisons une table DB qui est remplie avec chaque lettre caractéristique .. Tout d'abord, nous avions seulement 1 caractéristique par lettre et nous avons utilisé la distance euclidienne, mais les résultats n'étaient pas précis et plus Le problème est maintenant que nous avons 7 fonctionnalités par lettre et absolument aucune idée de la façon de classer i/p en fonction d'eux .. certains ont recommandé d'utiliser knn, mais nous ne pouvons pas comprendre comment et la documentation d'opencv dans cette partie n'est pas claire .. si quelqu'un peut l'aider wud soit grand. Merci d'avanceClassification de l'image avec opencv

Répondre

3

Brièvement et sans discuter des détails. L'espace vectoriel est utile ici. Vous devez créer un vecteur de fonctionnalité <feature1, feature2, feature3.. featureN> pour chacune des instances de votre ensemble d'apprentissage. À partir de chacune de ces images, vous extrayez les caractéristiques que vous pensez ou que vous lisez dans les articles de recherche qui sont importantes pour la classification des images. Par exemple vous pouvez faire un centroïde, un flou gaussien, des histogrammes, etc. Une fois que vous avez ces valeurs, l'algèbre linéaire entre en jeu avec un algorithme de classification: knn, svm, bayes naïves, etc. que vous utilisez dans votre ensemble d'entraînement. modèle. Si le modèle est prêt, vous le lancez sur votre testeur. Utilisez la validation croisée pour obtenir des résultats plus complets. Pour plus de détails consultez les notes de cours: http://www.inf.ed.ac.uk/teaching/courses/iaml/slides/knn-2x2.pdf ou http://www.inf.ed.ac.uk/teaching/courses/inf2b/lectureSchedule.html

+0

Merci :) Ces liens sont vraiment utiles :) – user1486322

0

voudrais ajouter que OpenCV peut ne pas avoir le genre de classificateurs vous préférerez.

Il existe plusieurs bibliothèques, bien que vous deviez voir ce qui fonctionne le mieux sur une plate-forme mobile. Pourriez-vous donner quelques détails sur les fonctionnalités que vous utilisez? La mesure KNN (k-plus proches) la plus simple consisterait à trouver la distance euclidienne en n dimensions (pour un vecteur de caractéristiques n-dimensionnelles) entre les entités de l'échantillon en entrée et chacun des vecteurs de votre table DB. Explorez également la distance de Mahalanobis (utilisée pour mesurer la distance entre un point et un ensemble de données/classe) si vous avez plusieurs classes et que l'image d'entrée doit être classée comme un tel 'type' ou 'classe' d'image. Comme @matcheek l'a mentionné, plus de sophistication peut être possible en utilisant des techniques d'apprentissage automatique telles que SVM, Neural Nets, etc. Cependant, vous pourriez envisager une chose plus simple comme kNN, considérant que c'est une plate-forme mobile qui peut limiter la complexité de calcul.