2009-07-19 6 views
4

J'essaie de trouver un bon algorihtm qui permettrait de détecter les coins dans une image dans un téléphone mobile. Il y a plusieurs algorithmes à faire que je ne suis pas sûr que celui qui fonctionnera le mieux dans un environnement limité de mémoire et de processeur.Algorithme de détection de coin pour mobile

Plus précisément, j'essaie de trouver une grille de sudoku dans une photo prise avec l'appareil photo du téléphone. J'utilise C# et je n'ai trouvé aucune bibliothèque avec des fonctions de traitement d'image de base. J'ai mis en place un filtre Sobel pour faire la détection des contours et c'est là que je me tiens.

Pour clarifier la question, est-ce que quelqu'un a des suggestions pour utiliser un algorithme spécifique ou une bibliothèque?

Merci.

Répondre

2

Je ne dirais pas que la «détection de coin» en soi est un très bon moyen de le faire. Prenez du recul et pensez à une photo d'une grille de sodoku, il y a probablement beaucoup d'hypothèses que vous pouvez faire pour simplifier les choses.

Par exemple, une grille de Sodoku regarde toujours exactement la même chose:

  • carré blanc
  • 9 x 9 grille régulière

treating the image in the HSV colour space vous permettra de rechercher des zones de haute luminosité (blanc couleurs), RGB est un peu pantalons pour la plupart des techniques de traitement d'image.

thresholding the image devrait alors réduire le bruit

Adjusting the image histogram premier peut aussi vous donner de meilleurs résultats car il blanchira probablement la grille (dépend de l'image que).

Ensuite, tout ce que vous avez à faire est de trouver un carré. Parce que vous savez la grille est régulière à l'intérieur, vous pouvez diviser les pixels en conséquence et OCR les carrés avec un nombre

. D

+0

Merci pour la réponse. J'ai utilisé le HSV mais d'une manière différente. Je garde les zones sombres en supposant que la grille elle-même sera imprimée à l'encre noire mais votre suggestion semble meilleure. J'ai probablement aussi besoin de faire une transformation de cisaillement avant de détecter des carrés. J'ai pris quelques images de test dans toutes les grilles sont déformées et sont des trapèzes. Ou peut-être que je peux dire que toutes les zones blanches déconnectées avec certaines tailles sont en grille. –

1

J'ai trouvé OpenCV très utile dans le traitement des images, et je marquerait moi-même comme un programmeur assez moyen.

Here's an example (en C++, mais vous pouvez probablement le porter) qui fait la détection de coin dans OpenCV.

+0

Salut Chris, j'ai déjà utilisé OpenCV mais je ne connais aucun port qui fonctionnerait sur un téléphone mobile. Connaissez-vous une telle chose? Peut-être que je peux jouer rapidement avec et essayer de le compiler en utilisant Windows Mobile SDK. Merci. –

2

Puisque vous êtes à la recherche d'une grille régulière de 9x9, considérez le Hough transform. L'one-way est d'abord d'exécuter un détecteur de bord, trouvez toutes les lignes droites en utilisant la transformée originale de Hough, et essaye alors de déterminer lequel d'entre eux forme une grille. Ou peut-être que vous pouvez trouver une façon intelligente de paramétrer toute la grille.

+0

J'ai pensé à la transformation Hough mais j'étais préoccupé par la complexité. Je pensais trouver des points où les bords verticaux et les bords horizontaux se croisent. Mais il échoue également, quand il y a une ligne inclinée. Peut-être que je peux utiliser Hough transformer pour supprimer d'abord ces types de lignes. Merci. –

+0

En fait, je pense que trouver des coins est une bonne stratégie. Il existe de nombreux opérateurs de détection de coin. L'opérateur Harris est populaire. http://en.wikipedia.org/wiki/Corner_detection – Dima

+0

Hough transformer est vraiment rapide et facile à mettre en œuvre. Ensuite, on peut parcourir les lignes détectées, calculer leurs longueurs et rechercher celles qui se croisent plus que, disons, 6-7 autres lignes. – Oroboros102

0

Voir this link pour un tutoriel sur la façon de créer un détecteur de grille de SUDOKU à l'aide OpenCV