TS 225 – Projet Image Lecture de code
Transcription
TS 225 – Projet Image Lecture de code
Filière Télécommunications TS 225 – Projet Image Lecture de code-barres par traitement d’images numeriques 2016/2017 1) Préambule 1.1) Objectifs Les applications concernant des images ou de la vidéo sont extrêmement nombreuses. Elles sont également, de manière générale, relativement complexes à mettre en oeuvre. Aussi, le projet a pour but, tout en vous familiariser avec ces signaux, de mettre en pratique les enseignements fondamentaux de traitement des images vus au cours du semestre. Ce projet vous permet de renforcer vos compétences en vue d’une orientation en 3 ème année déjà envisagée pour l’option ISNC. 1.2) Mode d’évaluation Le projet sera effectué en binôme (en cas d’imparité du nombre total d’étudiants, un trinôme sera formé) pendant 13h20 et sera mené sous Matlab. L’évaluation du travail comporte trois volets : travail continu, rapport et soutenance orale (séance de questions/réponses d’environ 5 minutes lors de la dernière séance de projet). Le rapport de 10 à 15 pages doit être rendu dans un format pdf. Il est important de faire figurer les différentes images de la chaîne complète de traitement. Les images accompagnant les commentaires des résultats doivent notamment être choisies et présentées de sorte à mettre en évidence les phénomènes mentionnés (prendre garde au choix de la palette et des échelles de couleurs, aux grandissements, aux graphiques en surimpression, aux légendes, etc.). Les équations doivent être générées avec un éditeur d’équations, en utilisant une police de caractères homogène avec le reste du document, et être numérotées afin d’être référencées dans le texte. Les commentaires doivent être pertinents et tout résultat doit être justifié. Les programmes seront mis en annexe en double colonne en utilisant une police de caractères relativement petite tout en restant suffisamment lisible. Le rapport devra également comporter un bilan de l'organisation et du déroulement du projet qui comprendra, en particulier, la liste des tâches entreprises avec une évaluation du temps passé par chacun des membres du groupe lors de chaque séance et, le cas échéant, entre les séances. La qualité du code produit et une bonne organisation seront des points pris en compte pour la note de travail continu. Une interface Matlab peut également être proposée et sera comptabilisée en tant que bonus. 1.3) Contact Le projet est encadré par M. Donias (Bureau S309, mél : [email protected]). 2) Méthode de lecture de code-barres 2.1) Contexte La plupart des marchandises (denrées alimentaires, biens de consommation, lettres et colis, etc.) et, à présent, un certain nombre de documents (facture téléphonique, avis d’imposition, etc.) sont dotés d’un identificateur numérique et graphique sous la forme d’un code à barres. Celui-ci permet, par exemple, de garantir un suivi lors des phases de production, de transport ou encore de commercialisation. L’objectif de cette partie du projet est de réaliser la lecture de codes-barres à partir d’images numériques. Dans un premier temps, le code-barre considéré sera photographié de sorte à être « parallèle » aux bords de l’image et sera décodé à l’aide d’une démarche algorithmique nécessitant la supervision d’un opérateur. Une méthode permettant de traiter le cas d’un code-barre orienté de manière quelconque sera développée dans un second temps. Eventuellement, la levée complète de la supervision sera envisagée au moyen de la détermination automatique de l’emplacement probable du code-barre. 2.2) Code EAN 13 Un des codes-barres le plus répandu est le code EAN (European Article Numbering) dont les spécifications sont gérées par le GS1 . La version EAN 13 (voir Figure 1) qui est inscrite sur la quasi-totalité des produits disponibles dans les centres commerciaux est la plus utilisée en France : elle permet notamment de déterminer le prix à payer lors du passage à la caisse. Figure 1 – Exemple de code-barres EAN 13. La norme complète est détaillée sur de nombreux sites Internet. Ce paragraphe a pour objectif d’en rappeler les points essentiels. Le code EAN 13 se compose de 13 chiffres qui sont codés sous une forme graphique « en barres ». Il est à noter que deux chiffres se particularisent : le premier chiffre n’est pas représenté et se déduit des six suivants, tandis que le dernier chiffre fait également office de clé de contrôle et permet de garantir la validité de l’ensemble. 2.2.1) Organisation spatiale Le code complet se compose de cinq parties distinctes (voir Figure 2 ) dont chacune a une largeur multiple d’une unité de base : Une région de garde (normale à gauche) de largeur égale à 3 fois l’unité de base. Une région de six chiffres dont chacun occupe une largeur égale à 7 fois l’unité de base. Une région de garde (centrale) de largeur égale à 5 fois l’unité de base. Une région de six chiffres dont chacun occupe une largeur égale à 7 fois l’unité de base. Une région de garde (normale à droite) de largeur égale à 3 fois l’unité de baseun temps de calcul relativement faible (inférieur à la seconde sous Matlab) par image à fusionner. 3 7 7 7 7 Garde normale 7 7 5 7 Garde centrale 7 7 7 7 7 3 Garde normale (à gauche) (à droite) Figure 2 – Régions de garde et de chiffres. Les régions de garde se composent d’une alternance de 3 ou 5 barres élémentaires noires (N) et blanches (B) de largeur égale à l’unité de base : elles sont représentées par un code « binaire » NBN pour les gardes normales et BNBNB pour la garde centrale. 2.2.2) 1.2 Codage d’un chiffre Chaque chiffre du code-barres, du deuxième au treizième, est également représenté par un code graphique binaire dont la largeur totale est égale à 7 fois celle de l’unité de base : le chiffre (0 à 9) est déterminé en fonction de la présence (N) ou de l’absence (B) de 7 barres noires successives. Les différentes configurations se distinguent en plus par une famille d’appartenance : éléments de type A, B ou C. Elles sont toutes regroupées dans la table suivante. 0 1 2 3 4 5 6 7 8 9 Elément A BBBNNBN BBNNBBN BBNBBNN BNNNNBN BNBBBNN BNNBBBN BNBNNNN BNNNBNN BNNBNNN BBBNBNN Elément B BNBBNNN BNNBBNN BBNNBNN BNBBBBN BBNNNBN BNNNBBN BBBBNBN BBNBBBN BBBNBBN BBNBNNN Elément C NNNBBNB NNBBNNB NNBNNBB NBBBBNB NBNNNBB NBBNNNB NBNBBBB NBBBNBB NBBNBBB NNNBNBB 2.2.3) Amorce : codage du premier chiffre Le premier chiffre se déduit en analysant les familles d’appartenance de la séquence formée par les chiffres de rang 2 à 7 selon la table suivante. Séquence 1er Chiffre Séquence 1er Chiffre AAAAAA 0 ABBAAB 5 AABABB 1 ABBBAA 6 AABBAB 2 ABABAB 7 AABBBA 3 ABABBA 8 ABAABB 4 ABBABA 9 2.2.4) Clé de contrôle Le complément à 10 du dernier (13ème) chiffre du code-barres est égal au chiffre des unités du nombre calculé en additionnant la somme des chiffres de rangs impair (1er, 3ème, 5ème, 7ème, 9ème et 11ème) à trois fois la somme des chiffres de rang pair (2ème, 4ème, 6ème, 8ème, 10ème et 12ème). 2.3) Algorithmique En raison de la complexité évidente des images à traiter et de l’importance des connaissances en traitement d’images à connaître, l’implémentation d’une méthode de lecture de codes-barres entièrement automatique semble ambitieuse. La technique proposée dans ce projet est donc partiellement supervisée et nécessite l’intervention réfléchie d’un opérateur en tout début de processus. Elle présente par ailleurs des similitudes avec la lecture classiquement obtenue par lecteur optique. La méthode à implémenter qui concerne principalement le cas de code-barres « parallèles » aux axes naturels de l’image s’articule en trois étapes : Délimitation de la région d’intérêt. Estimation de la signature. Identification des chiffres. 2.3.1) Délimitation de la région d’intérêt La première étape s’appuie sur une initialisation manuelle : l’opérateur est invité à tracer, à la souris, une ligne quasi-horizontale traversant, au plus près, de part en part, le code-barres dans sa largeur (voir Figure 3a). S’apparentant à la technique de lecture par faisceau optique, cette initialisation a plusieurs objectifs. Ainsi, elle permet : de cerner par excès, de manière approximative, l’extension horizontale du code-barres, de déterminer (voir 2.3.2) de manière précise, après un seuillage adéquat, son début et sa fin, de traiter le cas des codes orientés (voir 2.4) en restreignant le domaine de recherche des angles possibles. (a) (b) Figure 3 – a) ligne d’initialisation b) région d’intérêt. La ligne d’initialisation est obtenue simplement par la capture de deux clics successifs de la souris (fonction ginput sous Matlab) qui correspondent à deux points de coordonnées respectives x1 , y1 et x 2 , y 2 . D’une manière générale, cette ligne nous fournit également une première région rectangle 0 (non représentée sur la figure 3) contenant une partie du code-barres et dont les coins supérieur gauche et inférieur droit ont pour coordonnées xmin , ymin et xmax , ymax avec xmin min x1 , x2 , ymin min y1 , y2 , ymax max y1 , y2 . La région d’intérêt complète T du code-barres (voir Figure 3.b) est respectives xmax max x1 , x2 et déterminée en étendant le plus possible, verticalement, la région 0 . Soit I l’image traitée, l’ordonnée du coin supérieur gauche s’obtient en recherchant, par décrémentation itérative, la valeur minimale de y (initialement prise égale à ymin ) qui vérifie la condition xmax 1 I ( x, y ) x xmin xmax I ( x, y x xmin min 1 (1) ) où est un paramètre d’erreur ou de tolérance que nous prendrons, par exemple, égal à 0,2. Une logique similaire permet de déterminer l’ordonnée du coin inférieur droit. Par la suite, dans un souci d’homogénéité de notations, ces nouvelles ordonnées seront à nouveau notées ymin et ymax . Le résultat obtenu (voir Figure 3.b) fait clairement apparaître que le code-barres traité n’est pas toujours tout à fait rectangle en raison d’une déformation classique due à la prise de vue. 2.3.2) Estimation de la signature L’étape précédente a permis de déterminer une région d’intérêt qui englobe l’intégralité du code-barres dans sa largeur et une partie très importante, voire complète, dans sa hauteur. Il s’agit à présent de construire une signature sCB monodimensionnelle résumant au mieux la forme graphique du code-barres. Ceci est obtenu, dans un premier temps, en projetant la partie de l’image I qui est incluse dans la région d’intérêt T sur l’axe horizontal : sT n 1 ymax 1 ymin y y max I (n x min y y min ,y ) avec n 0, xmax xmin (2) Il reste à éliminer les éventuelles parties superflues de cette signature, respectivement situées à l’extrême gauche et à l’extrême droite : il s’agit ici d’identifier, de manière très précise, le début et la fin du code-barres qui sont indiqués par les deux régions de garde normale. La méthode proposée consiste à binariser (segmentation en deux classes) la signature : les positions recherchées (barres noires) correspondent alors respectivement aux premier et au dernier échantillon de la première classe. Le seuil permettant la binarisation sera calculé avec l’algorithme de Otsu qui s’appuie sur le calcul préalable d’un histogramme h sur N classes (usuellement et dans notre cas, N=256). Le seuil d’Otsu est directement lié à l’indice de classe k qui maximise le critère suivant : crit (k ) w(k ) N 1 k 1 w(k ) k 2 avec w(k ) i 0 N 1 h(i) (3) k k h(i) 2 et ( k ) i 0 i.h(i) i 0 N 1 h(i) . i 0 L’histogramme et le seuil seront déterminés dans la région d’intérêt T . 2.3.3) Identification des chiffres La signature complète sCB du code-barres de longueur l est segmentée en douze parties ou signatures partielles représentant chacune un chiffre. La découpe est opérée en fonction de l’estimation préalable de l’unité de base u , qui vérifie la relation l 95 u , et de l’organisation spatiale décrite précédemment (voir 2.2.1). Chaque signature partielle ainsi obtenue, notée s p , est confrontée à l’ensemble des signatures théoriques permises (3 familles de 10 configurations) afin d’identifier le chiffre candidat le plus probable. A cette fin, pour chaque configuration possible, trois opérations sont réalisées : Construction d’une signature théorique sth . 1 (B) 0 (N) Elément A, chiffre 5 (configuration BNNBBBN) Rééchantillonnage ou dilatation de la signature théorique en fonction de l’unité de base u estimée. 1 (B) 0 (N) u 3,2 Mesure de ressemblance de la signature théorique avec la signature partielle observée par corrélation de forme selon la formulation c sth , s p sth sth , s p s p sth sth . s p s p (4) où . , . et . désignent respectivement le produit scalaire et la norme. Conformément à la norme EAN 13, le premier chiffre du code-barres est déterminé en fonction des six suivants tandis que le dernier chiffre peut donner lieu au calcul de la clé de contrôle pour valider le code dans son intégralité. 2.3.4) Cas de codes-barres « orientés » Seules sont données ici les grandes lignes de la méthode : il s’agit principalement de déterminer l’inclinaison ou l’angle de rotation du code-barres afin de lui appliquer une transformation inverse et de le rendre « parallèle » aux bords de l’image. La technique explicitée précédemment devient alors applicable. Le code-barres étant constitué de lignes parallèles, il apparaît immédiatement que l’orientation de cellesci est une information directement liée à l’angle recherché. La transformée de Hough (fonction hough) est l’une des méthodes les plus connues de détection de lignes. La technique suppose tout d’abord de déterminer un ensemble de points d’intérêt susceptibles d’appartenir à des lignes. Cela peut être efficacement obtenu en calculant et en seuillant (fonction edge sous Matlab) l’image des contours. La transformée de Hough consiste à changer l’espace de représentation des points d’intérêt : l’espace cartésien x, y des coordonnées est remplacé par l’espace polaire , . Son principe découle directement de l’équation paramétrique d’une droite en coordonnées polaires : x cos y sin (5) Ainsi, à un point initial x, y correspond t-il une sinusoïde dans l’espace , . L’accumulation de l’ensemble des sinusoïdes issues de la transformation des différents points d’intérêt forme alors des pics : ceux-ci correspondent aux coordonnées polaires des lignes recherchées. Dans notre cas, il ne s’agit pas d’identifier un ou plusieurs pics correspondant à une ou plusieurs lignes mais une succession (voir Figure 4 – Transformée de Hough de contours d’un code-barres « orienté ». 4) de pics caractérisés par le même angle et qui correspondent à un réseau de lignes parallèles. Dans l’exemple représenté, l’angle de rotation est égal à -32° : il se détermine en recherchant l’angle qui maximise la variance du signal considéré en colonne. Une détection robuste s’obtient en limitant le domaine de recherche en fonction de l’inclinaison de la ligne d’initialisation indiquée par l’opérateur (voir 2.3.1). -500 -400 -300 -200 Rho -100 0 100 200 300 400 500 -80 -60 -40 -20 0 Theta (°) 20 40 60 80 Figure 4 – Transformée de Hough de contours d’un code-barres « orienté ». 3) Travail à réaliser Il s’agit d’implémenter la technique proposée sous Matlab, de justifier de son fonctionnement correct et de vérifier sa robustesse à travers, par exemple, les étapes des sections suivantes. 3.1) Jeux de tests Construire une base de données de codes-barres à partir de plusieurs sources : bases de données déjà existantes, appareils photographiques numériques autonomes ou embarqués au sein de téléphones portables, numériseurs, caméras numériques, etc. Veiller à disposer d’un nombre suffisant de codes-barres « parallèles » aux bords de l’image 3.2) Détermination de la région d’intérêt Afficher le code-barres traité, la ligne d’initialisation indiquée par l’opérateur, les limites (boites englobantes) des régions 0 et T . Expliciter la signification de la formule de recherche des nouvelles ordonnées. Préciser le rôle du paramètre Détailler les raisons pour lesquelles il est adéquat d’étendre la région de représentation des barres. 3.3) Estimation de la signature Expliquer l’intérêt de la projection sur l’axe horizontal. Observer la forme du critère d’Otsu. . 3.4) Identification des chiffres Afficher la valeur de l’unité de base u. Déterminer les abscisses des différents chiffres du code-barres. Afficher les boites englobantes correspondantes superposées à la région d’intérêt T . Identifier les chiffres du code-barres et afficher les valeurs de ressemblance associées. Déterminer le premier chiffre puis valider l’ensemble du code à l’aide de la clé de contrôle. 3.5) Cas de codes-barres « orientés » Déterminer l’enchaînement correct des opérations pour traiter le cas de codes-barres « non-parallèles » aux bords de l’image. Préciser comment la ligne d’initialisation permet de limiter le domaine de recherche des angles de rotation possibles. Implémenter la nouvelle méthode. Afficher notamment la partie utile de la variance du signal de Hough considéré en colonne ainsi que l’image redressée. 3.6) Décodage automatique (partie optionnelle) Identifier une propriété ou une caractéristique permettant de segmenter l’emplacement probable du code-barre. Proposer une démarche automatique permettant de lever la supervision et s’appuyant sur l’algorithme de décodage d’un code-barre orienté. Implémenter la démarche proposée. 3.7) Traitement de la base de données Traiter l’intégralité d’une base de données. Analyser les résultats obtenus. Déterminer les conditions requises pour l’utilisation des méthodes proposées : qualité de l’image, grandissement, éclairage ambiant, etc Bonus : implémentez une interface graphique mettant en œuvre l’ensemble des traitements.