2011-05-26 2 views
10

Je veux reconnaître la forme de l'écriture et déterminer quelle forme elle est probablement dans l'ensemble. En disant simplement, si je dessine un triangle, l'application devrait le reconnaître comme un triangle. Comment puis-je faire cela en utilisant C# ou Java, toute aide est appréciée.Reconnaissance des formes manuscrites

Merci d'avance.

Voici quelques-unes des formes que je dois identifier enter image description here

+0

Pouvez-vous poster des exemples (captures d'écran) des formes? –

+0

J'ai ajouté quelques captures d'écran –

Répondre

2

Vous pouvez essayer d'utiliser OpenCV pour cela. EmguCV est un bon wrapper pour OpenCV for .net. Surveillez ShapeDetection démo (inclus dans OpenCV)

+0

Où puis-je obtenir cette démo? –

+0

binaires Télécharger EmguCV/sources. Les applications de démonstration (binaires et sources) sont livrées avec la bibliothèque. – oddy

+0

Merci beaucoup –

1

Si vous recherchez des formes particulières à l'intérieur d'une image alors OpenCV est une excellente alternative. Emgu.CV est un bon wrapper .Net pour cela. Voir my picture of a SURF implementation pour cela. Voir aussi other options in OpenCV, il a beaucoup à offrir. Notez que cette approche nécessite beaucoup de puissance de traitement.

Si vous pouvez facilement identifier la forme que vous voulez comme BLOB (c'est-à-dire donner à l'algorithme une image de cette forme seulement), vous pouvez faire une recherche pour "ANN OCR" et "Optical Character Reconnaissance"). Beaucoup (la plupart?) ANN-implémentations viennent avec un exemple de code pour nourrir ses formes (lettres) et reconnaissant la forme la plus proche (lettres manuscrites). Par exemple Neural Network OCR. Je crois que cette approche résoudrait votre problème. (Sidenote: J'ai rencontré et testé de nombreuses librairies qui peuvent le faire.C'est Neural Networks 101.)

Si vous avez besoin d'algorithmes BLOB pour l'ANN-OCR, OpenCV peut vous le fournir.

Ces deux approches sont très faciles à mettre en œuvre.

2

Si vous voulez « rouler vos propres » je suggère les étapes suivantes:

D'abord, squelettisent (mince sur l'image jusqu'à ce que toutes les lignes sont épaisses d'un pixel). Il y a plusieurs façons de le faire, et c'est un problème bien étudié. Google pour plus d'informations.

Maintenant, à partir d'un pixel noir, parcourez et tracer le contour de l'image, un pixel à la fois. Vous ajoutez chacun de ces segments à une liste de segments décrivant la forme (chaque segment sera une simple ligne d'un pixel à son pixel adjacent). Vous avez maintenant le contour de votre forme sous la forme d'un polygone à plusieurs côtés.

(étape possible à ce stade: lisser le contour en tirant chaque sommet plus proche de la moyenne de ses voisins)

Maintenant, vous utilisez un algorithme de détection d'angle pour trouver les coins (jetez un coup d'oeil ici: http: //visual.ipan.sztaki.hu/corner/node7.html).

Cela devrait suffire à identifier les formes que vous avez listées.

Si vous souhaitez obtenir plus intelligent, vous pouvez également identifier les types d'arêtes qui existent entre les coins. Si le segment entre deux coins reste à l'intérieur d'un certain seuil de la ligne droite qui les sépare, vous le traitez comme une ligne "droite". Si ce n'est pas le cas, vous le traitez comme un bord incurvé.

Avec les coins + le bord droit/incurvé, vous pouvez probablement détecter n'importe laquelle des formes que vous recherchez.

1

Il y a en effet un arbre vaste de la recherche en reconnaissance de forme.
Si vos formes sont en effet ce que certains sont prévisibles et la géométrie de base,
la façon la plus simple est de trouver les bords et appliquer Transformée de Hough.

Certains matériaux de lecture gérables pour vous de commencer, Google Scholar [1] pour Transformée de Hough Détection de forme http://scholar.google.com/scholar?q=hough+transform+shape+recognition&hl=en&as_sdt=0&as_vis=1&oi=scholart [2] Transformée de Hough @ Wiki http://en.wikipedia.org/wiki/Hough_transform

Questions connexes