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.