Traitement d'images manuel

Nous avons d'abord implémenté une activité permettant de redresser et redimensionner les images. Le redressement des images permet d'obtenir une grille de jeu toujours droite et carré, et ce, quel que soit l'angle sous lequel ont été prises les images. Cela permet à l'utilisateur de l'application de se placer n'importe où pour prendre la grille de jeu en photo. Pour réaliser ceci, nous avons utilisé le code des anciens membres du projet qui ne fonctionnait que partiellement : l'image obtenue après le traitement était toujours déformé. Nous avons crée une nouvelle activité suivant l'activité permettant la prise d'image. Celle-ci étant composée de la photo prise juste avant, de quatre points que l'utilisateur peut placer à sa guise sur l'image et d'un bouton permettant de débuter le traitement.


Figure n°19 : activité de redressement avant/après

Arrivée sur l'activité, l'image, dont le chemin est récupéré de l'activité « prise photo », est affichée à l'écran sous forme de Bitmap. L'utilisateur peut alors placer les quatre points sur les coins de la grille et appuyer sur le bouton « Traiter » pour procéder au redressement. La position de chacun des points est alors sauvegardée dans un tableau et correspond aux positions sources. Le tableau des positions finales est toujours le même et correspond à la taille de la surface utilisé pour afficher les images. On appelle ensuite une méthode présente initialement dans le SDK :

Matrix.setPolyToPoly(float[] src, int srcIndex, float[] dst, int dstIndex, int pointCount)
Figure n°20 : Code permettant le redressement d'un bitmap

Cette méthode prend en paramètre un tableau de positions sources, un premier indice pour le tableau source, une tableau de positions finales, un premier indice pour le tableau final et un nombre de points, et permet d'apposer les positions sources sur les positions finales. Une fois la transformation effectué, on sauvegarde la nouvelle image dans un nouveau chemin, qu'on passe à l'activité permettant le redimensionnement.

Une fois redressées, les images comportent beaucoup de décors qui peuvent fausser l'analyse, il faut donc redimensionner l'image, ou plus précisément la couper pour ne garder que la grille de jeu. La vue utilisé est identique à celle du redressement avec quatre points que l'utilisateur peut déplacer aux coins de la grille et un bouton pour traiter.


Figure n°21 :activité de redimensionnement avant/après

Le fonctionnement du redimensionnement fonctionne à peu près comme le redressement. Les positions des points sont sauvegardées dans un tableau qui correspond aux positions sources. On crée alors un nouveau Bitmap à partir du bitmap de l'image donnée. Ce bitmap a pour origine le premier point situé en haut à gauche, a pour hauteur la distance entre les points haut-gauche et bas-gauche et a pour largeur la distance entre les points haut-gauche et haut-droit. Le bitmap obtenu est ensuite enregistré dans un nouveau chemin.

Bien que le redimensionnement soit fonctionnel, il ne reste pas moins difficile à maitriser. En effet, il persiste un problème dans la conversion des images en bitmaps qui fausse le positionnement des points sur l'aperçu de l'image et donc qui fausse le redimensionnement. Il est donc nécessaire de placer les points un peu à côté de la grille pour que cela fonctionne.

Finalement, on obtient une nouvelle image de la grille de jeu droite et sans décor avec des informations lisibles et utilisables par l'analyse. Cependant, ce traitement demande à l'utilisateur une action de sa part et la tâche est fastidieuse.

figure9.png (1.93 MB) Alexandre Boyer, 03/22/2015 11:42 AM

figure10.png (2.08 MB) Alexandre Boyer, 03/22/2015 11:43 AM