Salut à tous !
J’ai voulu tester de créer un programme simple de reconnaissance de caractère. Basiquement je trace avec la souris un caractère sur ma fenêtre, et je récupère un tableau (ordonné) de points.
Pour faire la reconnaissance des caractères, je me suis dit que représenter chaque caractère par un sous-espace vectoriel pourrait peut-être passer, et ainsi chaque tableau de point à identifier serait un vecteur, et il "suffirait" de calculer des projetés orthogonaux pour déterminer le caractère le plus probable.
Mon problème est le suivant : je dois pouvoir reconnaître un caractère quelque soit sa taille, et le nombre de point obtenu lors de l’acquisition à la souris. Et pour ça, la magie de l’algèbre linéaire ne doit pas pouvoir m’aider . Pour la taille un simple changement de repère devrait suffire, mais je bloque sur le problème du nombre de points. Pour que tous mes vecteurs représentant les caractères soient dans un espace de même dimension, il me faut un nombre constant de points : je doit trouver un moyen de réduire leur nombre (comme avec la souris on capture un point à chaque frame on ne devrait jamais avoir à en rajouter).
J’ai testé la solution suivante :
- pour chaque point $p_i$, on calcule l’angle $(\overrightarrow{p_{i-1}p_{i+1}}, \overrightarrow{p_{i-1}p_i})$ (en non orienté)
- On enlève alors les points avec l’angle le plus faible, donc ceux qui sont le plus aligné avec les points suivant et précédent, donc possédant le moins d’information.
Mais cette solution ne me satisfait pas : il va falloir trier un nombre énorme de points selon l’angle :(.
Je suis sûr qu’enlever des points d’un ensemble de point en minimisant l’information perdue est quelque chose de relativement courant, mais pas moyen de trouver des trucs sur internet faute de mots clés clairs …
Vous auriez une idée ?
(j’ai un peu hésité entre le poster ici ou dans Sciences pour les maths)