Vous êtes sur la page 1sur 45

Coordinateur : Daniel KROB

Tuteur : Philippe CHASSIGNET






RECONNAISSANCE DES
PANNEAUX ROUTIERS SUR UNE
IMAGE.












Hamed Amini
Ala Ben Abbes
Mohammed Chakroun
Nicolas Chan
Charles Chandesris
Emmanuel Charbit
INTRODUCTION


Pour parer au nombre important daccidents de la route, une solution envisageable est
de munir chaque voiture dun systme lui permettant dassurer la conduite sans intervention
dune personne humaine. Pour mettre en place un tel systme, il faut quil soit en mesure de
dtecter la route, les obstacles qui la jonchent, mais galement de dtecter et de reconnatre la
signalisation routire.

Le projet de notre PSC sest concentr sur ces deux derniers points, en sattachant
uniquement aux panneaux routiers. Au lieu de chercher rsoudre ces questions sur des
supports vido, on a prfr le faire sur des photos ou images numriques. En effet, cela
revient en fait discrtiser en temps la vision par ordinateur de la voiture, que celle-ci se fasse
laide dune camra ou avec un appareil numrique. Pour tre plus clair, la vision serait
constitue par une suite de photos numriques intervalles de temps trs courts mais rguliers,
plutt que par un film tourn en continu.

On a ainsi t ramen des questions de dtection et identification dobjets sur une
image. Ceci nous a permis de nous raccrocher des thories exploites en gnral dans ce
type de problme telles que la dtection des couleurs ou la dtection de formes gomtriques
sur une image, ou la reconnaissance de formes.

Ainsi pour dtecter les panneaux routiers, il faut pouvoir distinguer leurs signes
particuliers. Ils sont principalement de deux ordres : la couleur et la forme. Les couleurs des
panneaux routiers sont les mmes pour ce qui concerne les panneaux rouges, bleus ou autres.
De mme, les formes possibles des panneaux routiers sont limites et assez simple : triangle,
rond, rectangle, losange ou octogone sont les principales.
De mme pour ce qui est de la reconnaissance des panneaux, on est ramen la
reconnaissance dune image reprsentant un panneau routier.
Dautre part, on a dcid de crer une interface graphique pour utiliser nos
programmes afin de donner notre projet un caractre finalis.

Dans chaque partie thorique, notre dmarche a t de partir des hypothses les plus
simples pour obtenir des premiers rsultats. Puis on a cherch amliorer ces rsultats avec
des hypothses de moins en moins fortes.












II. La dtection des couleurs
II.1. Introduction et plan

La premire tape requise pour arriver dtecter des signaux routiers consiste
rechercher leurs couleurs dans les images. Elle permet didentifier des objets qui se trouvent
dans lenvironnement partir de leur couleur et de supprimer les lments extrieurs
inintressants. Cela facilite, en second lieu, la recherche des formes. Parmi les diffrentes
approches, on a choisi le codage RGB.

Le codage RGB consiste reprsenter l'espace des couleurs partir de trois
rayonnements monochromatiques de couleurs : Rouge (de longueur d'onde gale 700,0 nm),
Vert (de longueur d'onde gale 546,1 nm), Bleu (de longueur d'onde gale 435,8 nm).

Une image numrique est reprsente par un ensemble de pixels. A chaque pixel est li
un triplet numrique qui dfinit sa couleur. En accord avec le codage RGB, les trois
composantes de ce triplet, ncessaires et suffisantes pour coder la couleur, sont
respectivement des indicateurs de niveau de rouge, de vert et de bleu. La valeur 255 correspond
au maximum attribuer une couleur (et 0 comme minimum) : par exemple la couleur rouge
parfaite sera reprsente par le triplet de valeur (255, 0,0).

II.2. Algorithme de dtection

On a tabli un programme qui partir dune image et dune couleur donne nous
indique quels sont les lments de cette couleur sur limage. Vous pouvez voir par exemple
sur la photo ci-jointe, comment les pixels de la photo coloris en rouge deviennent blancs
tandis que tous les autres pixels sont changs en noir.






Pour dterminer si la couleur dun pixel est considre comme tant de la couleur que
lon cherche, il faut dabord dterminer les intervalles de valeurs acceptables des composantes
Rouge, Verte, Bleue de la couleur cherche. Ensuite, il ny a plus qu voir si les composantes
du triplet codant la couleur du pixel sont bien tous dans ces intervalles.

Pour cette raison, lalgorithme est le suivant. On applique lalgorithme suivant tous
les pixels de limage laide dune boucle FOR :

If
R R
G G
B B
L R(x, y) U
L G(x, y) U
L B(x, y) U



Couleur(x, y)=Blanc
Else Couleur(x, y)=Noir

O R(x, y), G(x, y), B(x, y) sont les fonctions qui donnent les niveaux rouges, verts, et bleus
de chaque point de l'image et L
R
, U
R
, L
G
, U
G
, L
B
, U
B
sont les bornes des intervalles pour
chaque composante que lon choisit par rapport la couleur quon veut dtecter (par exemple,
pour la couleur rouge on a choisi :
L
R
=70,
U
R
=255,
L
G
=0,
U
G
=60,
L
B
=0,
U
B
=60).
Le problme principal consiste donc obtenir un programme capable dvaluer L
R
,
U
R
, L
G
, U
G
, L
B
, U
B
: en effet, ces termes peuvent ne pas rester constants du fait de la variation
de contraste entre chaque image. Vous pouvez voir par exemple sur les photos ci-jointes que
pour la dtection des pixels considrs comme rouge, les intervalles trouvs marchent bien
pour certaines photos mais il existe des photos o lon ne dtecte pas bien la couleur rouge.










Des cas qui marchent bien avec les intervalles fixs :




Ce cas ne marche pas avec les intervalles trouvs :



On a donc vu quil est possible de ne pas trouver des intervalles explicites qui
marchent pour toutes les photos, cause de la variation de la luminosit. Pour rsoudre ce
problme, on tablit une comparaison sur le rapport entre les niveaux de couleurs. En effet,
lorsque le contraste varie, ce rapport reste constant. En ce qui concerne la couleur rouge, on a
fix L
R
, U
R
, L
G
, U
G
, L
B
, U
B
, puis au lieu de regarder si G(x, y) est compris entre L
G
et U
G
on
regarde si G(x, y)/R(x, y) est entre ces bornes-ci, idem pour le taux de bleu. Donc, il faut
dterminer les intervalles de valeurs acceptables pour les couleurs des panneaux. Il faut
galement affiner lalgorithme car on peut effectuer une division par zro qui nous renverrait
une erreur.

Les couleurs dont on a besoin ici sont le rouge, le jaune et le bleu, puisque ce sont bien
sr les trois couleurs prsentes sur les panneaux de signalisation de la route. Pour les cas du
rouge et du jaune on regarde R(x, y)/255 et G(x, y)/R(x, y) et B(x, y)/R(x, y). En revanche,
pour la couleur bleu, on regarde R(x, y)/B(x, y) et G(x, y)/B(x, y) et B(x, y)/255, car le bleu a
ceci de spcifique quil possde un taux de rouge nul alors que le jaune est un mlange
diffrentes couleurs issus du RGB. On va ensuite trouver les intervalles de valeurs
acceptables : pour en avoir une premire ide, on a crit un programme sous Matlab qui prend
une image comme argument et renvoie le maximum et le minmum de chaque intervalle de
niveaux de couleurs. Par exemple, en choisissant une pice dune image qui a la couleur
voulue, il nous indique le minimum et le maximum de chaque intervalle.



Ce programme nous renvoie dans la premire ligne la borne minimale de lintervalle
dsir pour chacune des trois couleurs, la borne maximale dans la deuxime ligne, et la
moyenne des valeurs de cet intervalle dans la troisime ligne (toujours pour chacune des trois
couleurs). On parcourt pour cela tous les pixels de limage et on isole les valeurs minimales,
maximales trouves pour chaque couleur au cours de ce parcours. Pour le calcul de la
moyenne, on identifie cette image une matrice de triplets dont on calculerait la valeur
moyenne de ces triplets.
Pour rsoudre le problme de la division par zro, il a juste fallu tester avant si le
niveau de couleur, pour la couleur considre, ntait pas nul. Si cest le cas, le pixel ne peut
pas tre de la couleur voulue et donc il est directement colori en noir. On a test le
programme sur diffrentes images pour pouvoir faire une dtection des formes efficaces et on
a trouv des intervalles acceptables.
Le programme nest pas infaillible. En effet, si lon avait pris un intervalle trop large,
la dtection aurait t inefficace. Mais, du coup, il se peut quun panneau de la bonne couleur
ne soit pas dtect si le contraste de la photo est vraiment trs mauvais. Ceci, priori, nest
pas vraiment un obstacle car dans notre cas (en considrant lutilisation pour lassistance dun
conducteur) la capture dimage devrait toujours tre suffisamment contrast pour permettre la
dtection.

II.3. Le programme

On a cre les fonctions estRouge, estBleu, estJaune qui testent si un pixel est de la
couleur correspondante, puis detectCoul qui renvoie une image en noir et blanc aprs
dtection des trois couleurs sur limage.
Pour amliorer la dtection des couleurs (pour avoir moins d'erreurs), une ide fut
dliminer les points parasites : pour cela, une solution simple fut de noircir tous les pixels
dont la majorit des pixels voisins sont noirs (s'il un pixel possde cinq pixels voisins noirs ou
plus, on le met en noir.). La fonction affine permet de faire cette optimisation de la dtection.
On peut rpter lopration un certain nombre de fois afin dliminer le maximum de parasites
mais il faut prendre en compte le temps dexcution. Dans notre cas une seule application de
ce programme donne des rsultats assez satisfaisants.
La fonction detec prend en argument une image, applique detectCoul la matrice de
ses pixels, puis la fonction affine et modifie limage dorigine sans la renvoyer. Il y a
galement une fonction detecManu qui prend en argument un String correspondant au nom
dun fichier et renvoie limage modifie par detec et redimensionn la taille 300 * 300.
Celle-ci est utilise dans linterface qui ncessitait de rcuprer un rsultat au format Image et
dune certaine taille.
Les fonctions detectRouge, detectBleu, detectJaune ont le mme effet que detectCoul
mais restreint la seule couleur considre alors que detectCoul dtecte les trois couleurs sur
la mme image). Ce sont celles-ci que lon utilise ci-dessous pour mieux mettre en valeur
chacune des couleurs.

detectRouge





detectBleu



detectJaune



III. Dtection des formes
III.1. Principe

Le but de cette partie est de dtecter, partir dune image noire et blanche, obtenue
suite la dtection des couleurs sur limage, certaines formes caractristiques des panneaux
de signalisation routire (carr, triangle, rond, octogone). On supposera les panneaux de taille
raisonnable par rapport limage et peu inclins pour avoir des formes plus ou moins fixes.
Dans un premier temps, on se limitera des photos prises en campagne pour rduire au
minimum les lments perturbateurs (enseignes de publicit par exemple). Le principe est de
dtecter les coins de chaque forme et de voir leur disposition respective pour identifier ces
formes.








Dans un premier temps, nous allons voir le principe de dtection des coins, puis des
formes, puis nous verrons les dtails du programme et les amliorations apportes.

III.1.a. Dtection des coins

Aprs la dtection des couleurs, on obtient une image noire et blanche dont les
composants blancs reprsentent, en grande majorit, les panneaux de limage uniquement. Un
coin dun panneau est donc en gnral reprsent trs nettement. Une image tant code par
une matrice dentiers (ici, une matrice suffit car limage est noire et blanche), lide pour la
dtection des coins a t lutilisation de masques. Ces masques sont des matrices qui
correspondent limage parfaite du coin recherch. Dans notre cas, les masques sont de taille
9*9 (adapte la taille des formes sur limage). Il sagit alors de calculer la convolution dun
masque avec limage. Pour calculer cette convolution, il suffit de multiplier terme terme les
9 facteurs de la matrice avec une zone de limage de taille 9*9 puis den faire la somme. On
peut alors obtenir une valeur maximale lorsque la zone de limage contient le coin recherch
condition pour cela dutiliser des coefficients adquats. Lutilisation dune image noire et
blanche facilite lutilisation et la comprhension du processus.

Dans lexemple qui suit, le masque est de taille 5*5 avec deux valeurs possibles (0 ou
v, nombre positif). On reprsente limage par une matrice avec deux valeurs (noir = 0 ; blanc
= x). On remarque que ce modle est trs limit car il donne le mme rsultat de convolution
pour les deux cas reprsents ci-dessous. Pour viter ce problme, on peut remplacer la valeur
nulle du masque par une valeur ngative qui permet davoir une valeur maximale uniquement
au niveau dun coin.







Par exemple :


Masque de taille 5*5

0 0 v v v
0 0 v v v
0 0 v v v
0 0 0 0 0
0 0 0 0 0



0 0 0 x x x x
0 0 0 x x x x
0 0 0 x x x x
0 0 0 x x x x
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0


0 0 0 x x x x
0 0 0 x x x x
0 0 0 x x x x
0 0 0 x x x x
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0



Dans ce nouvel exemple, on a remplac les valeurs nulles du masque pas des valeurs
ngatives (-n). Il est facile de comprendre que le rsultat de la convolution sera maximal
uniquement si le masque est positionn au niveau du coin recherch.



-n -n v v v
-n -n v v v
-n -n v v v
-n -n -n -n -n
-n -n -n -n -n



0 0 0 x x x x
0 0 0 x x x x
0 0 0 x x x x
0 0 0 x x x x
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0

0 0 0 x x x x
0 0 0 x x x x
0 0 0 x x x x
0 0 0 x x x x
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0
0 0 0 0 0 0 0


Ceci tant le cas parfait, il faut prendre en considration le bruit qui peut altrer la
nettet de limage. Pour amliorer la dtection, on nutilise pas deux valeurs v et n mais une
fonction g(x,y) qui nest pas sensible au bruit. Cette fonction g(x,y), dveloppe par
Rangarajan, est de la forme :


Pour la partie intrieure du coin

(

+
|
.
|

\
|
=
9y
e
9y
e
9z
e
9z
e
9
x
csin y) g(x,

Pour la partie extrieure du coin

|
.
|

\
|
|
.
|

\
|
=
9
y
sin
9
x
csin y) g(x,


Du fait du bruit, les bords ne sont pas toujours trs rectilignes. Cest pourquoi on
utilise des fonctions sinusodales qui permettent de rechercher linformation importante non
pas au niveau du bord mme mais un peu plus lintrieur du coin. On diminue ainsi de faon
considrable les perturbations dues au bruit.
La valeur de c est arbitraire. Elle permet de dfinir des valeurs faciles exploiter pour
les calculs. La valeur de z permet, en laugmentant, daccrotre la capacit de g filtrer le
bruit. Elle a t fixe 0,2 exprimentalement.

On obtient alors pour le coin carr infrieur gauche un masque de la forme :

-6 -11 -11 -6 0 4 7 7 4
-11 -18 -18 -11 0 8 13 13 8
-11 -18 -18 -11 0 10 17 17 10
-6 -11 -6 -11 0 12 19 19 12
0 0 0 0 0 12 20 20 12
-6 -11 -11 -6 0 -6 -11 -11 -6
-11 -18 -18 -11 0 -11 -18 -18 -11
-11 -18 -18 -11 0 -11 -18 -18 -11
-6 -11 -6 -11 0 -6 -11 -6 -11


On remarque que tous les masques peuvent se dcomposer laide dun petit nombre
de sous matrices. Dans lexemple prcdent, on trouve une matrice de taille 5*5 rpte trois
fois (limite par les pointills) et un matrice de taille 4*4 reprsentant le coin (limite pas la
ligne rouge). Par permutation des matrices, on peut former les quatre coins du carr. Pour
lensemble des formes considres, on na besoin uniquement de sept sous matrices de taille
5*5 et dune ligne de taille 5. Pour les coins infrieurs dun triangle, il est tout fait correct
dutiliser des coins carrs (vu la taille des masques). Seul le sommet du triangle ncessite un
masque spcial. Pour lensemble des autres formes possibles, on verra quil nest pas
ncessaire de crer dautre masque.


-6 -11 -11 -6 0 -6 -11 -11 -6
-11 -18 -18 -11 0 -11 -18 -18 -11
-11 -18 -18 -11 0 -11 -18 -18 -11
-6 -11 -6 -11 0 -6 -11 -6 -11
-6 -11 -11 12 12 12 -11 -11 -6
-11 -18 -18 19 20 19 -18 -18 -11
-11 -18 17 19 20 19 17 -18 -11
-6 -11 10 12 12 12 10 -11 -6
0 12 20 20 12 20 20 12 0

Sommet du triangle

III.1.b. Dtection des formes

Pour gagner en rapidit, la dtection des formes se fait de manire intuitive. Il ne sagit
pas de dtecter tous les coins de limage puis de voir des correspondances mais de rechercher
les coins lendroit o lon pense quils sont. Lalgorithme utilis est donc le suivant :
a) On recherche dans toute limage le sommet suprieur gauche dun carr ou le sommet
dun triangle.
b) Lorsque lun des deux est trouv, on recherche les autres coins de la forme considre
dans une zone trs limite. En effet les formes des panneaux sont rglementes et on
sest donc limit des tailles de panneaux raisonnables dans limage (hmin et hmax).



Zone de recherche pour la dtection dun carr



Zone de recherche pour la dtection dun triangle
hmin
hmax
h
m
i
n

h
m
a
x

2*a
1
2
3
4
hmin
hmax
2*a
1
2 3
III.2. Programme
III.2.a. Structure

Le programme de dtection des formes utilise deux classes.

La premire classe correspond au masque. Elle comporte les champs de hauteur et de
largeur du masque (hau et lar) et un tableau dentiers (masq). Il existe une mthode taux qui
partir dune image et de deux entiers i et j (correspondant la localisation de la zone de
recherche) calcule la convolution du masque avec limage.

La classe principale est la classe des formes. Chaque forme dtecte correspond une
zone rectangulaire de limage contenant la forme. Une forme est donc dfinie par deux entiers
cx et cy qui donnent la position de la zone (coin suprieur gauche), deux entiers hau et lar qui
sont la hauteur et la largeur de la forme, et enfin un string forme qui donne le type de la forme.
Cette classe contient toutes les fonctions pour la dtection des formes :

- La fonction initiate() permet la cration des masques ;

- Les fonctions triangle(ImageBuffer, int, int) et carre(ImageBuffer, int, int)
recherchent lexistence dune forme dans une zone donne de limage (indique
par les deux entiers). Elles renvoient une forme (null si aucune forme trouve) ;

- La fonction dtection(ImageBuffer) renvoie le tableau des formes trouves sur
limage. Pour cela, elle parcourt toute limage pour rechercher un sommet de carr
(le coin suprieur gauche) ou de triangle (sommet). Si elle en trouve un, elle
appelle les fonctions adquates (carre ou triangle). Sinon elle renvoie null.

- Les fonctions affiche, donne, donneEtAffiche, donneImage et donneImageManu
renvoient le rsultat sous diffrentes formes suivant lutilisation que lon veut en
faire :
affiche(Forme[]) : imprime les champs du tableau de forme.
donne(ImageBuffer, Forme[]) : affiche les zones de limage o se situent les
formes du tableau.
donneEtAffiche(ImageBuffer, Forme[]) : affiche les zones de limage o se
situent les formes du tableau et dessine cette zone sur limage.
donneImage(String) : recherche les formes partir du nom de fichier dune
image et renvoi un tableau dimageBuffer reprsentant la zone de limage
(optimise et redimensionne) correspondant aux formes dtectes. Elle sert pour
la suite du programme didentification.
donneImageManu(String) : mme fonction que donneImage sans le
redimensionnement. Elle sert pour lutilisation de linterface du programme




III.2.b. Elaboration

La premire approche pour limplmentation du programme fut trs simple. Elle
consistait en une succession de boucle for qui chaque fois quelle calculait un taux de
convolution suffisamment lev (fix exprimentalement), recherchait le coin suivant de la
forme. De ce fait il y avait normment de redondance car la dtection ntant pas parfaite, le
programme pouvait dtecter plusieurs coins dans une zone de quelques pixels. Malgr
quelques moyens dtourns comme le saut dincrmentation de la boucle, la dtection des
formes tait trs lente (de lordre dune dizaine de seconde) dautant plus que la fonction
dtection devait faire un calcul de convolution pour chaque pixel de limage.

Aprs quelques conseils du tuteur M. Chassignet, une amlioration spectaculaire fut
apporte au programme. Au lieu de garder le premier coin dtect dans la zone et de
rechercher les suivants dans les autres zones, il suffisait de rechercher dans chaque zone
considre la meilleure dtection de coin (celle dont le rsultat de la convolution est le plus
lev). De ce fait, on amliore la dtection et cela permet dviter de trouver plusieurs coins
dans une mme zone. De plus grce cela, il nest plus ncessaire dans la fonction dtection
de faire le calcul de convolution pour chaque pixel mais uniquement tous les a pixels (taille
de la zone de recherche, elle a t fixe 4 en rapport la taille des masques et en vue des
rsultats constats). Grce ces amliorations, le programme dtecte les formes en moins de 2
secondes (ce qui est tout fait correcte).



Les formes dtectes saffichent dans une nouvelle fentre avec le type de la forme.




Une des difficults rencontres fut la fixation des taux pour la convolution
(valeurtriangle, valeurcarre, valeurrond). En effet, il a fallut fixer la valeur partir de
laquelle on accepte ou non le coin dtect. Une valeur trop haute rend la dtection impossible,
une valeur trop faible rend la dtection lente et inefficace (trop de formes dtectes ne
correspondant rien). Il a fallut donc tester avec diffrentes images mme si elles sont
insuffisantes. De plus lamlioration de la dtection des couleurs influencer sur les valeurs
des taux de convolution. En effet, en amliorant les intervalles de dtection des couleurs, on a
pu augmenter ces taux pour affiner la dtection des coins.

Les formes dtectes aux cours du programme sont mmorises dans un tableau de
taille variable. Chaque fois quune nouvelle forme est dtecte, la fonction insre vrifie si la
forme na pas dj t dtecte et sinon cre un nouveau tableau de taille n+1 et copie
lensemble des formes dj dtectes. En effet, il se peut que le programme dtecte plusieurs
fois la mme forme ou diffrentes formes au mme endroit (par exemple rond et carr). Dans
ces cas l, on garde la premire forme dtecte (parce quil faut bien choisir) ou la plus
difficile dtecter (car elle ncessite plus de critres de dtection). Par exemple, le rond est
mieux quun carr ou un triangle car un rond peut tre dtect comme un triangle ou un carr
(voir exemple suivant). On abordera la question de la dtection des ronds dans la partie
III.3.a).

Il semblerait plus adapt dutiliser des listes pour viter la copie de tableau mais dans
ce cas, le nombre de formes dans une mme image tant de lordre de lunit, il semblait plus
judicieux dutiliser des tableaux.



Dans cet exemple, on remarque que le panneau a t dtect au cours de la recherche
comme une forme triangulaire deux reprises et comme une forme ronde galement deux
reprises. La redondance vient essentiellement du fait que la dtection, surtout pour les ronds,
est approximative. Le fait de rencontrer des formes triangulaires pour la dtection dun
panneau rond donne une premire ide de la faon de dtecter une forme ronde.
Le rsultat tant un tableau de forme, il fallait pour la suite du programme rendre les
parties de limage qui contenaient ces formes. Pour cela, la fonction donneImage extrait,
grce au champ de lobjet forme, lchantillon de limage qui contient la forme en question et
renvoie lensemble des formes dtectes sous forme dun tableau dimages. Pour faciliter
lidentification des panneaux, chaque chantillon est redimensionn une taille de 50*50
pixels.


On remarque en vert les zones de dtections et dans les petites fentres les formes
identifies redimensionnes.
hmin
hmax
2*a
1
2
3
III.3. Amliorations
III.3.a. Dtection dautres formes

Aprs avoir obtenu des rsultats concluant pour la dtection des carrs et des triangles,
on a pu se pencher sur le cas dautres formes plus complexes.

Pour le cas du triangle invers ("cdez le passage"), il ny avait pas vraiment de
difficult. En effet, on a vu quun coin de la base dun triangle pouvait tre assimil un coin
de carr. Il suffisait donc lorsque lon avait dtect le premier coin dun carr mais pas le
deuxime, de vrifier si cela ntait pas le coin du triangle invers.



Zone de recherche pour la dtection dun triangle invers


Pour la dtection du panneau "stop", le problme ne fut pas beaucoup plus compliqu
car les coins formant le panneau pouvaient, de nouveau, tre assimil des coins carrs. Il
suffisait donc de rechercher les coins au bon endroit. Pour cela on se limite la dtection de
cinq coins. Les quatre coins suprieurs et infrieurs puis un cinquime coin montrant que ce
nest pas un rectangle (voir schma ci-dessous). Pour la dtection du cinquime coin, on
utilise les dimensions trouves partir des autres coins pour faire la recherche lendroit
voulu.
On pourrait chercher les autres coins pour sassurer davoir la forme voulue mais cela
ralentirait le programme inutilement et la reconnaissance des panneaux permettra une
nouvelle slection. On pouvait donc intgrer la recherche du panneau "stop" dans la recherche
dun carr. Lorsque les deux premiers coins dun carr sont dtectes mais pas le troisime
(car la distance entre les deux coins infrieurs est plus petite que hmin) alors on vrifie si cela
nest pas un panneau stop.


Zone de recherche pour la dtection dun octogone
















hmin
hmax
2
1
3
4
5
2*a
2*a
2*a
2*a

La dtection du panneau rond semblait la plus grande difficult car il ne possde pas
de coin. Cependant, grce la souplesse du modle, on a pu dtecter les formes rondes
laide de coins carrs. En effet, les points du rond situs 45, 135, 225 et 315 peuvent tre
dtects comme les coins dun carr. Cela permet en plus de ne pas faire de nouvelle dtection.
Il suffit lorsque lon a dtect une forme carr de vrifier sil ne sagit pas dune forme ronde.
Pour cela, on dtecte le point le plus haut du cercle qui est pratiquement un bord plat. Grce
un calcul de gomtrie, on a pu valuer la position de ce point en fonction de la position des
quatre autres points.




Zone de recherche pour la dtection dun cercle

1
2 3
4
2*a
5
III.2.c. Optimisation du rsultat

Comme il a t expliqu prcdemment, la fonction donneImage donnait lchantillon
de limage qui contenait la forme. Cependant cet chantillon tant forcment de forme carre
et la dtection ntant pas toujours optimale, il y avait, en plus de limage du panneau,
larrire plan de limage qui perturbait la reconnaissance du panneau. Il a fallut donc trouver
une solution pour supprimer larrire plan.
Des solutions comme lutilisation du centre de gravit de limage pour la recentrer
puis un dcoupage approximatif suivant le type de la forme tait possible. Cependant une
solution plus simple et plus efficace a permis de rsoudre ce problme. Le principe est que
chaque panneau est dlimit par une bordure de couleur (parfois il est compltement color).
Il suffisait dutiliser cette bordure comme limite du panneau sur limage considre.
Lide a t donc de noircir tous les pixels partant du bord tant quils ntaient pas de
la bonne couleur, ce que fait la fonction enleverBord. Cette solution facile tait possible car la
couleur entourant un panneau est rarement de la mme couleur que celui-ci.



On voit sur cette photo la dtection avec et sans enleverbord.
III.4. Limite du programme et amlioration

Mme si la dtection se fait de manire tout fait correcte sur des images simples
comportant peu de formes et de couleurs parasites (photo en campagne), elle peut savrer
inefficace sur des cas plus compliqus. En effet, la dtection des couleurs se faisant en mme
temps pour les trois couleurs possibles (rouge, bleu et jaune), il se peut quun panneau rouge
sur un fond de ciel trs bleu devienne invisible ou presque impossible dtecter. Plus limage
possde de couleur vive et plus la recherche des formes sera longue et inefficace.
Le programme ne testant pas si la forme dtecte ressemble un panneau ou non, il se
peut que lon ait un certain nombre de formes dtectes nayant aucun rapport. Heureusement,
la fonction enleverBord efface une partie de limage (car la forme dtecte est rarement de
couleur uniforme) ce qui permet lors de la reconnaissance, de supprimer facilement la forme
dtecte.



Une amlioration possible serait de faire la dtection des formes pour chaque couleur
sparment. En effet, cela permettrait de faciliter la dtection en vitant les cas o il y a
accumulation de deux couleurs situes cte cte, ce qui augmente les chances dune
mauvaise dtection. Le problme est que cela rallongerait considrablement la dtection. On
pourrait aussi utiliser pour la dtection des couleurs des niveaux de gris suivant la distance
laquelle se situe une couleur de limage par rapport aux couleurs idales dun panneau. De ce
fait, on aurait des nuances qui mettraient laccent sur les panneaux. Il faudrait alors revoir les
taux de convolution qui pourraient voluer suivant lefficacit de la dtection des couleurs.

Des amliorations sont possibles au niveau du nombre de formes dtectes. La
diversit des panneaux de signalisation routire fait quil reste encore beaucoup de possibilit
comme le panneau "voie prioritaire" en forme de losange ou les panneaux de signalisation
rectangulaire. Cependant, dans notre cas, pour la performance du programme, nous avons
prfr nous concentrer sur les formes les plus usuelles.

Une amlioration possible serait dans le principe mme de la dtection. En effet,
dautres mthodes de dtections des coins sont possibles comme lutilisation des drives
partielles de limage. Cette approche a t envisage mais il aurait fallut reprendre lensemble
du programmes et le manque de temps et les rsultats prometteurs de la premire mthode
nous ont pousss ne pas dvelopper plus cette technique.
IV. Identification des signaux

IV.1. Plan

IV.1.a. Classification dun signal routier

Notre objectif lors de cette phase finale du projet est lidentification du signal dtect au
pralable. Le programme concevoir doit donc tre en mesure de retourner le signal thorique
correspondant celui donn en l'entre. Nous allons ainsi dtailler les hypothses sous
lesquelles nous nous sommes placs avant de prsenter les algorithmes que nous avons mis en
place pour rsoudre le problme. Nous verrons ensuite les diffrentes versions du programme
ainsi que les rsultats obtenus chaque tape de notre projet.

IV.1.b. Etude du risque

Nous avons pens amliorer la qualit de la rponse fournie par le programme en
introduisant une mesure du risque. Cette notion nous a permis ensuite de traiter avec plus de
rigueur la sortie du programme. En effet, selon la confiance quon peut accorder
lidentification, le programme renvoie une ou plusieurs rponses. Cette mthode sest avre
particulirement utile quand le signal de l'entre prsente des imperfections relativement
importantes.

IV.2. Modlisation

IV.2.a. Hypothses

Pour des raisons de commodit, nous avons prfr travailler avec des photos de taille
fixe (50*50 pixels). En effet, cette harmonisation permet la comparaison entre les diffrentes
images. Une mthode spcifique de re-dimensionnement a t utilise pour cela. Il fallait
ensuite choisir le format de donnes utilis dans cette partie du programme. Nous avons opt
pour une reprsentation matricielle des images. Les lments dune telle matrice
reprsentent la valeur du pixel en RVB.

Une reprsentation matricielle des donnes prsente en effet deux avantages majeurs
pour le traitement informatique :
Maniabilit : de nombreux outils mathmatiques sont associs aux matrices :
ajout, suppression, drivation, etc. Tous ces outils permettent un traitement simple de
linformation contenue dans une matrice.
Efficacit : les mthodes utilisant les matrices comme structures de donnes se
montrent trs rentables du point de vue numrique et trs simples mettre en place du
fait de notre connaissance de cet objet algbrique et de notre capacit le grer et le
contrler.

IV.2.b. Algorithmes

Schmatiquement notre programme doit raliser les tches suivantes :
Convertir les donnes dont on dispose en format exploitable
Traitement des donnes
Identification

Le premier objectif tait atteint par le format des donnes utilises par les diffrents
programmes du projet (Image & ImageBuffer) et par le choix dune reprsentation matricielle
des signaux.
Le deuxime objectif est extrmement conditionn par la troisime tche du programme
(Identification). En effet, le traitement des informations dont on dispose dpend de la manire
avec laquelle on veut les exploiter.
Aprs exploration des diffrentes possibilits pour cette tape, nous tions amen
choisir entre :

Utilisation des rseaux de neurones :

Un rseau de neurones (ou Artificial Neural Network en anglais) est un modle de
calcul dont la conception est trs schmatiquement inspire du fonctionnement de vrais
neurones (humains ou non). Les rseaux de neurones sont gnralement optimiss par des
mthodes dapprentissage de type statistiques, si bien qu'ils sont placs d'une part dans la
famille des mthodes issues de la thorie des statistiques, qu'ils enrichissent avec un ensemble
de paradigmes permettant de gnrer de vastes espaces fonctionnels souples et partiellement
structurs, et d'autre part dans la famille des mthodes de l'intelligence artificielle qu'ils
enrichissent en permettant de prendre des dcisions s'appuyant davantage sur la perception
que sur le raisonnement logique formel. Lapplication de cette mthode dans le cadre de notre
projet reviendrait mettre en place un tel rseau o la phase dapprentissage correspond
passer en entre les images thoriques.

Utilisation dune base de donnes :

Cette mthode est la plus simple qui vient lesprit lorsquon veut traiter ce genre de
problme didentification. Elle revient comparer le signal trait une srie dimages de
rfrence classes dans une base de donnes prconstruite. La comparaison de deux matrices
se fait en deux tapes. La premire consiste faire subir aux images une srie de traitements
et la deuxime effectuer la comparaison proprement parler. Pour raliser cette deuxime
tape, il nous faut fixer le ou les critres selon lesquels on peut faire la diffrence
efficacement entre deux images.

Les signaux traits ne prsentant ni rotations ni dissymtries particulires, nous avons
opt pour la deuxime mthode. En effet, lefficacit des rseaux de neurones est optimale
quand les signaux traits sont dissymtriques. Le choix des lments constituant cette base de
donnes conditionne ainsi les rsultats obtenus : ils varient selon que le signal identifier soit
un lment de la base de donnes ou non. Nous verrons quau fil de lvolution du programme,
lutilisation de cette base va sensiblement changer.

La dernire partie tudier est donc le traitement des images. Pour cela nous avons
pens mettre en place une librairie regroupant une panoplie doprations qui pouvaient nous
tre utile pour extraire le maximum dinformation des matrices (images). Ces oprations
seront dtailles plus loin dans le rapport. Cette librairie sest avre extrmement pratique
pour la suite de notre projet.

IV.3. volution du programme

IV.3.a. version 1.0

Pour notre premire approche du problme, nous avons tout d'abord eu dfinir une
distance (ou norme) qui nous permettrait de trancher si oui ou non le signal qu'on traite est
proche d'un signal dj sauvegard. Nous avons choisi une norme classique sur la matrice:
| |

1 + n j< i, < 0
j i,
M = M

Aux vues des panneaux que l'on cherche dtecter, nous avons prfr travailler sur la
composante rouge de l'image.
Nous avons ensuite cherch les critres prendre en compte pour la phase identification.
Nous avons tout d'abord pens une comparaison pixel pixel de l'image. Cette mthode
prsentait deux inconvnients majeurs :

Une translation de quelques pixels de l'image d'entre faussait considrablement
le rsultat.
La taille des images tant rduite, deux signaux de la mme forme, ne prsentaient
que quelques pixels de diffrence.

Nous avons donc pens introduire une mesure de la forme contenue dans l'image
notamment par lutilisation des drives.

i. description du programme

Classe matricev1

Nous avons commenc notre programme par llaboration de la classe matrice : une
librairie qui contient tous les outils dont on pourrait avoir besoin pour manipuler cette
structure algbrique. On a ainsi programm les mthodes somme, diff, produit, sommeCoeff,
imprimer Pour pouvoir valuer la diffrence entre deux matrices, on a utilis la norme
dfinie prcdemment.
On a dfinit le centre de gravit dune matrice comme tant le barycentre des
coefficients pondrs par leur valeurs. Ce point ainsi dfinit servirait recadrer la matrice en
question en translatant le centre de gravit au centre de la matrice (le point de coordonnes
(25, 25)). Un tel recadrage permet de traiter les images translates de quelques pixels.
La mthode normaliser consiste fixer la valeur du maximum de la matrice et lcart
type entre les valeurs de cette matrice. Cette mthode nous permet de mieux exploiter les
rsultats de nos critres de comparaison. Il nous permet aussi de mieux valuer le taux de
confiance.
La mthode AngleTangeant construit une nouvelle matrice dont les coefficients sont les
angles tangeants en chaque point de la matrice image. Cet angle est calcul comme tant
larctangeant de la drive discrte horizontale divise par la drive discrte verticale. La
drive discrte (ici horizontale) est calcule par la formule suivante

d
i , j
A
i 1, j 1
2A
i , j 1
A
i 1, j 1
A
i 1, j 1
2 A
i , j 1
A
i 1, j 1

d
i,j
valeur de la drive.
A
i,j
coefficients de la matrice image (pris nuls si ils sont extrieurs la matrice)
Classe Bddv1

Cette classe nous permet de construire notre base de donnes de signaux de rfrences
partir de fichiers images prexistant. La premire version de ce programme contient
seulement 10 panneaux comme illustr plus bas.

Classe identifev1

Dans cette classe, nous exploitons les classes prcdentes pour comparer le signal tudi
avec les signaux de rfrence de la base obtenue partir de Bdd. Pour cela nous devons
dfinir les critres de comparaison :

Premier critre : Ce critre est le plus naturel quon puisse imaginer : la diffrence
pixel pixel de deux images (en loccurrence pour nous, diffrence coefficient
coefficient entre deux matrices).
Deuxime critre : Nous avons appel ce critre la diffrence de gradient entre
les deux matrices . Nous avons commenc par calculer le gradient des deux matrices
comparer et calculer langle de la tangente en chaque point de la matrice. Nous
avons construit ainsi deux nouvelles matrices dans lesquelles on a stock les valeurs
de ces angles. Ce critre consiste finalement comparer ces deux matrices coefficient
coefficient.

Les deux critres sont ensuite normaliss, nous obtenons ainsi un minimum infrieur
-1 pour le signal de la base de donnes qui correspond le plus notre signal tudi selon le
critre pris en compte. La normalisation consiste centrer les rsultats (moyenne nulle) et
les harmoniser (variance de -1). Cette normalisation permet donc de ramener les deux critres
une mme chelle ce qui facilite aprs leur utilisation (comparaison entre les deux critres,
dfinition dun seul critre partir de ces deux critres). Cette normalisation se fait par
lintermdiaire de la mthode normaliserCritere

Pour exploiter ces rsultats nous avons utilis une mthode de principe gomtrique
quon a baptis rgion de confiance. Nous avons mis le critre 1 en abscisse et le critre 2 en
ordonne. La rgion de confiance est celle obtenue conformment la figure ci contre. Nous
avons la fin ajout une dernire vrification faire, suite une tude des cas : les points
retenus doivent tre une distance de 0,8 de laxe des abscisses ou de laxe des ordonnes.

















A partir de cette rgion de confiance, est dfinie une mesure du risque. Plusieurs cas se
prsentent :
Plusieurs rsultats sont possibles. On rcupre alors les deux meilleurs rsultats
(ceux qui sloignent le plus du centre du repre) et on calcule la diffrence
relative. Si cette diffrence est suprieure 1, la confiance est maximale.
Un seul rsultat est possible. On suppose alors que le deuxime rsultat est situ
la frontire de la rgion de confiance et on calcule de la mme faon que
prcdemment.
Aucun rsultat nest dtect. Le programme retourne un message derreur.

Si la confiance est suprieure 60%, seul le meilleur rsultat est renvoy. Si elle est
comprise entre 25% et 60% les deux meilleurs rsultats sont renvoys. Finalement, si la
confiance est faible (infrieure 25%) alors aucun rsultat nest renvoy, seul le nom des
signaux est renvoy.


ii. tests & rsultats:

Comme nous l'avions dj indiqu au dbut de ce rapport, cette premire version du
programme tait destine identifier des signaux thoriques. Pour tester ce programme nous
avons donc tout d'abord test les images de la base de donnes avant de passer quelques
tests qui permettaient de vrifier la pertinence de nos raisonnements.

Le tableau suivant regroupe les rsultats des dix panneaux de la base de donnes

Signal



D (sd) 2,1 2,52 2,04 2,37 2,14 2,61 2,48 2,79 2,67 3,42
C (%) c.m. c.m. c.m. c.m. c.m. c.m. c.m. 43.2 43.9 c.m.

D = distance (grandeur sans dimension)
C = confiance (exprim en pourcentage)
c.m. = confiance maximale

A partir de ces premiers tests, on peut dj conclure que le choix de la base de donnes
conditionne les rsultats. En effet, dans les deux cas ou le programme n'arrive pas
dterminer avec prcision la nature du signal (limitation de vitesse 50km/h & 70km/h), le
choix des lments de la base de donnes joue un rle important : supprimer un des deux
signaux permettrait didentifier le second avec une confiance maximale. Il faut signaler que
cette incertitude n'est quartificielle et quelle est due la normalisation des critres. En effet,
mme si la diffrence pixel pixel est nulle, la normalisation des critres placerait ce critre
une valeur de -3 fois la variance.


Nous allons ici commenter et analyser les rsultats de quelques tests. Il est noter qu'un
plus grand nombre de test est possible grce aux fichiers testsX disponibles dans le
rpertoire psc.v1.


Tests :

Le programme retourne deux signaux (limitation de vitesse). Ce test
confirme l'ide que le choix des lments de la base de donnes est
primordial.




Le programme identifie correctement ce signal avec un taux de
confiance qui s'lve 98%.



Ces deux tests montrent:

L'importance de travailler sur la composante rouge du signal. En effet, entre le
signal test et ceux de la base de donnes, la valeur du rouge nest pas la mme.
La pertinence des critres choisis. En effet, bien que les signaux existent dans la
base de donnes, leurs formes restent relativement diffrentes.

Passons maintenant des signaux qui n'existent pas dans la base de donnes. Nous
allons en particulier modifier la couleur du signal.

Le programme retourne avec une confiance de 24% le signal suivant
On remarque ainsi l'importance du calcul du gradient qui retrouve la forme contenue dans le
signal. Le faible taux de confiance est videmment du la forme extrieure du signal.





Image test Rsultat

Ce signal est identifi avec une confiance maximale grce au calcul de la drive.












iii. Limitations et amliorations possibles :

Le premier problme signaler ce niveau reste videmment le choix de la base de
donnes. En effet, avec un nombre aussi rduit de signaux, les rsultats restent en de des
esprances. Une ide intuitive serait donc d'augmenter le nombre de signaux rfrences tout
en faisant attention des effets de ddoublements comme ceux observs pour les signaux de
limitation de vitesse. Le choix des lments de la base de donnes dans la deuxime version
du programme fera lobjet de plusieurs tests.

Le deuxime problme constat concerne la comparaison pixel pixel. En effet, nous
avons pu observer lors des tests, des petites modifications des images qui induisent des
diffrences au niveau de quelques pixels. L'information ponctuelle reste donc assez imprcise.
Pour remdier cela, nous avons pens lisser l'image traite. Cette mthode sera traite plus
loin dans le rapport.

Un autre problme non moins important concerne la rgion de confiance. Nous avons
vu que mme si les images sont identiques, l'harmonisation des rsultats entrane quelques
imprcisions. La solution imagine consiste donner un indice de confiance maximal,
chaque fois que la diffrence entre les matrices ou les matrices gradients taient nulle. Cette
modification permettrait d'viter les imprcisions observes lors des premiers tests (cas de
limitation de vitesse).
IV.3.b. version 2.0

Pour cette deuxime version du programme, nous allons combiner nos rsultats une
version des programmes de dtection des couleurs et des formes. Le signal d'entre sera
maintenant une image contenant un signal routier dans la campagne. Nous rcuprons le
signal renvoy pour le traiter et essayer de l'identifier.

La modification majeure par rapport au programme prcdent rside dans
l'agrandissement de la base de donnes qui est dsormais constitue de vingt-cinq lments.
Pour des raisons de commodit, l'affichage des rsultats a t allg.

Il est noter aussi que cette version du programme a t teste avec une version
intermdiaire des autres programmes (dtection des couleurs et des formes) ce qui explique
l'absence de certains panneaux lors des tests effectus.

i. description du programme

Classe matricev2

Nous avons ajout notre classe matrice par rapport la premire version une mthode
gaussienne. Cette mthode applique une matrice donne une sorte de lissage : chaque
coefficient de la matrice contient la valeur moyenne laide de coefficients gaussiens de la
sous matrice 3x3 (ou 5x5) dont il est le centre. Cette mthode nous permettrait dviter des
petites translations et surtout des pixels singuliers dans le signal.

Classe Bddv2

La seule volution de cette classe par rapport la premire version est laugmentation
du nombre de signaux.

Classe identifv2

Deux modifications majeures sont noter. Lintroduction du lissage dimage par un
filtre gaussien et une amlioration de laffichage en supprimant les dtails de la comparaison
du signal avec les lments de la base de donnes.

ii. rsultats

Voici les rsultats de quelques tests effectus avec cette version amliore du
programme. Lors de ces tests, nous avons choisit des signaux dj existants dans la base de
donnes.










Le programme renvoie le bon rsultat avec une confiance maximale pour limage ci-
dessous. Il est noter que le signal rcupr l'entre est de bonne qualit (trs peu
d'imperfection) et que le fond de l'image a t supprim.




















La version des programmes de dtection (couleurs & formes) utilise lors de ces tests
retournait des bons rsultats pour les panneaux du premier plan mais un rsultat assez
imprcis pour le troisime.
Voici les rsultats obtenus:

Le dos d'ne dtect avec 85,7% de
confiance
Limitation de vitesse: en premire position,
le programme renvoie la limitation de
vitesse 70 avec une confiance de 10,6%
puis en deuxime position la limitation de
vitesse 50 km/h.
Le dernier signal n'a pas t dtect.
Nous avons obtenu le signal suivant
comme rsultat. L'indice de confiance
tant de 30% En effet, la partie
infrieure du signal dtect n'est pas
visible.






D'autres tests sont possibles avec les fichiers tests figurants dans le rpertoire psc.v2.



iii. limitations et amliorations possibles:

Le problme majeur ce stade du projet rside dans le choix des lments constituants
la base de donnes. Nous avons eu l'occasion de voir pendant la phase des tests l'influence de
signaux dupliqus (deux fois le mme signal dans la base de donnes) sur les rsultats.
Lusage de la base de donnes va en consquent tre modifi pour la troisime et dernire
version du programme.

Nous avons aussi pens amliorer la gestion des exceptions pour donner plus de
robustesse aux diffrents programmes. Pour cela, nous avons prvu de mieux grer les erreurs
notamment au niveau de la librairie matricev3.java.
IV.3.c. version 3.0

La nouveaut dans cette troisime version du programme est la dcomposition de
lidentification en trois tapes. On a spar, tout dabord, la reconnaissance des signaux ronds
et des signaux triangulaire. Ensuite, dans chacune de ces deux classes on a dfini un certain
nombre de sous classes de panneaux rassembls pas ressemblance.

Pour identifier un panneau on se place donc au dbut dans lune des deux classes
triangle ou rond (information donne avec le panneau dtect). On compare ensuite notre
signal une base de donnes forme par un reprsentant de chaque sous-classe. On se place
ensuite dans la sous-classe du reprsentant trouv et on effectue la comparaison du signal
avec les lments de cette base de donnes pour obtenir le rsultat final.

Classe Triangle
Sous classe Rempli Flche Deux flches Bas Animaux
Reprsentant











Autres images





Classe Rond
Sous classe Dpasser Flche
Limitation
de vitesse
Nombre Moto
Stationn
ements
interdit
Reprsentant

















Autres images



i. description du programme

Classe matricev3
Lors des deux dernires versions, nous avons eu dfinir toutes les oprations dont nous
avions besoin. Nous avons donc pens amliorer la gestion des erreurs de cette classe. Une
mthode erreur a t donc rajoute. Elle sera particulirement utile si la matrice traite nest
pas carre ou est nulle.
Classe Bddv3

Cette classe a subit une volution considrable : au lieu de gnrer une seule base de
donnes dImageBuffer avec tous les panneaux elle peut gnrer plusieurs bases de donnes.
Ces bases de donnes peuvent tre de deux natures : base de donnes de reprsentants de
sous-classes ou base de donnes dlments dune sous-classe.
On a aussi augment considrablement le nombre de signaux dans notre base de
donnes pour pouvoir identifier les signaux les plus courants.

Classe identifv3

Cette classe a subi un lger changement du point de vue conceptuel : une nouvelle
fonction classe qui permet de comparer le signal aux reprsentants de sous-classes et de
donner comme rsultat le numro de la sous-classe qui donne le meilleur rsultat.


ii. rsultats

Voici les rsultats de quelques tests effectus avec cette version du programme.


Le programme se place tout
dabord dans la sous-classe
Flches de la classe Triangle et
renvoie la fin le bon rsultat
avec une confiance maximale.






Le programme se place dans la
classe Triangle puis dans la
sous-classe Deux flches et
aboutit par envoyer le bon
rsultat avec une confiance
maximale.












Le panneau triangulaire est
bien dtect avec une confiance
maximale.









Le panneau de 30 Km/h nexiste pas dans notre base de donnes. La version 2 nous
donnait le panneau de 50 Km/h avec une confiance suprieure a 80%. Cette version, par
contre, nous renvoie lerreur : panneau inexistant dans la base de donnes. Ceci est d une
confiance trop faible rsultant de la proximit du rsultat de la comparaison du panneau de 30
Km/h celui de 50 Km/h et du panneau de 70 Km/h de la base de donnes. Ceci amne le
programme conclure que le panneau nexiste pas dans notre base de donnes.


IV.4. Conclusion

En guise de conclusion, nous aimerons particulirement souligner limportance de la
reprsentation en arbre de la base de donnes. En effet, bien quune grande partie du travail
portait sur les techniques mises en place pour lidentification, la qualit de lidentification
sest amliore avec le passage ce mode de reprsentation. Pour cela, deux lments sont
importants :
Le choix des reprsentants des sous-classes : un choix approximatif peut
nous mettre aprs la premire comparaison dans une sous-classe qui ne contient
pas notre panneau. Pour viter ce problme, en plus dun bon choix du
reprsentant, nous avons mis quelques panneaux dans diffrentes sous classes.
Le nombre de panneaux dans chaque sous-classe : le rsultat est dautant
plus lent et surtout plus approximatif que le nombre dlment de la sous classe
augmente.
V. Linterface Graphique

Pour que notre programme final soit ergonomique et agrable utiliser, il sagissait de
raliser une interface graphique qui inclurait les trois programmes de dtection des couleurs,
de dtection des formes, et didentification des panneaux. Cette interface revt invitablement
une certaine importance, et pas seulement dans le cadre de notre PSC, puisquelle constitue le
premier contact entre lutilisateur et le programme. Celle-ci se devait donc dtre lgante,
la fois pour le plaisir de lil et pour la simplicit dutilisation. Cependant, en premier lieu,
son premier objectif tait dtre fonctionnelle.
Par ailleurs, la ralisation de linterface graphique a commenc dans le courant du
mois de Mars, car il fallait que les autres parties aient atteint un certain rsultat au pralable
pour exploiter ces rsultats au sein de linterface.
Le premier paragraphe de cette partie est consacr lapprentissage des bibliothques
graphiques de java (et, en particulier du module SWING), qui a permis llaboration de cette
interface, et la mthodologie suivie pour cet apprentissage ; dans la deuxime partie, on
verra, travers les diffrentes tapes de la progression de notre travail, les diffrents obstacles
et les ralisations diverses en image jusquau rsultat final ; enfin, on abordera les questions
plus techniques dans la troisime partie

V.1. Apprentissage de linterface graphique utilisateur


Il a fallu apprendre par nous-mme raliser ces Interfaces Utilisateurs Graphiques
(en anglais GUI : Graphical User Interface), car la programmation de celle-ci a dbut avant
le cours No8 dINF431, qui voque les bibliothques graphiques AWT (Abstract Window
Toolkit) et Swing, toutes deux de SUN Macrosystems. La libraire graphique Swing possde
une bote outils plus importante, et est plus rcente, on a donc choisi de lutiliser. Cependant
les applications Swing ont galement souvent besoin du paquetage AWT, notamment pour la
cration dinterface Utilisateur et la gestion vnementielle des programmes.
Lapprentissage sest fait principalement sur le site
http://java.sun.com/docs/books/tutorial/index.html lindispensable site officiel de
Macrosystem Sun Java (et plus spcifiquement
http://java.sun.com/docs/books/tutorial/uiswing/index.html), et galement sur quelques
forums et FAQ.
Nous avons voulu commencer apprendre en utilisant les six exemples basiques
proposs sur la page de SUN (Lesson: Learning Swing by Example:
http://java.sun.com/docs/books/tutorial/uiswing/learn/index.html), mthode qui prsente
lavantage dtre rapide et dapparence efficace. En effet, certains cas comme lutilisation de
la barre de dfilement pour une image, les choix dapparence ou le bouton Parcourir
peuvent tre restitus pratiquement tels quels dun autre programme. Nous avons ainsi adapt
les exemples notre objectif en les retouchant.
Mais, en ralit, le fond de comprhension qui permettait daffiner et de perfectionner
ntait pas appris, et il a fallu finalement tudier aprs-coup tout le tutorial, pour crire un
programme nouveau qui ntait pas le prolongement dun autre. En effet, la moindre
modification apporte un programme qui nest pas le ntre relve de limpossible, ce fut
entre autres le cas pour rorganiser les boutons dans la fentre, laffichage des rsultats dans
un cadre prvu cet effet.
En conclusion, lapprentissage par les exemples nest pas suffisante et peut mme
constituer une perte de temps, dans la mesure o lon croit parfois pouvoir se passer de la
thorie avant daccder la pratique.
V.2. Ralisation du programme
V.2.a. Diffrentes tapes de la progression

Notre interface finale est assez loigne de ce quon avait imagin au dbut. Nous avons
souvent apport des amliorations visuelles comme techniques, en se concertant au fur et
mesure.
Nous envisagions tout simplement au dbut dafficher une photo dans une fentre, un
bouton, et un champ de texte affichant le nom du panneau de limage lors de lactivation du
bouton. Nous avons ensuite dcid de rajouter les deux boutons de dtection des formes et des
couleurs, qui permettraient de montrer les rsultats de ces deux sous-programmes. Notre point
de vue quant lintrt de cette interface a en effet volu. Celle-ci avait maintenant pour but
de montrer notre travail ralis dans son ensemble, plutt que son seul rsultat final. Ainsi,
linterface permettait dafficher les rsultats, sous formes dimages, des tapes intermdiaires :
dtection des formes et des couleurs.
Lemplacement des diffrents composants a galement volu au cours du temps : au dpart,
la photo et les boutons taient cte cte et le rsultat devait safficher dessous, comme sur la
photo ci-dessous :



Lactivation de ces boutons ouvrait alors le rsultat des programmes dans une nouvelle
fentre indpendante de celle de linterface graphique. Ceci ntait pas trs pratique car vite
trs encombrant pour lcran. Nous avons alors dcid de faire apparatre le rsultat des
programmes dans linterface mme, choix plus logique. On reviendra plus tard sur
lorganisation de cette tape.
Par ailleurs, le bouton didentification des panneaux, nallait plus renvoyer un Label
de Texte avec le nom du panneau, mais limage correspondante au rsultat de lidentification
dans la base de donnes, ce qui ne change rien pour la thorie du programme. Il suffit de
charger la photo de la base de donnes correspondant au nom du panneau. Les trois boutons
affichent maintenant le rsultat sous la forme dune image qui apparait dans linterface ce qui
est plus lgant. Laffichage dune image, plutt quun texte pour lidentification, nous
semble galement plus significatif, tant donn quon mmorise avant tout lapparence dun
panneau avant son nom. On a aussi dcid de faire apparatre la photo traiter et le rsultat
cte a cte avec les boutons placs en dessous, entre autres pour des raisons doptimisation de
place et de taille des images afficher.
Pour une utilisation plus pratique du programme, il a galement fallu rajouter un
bouton Parcourir , permettant de charger une nouvelle photo qui apparatrait la place de
la prcdente et sur laquelle agiraient les trois boutons des sous-programmes. Ceci nous
permet ainsi dviter davoir spcifier le chemin des images charger en argument de la
fonction principale de linterface. Pour les mmes raisons dergonomie, un bouton Quitter
fut rajout.
Au cours des semaines dlaboration de linterface, son apparence gnrale a
galement volu avec le changement de SetLookAndFeel( une mthode de la classe
UIManager permettant daffecter une apparence, en fournissant un nom de classe look and
feel) : les couleur de fonds des diffrents lments a ainsi galement chang et il y et
lapparition de cadres etc.. le tout dans un soucis desthtique principalement.

Le rsultat final est le suivant lors de lexcution du programme :







Puis lors de lactivation du bouton Parcourir et le choix dune image :




Puis aprs, par exemple, activation du bouton dtection des couleurs :


Le rsultat est quivalent lors de laction sur les deux autres boutons daction .




V.2.b. Organisation dans le travail

Un point important de llaboration de linterface a t le besoin constant de faire en
fonction des trois sous-programmes correspondant aux trois boutons quelle propose. En effet
linterface a frquemment du sadapter eux ou rciproquement. Par exemple, pour
laffichage du rsultat des sous-programmes, il a fallu rcuprer leur rsultat dans une
variable image de type ImageIcon pour finalement les afficher dans le panel prvu cet effet,
alors que ces programmes nouvraient au dbut quune fentre de rsultat voire plusieurs,
impossible insrer tels quels dans linterface. Les trois sous-programmes appels par les
boutons ont donc d tre modifis pour que leur rsultat soit une image contenue dans un
lment de la classe ImageIcon. Linterface a galement ragi en consquence en adaptant la
taille du JPanel daffichage des rsultats et en prenant en compte les cas de lancement
dexception des ces trois programmes, pour viter une erreur dans le programme. Il a fallu que
le format du rsultat soit galement acceptable, i.e. de taille infrieure celle du panel o les
rsultats devaient tre affichs, et il y a de nouveau eu interaction entre les deux parties.
Par ailleurs, les trois programmes nutilisant pas forcment des images de mmes
formats, il sest pos un problme pour afficher la photo tudier. Le JPanel prvu pouvait
tre trop petit et le reste des composants ne rentrait plus dans la fentre. La solution
choisie, assez simple et somme toute lgante ft lutilisation dun JScrollPane, qui est un
outil crant une barre de dfilement permettant de faire dfiler limage dans un cadre de taille
fixe. Quelque soit la taille de la photo choisie, on pouvait ainsi lafficher dans linterface
sans soucis de tailles.

V.2.c. Conclusion de notre travail

Nous avions prvu dajouter cette interface un indicateur affichant le temps ncessaire
lexcution des programmes, mais celle-ci na pas encore t ralise au moment de la
rdaction du rapport crit. Il faut galement ajouter que son intrt sest largement amoindri
puisque les temps dexcution sont devenus dsormais faibles. Ceci reste nanmoins une
amlioration envisageable dici la soutenance orale.
Mis part cela, on peut considrer que le but fix pour cette interface a t atteint puisque
celle-ci prsente tous les outils ncessaires tout en restant simple.

V.3. Dtails techniques

Linterface graphique importe diffrentes bibliothques :
import java.io.* ; // Accs en entre/sortie aux fichiers et
aux autres flux
import javax.swing.*; //Package swing contenant les
composants, modles dinterfaces
import java.awt.*; // Abstract Window Toolkit. Classes de base
permettant la programmation de GUI
import java.awt.event.*; // Gestion dvnements pour les
interfaces graphiques.








V.3.a. Cration des composants

La fentre est compose dune JFrame, ou fentre principale. Un lment JFrame nest
compose que dun titre, dun bord (et ses boutons de rduction) mais on peut lui insrer des
conteneurs.
La ntre contient trois JPanel, i.e. le conteneur le plus gnral de composants lgers
(de mme, un JPanel na dautre intrts que ce quon va mettre lintrieur) :

- Le premier, pane, contient la photo tudier : pour des raisons de format
voques ci-dessus, un JScrollPane a t utilis grce au code suivant :
JPanel pane = new JPanel();
Photo = new JLabel((ImageIcon)null,JLabel.CENTER); // Le
Jlabel est le composant basique pour afficher du texte et des
images.
JScrollPane pictureScrollPane = new JScrollPane(Photo);
//cration du JscrollPane
pane.add(pictureScrollPane);
On rappelle que le JScrollPane permet de crer une barre de dfilement.

- Le deuxime, result1pane, est celui affichant le rsultat-image de laction
dun bouton :
JPanel result1pane = new JPanel(new FlowLayout());
Result1=new JLabel((ImageIcon)null,JLabel.CENTER);//limage,
dabord null, va voluer
Textresult=new JLabel("");
result1pane.add(Textresult, BorderLayout.WEST);//result1pane
contient un champ de texte...
result1pane.add(Result1, BorderLayout.WEST);//..et une image

- Le troisime, buttonPanel, est celui contenant les cinq JButton (un JButton
est un composant contenant un bouton cliquer, possdant un intitul
ou ventuellement une photo) :
Les trois JButton des sous programmes de dtection et
didentification modifient simplement la variable contenant limage
afficher dans le JPanel des rsultats :
buttonPanel = new JPanel(new FlowLayout()); // cre
le JPanel
JButton button1 = new JButton("Identifier les
panneaux"); // cre le premier JButton
button1.setActionCommand("identification");
button1.addActionListener(this); // dtecteur
daction plac sur le bouton
buttonPanel.add(button1); // ajoute le bouton au
JPanel
Idem en changeant 1 en 2 et 3 pour les boutons de
dtection des formes et de couleurs.
Le JButton quitter qui ferme le JFrame par la commande :
JButton buttonFermer = new JButton("Quitter");
buttonFermer.setActionCommand("quitter");
buttonFermer.addActionListener(this);
Le JButton Parcourir qui ouvre une fentre de recherche sur les
disques et rcupre le rsultat par la commande :
fc = new JFileChooser(); // cre loutil pour
choisir un fichier
ImageIcon icne=new ImageIcon("images/Open16.gif");
//icone douverture du bouton
JButton buttonOuvrir=new
JButton("Parcourir..",icone); // cration du bouton
buttonOuvrir.addActionListener(this);
buttonOuvrir.setActionCommand("ouvrir"); //sert
excuter la commande
fc.setDialogTitle("Choisir l'image");
On ajoute ensuite result1pane et buttonpanel au panel principal pane par :
pane.add(buttonPanel);

V.3.b. Modification de lapparence gnrale
Par ailleurs, la plateforme Java permet de spcifier un aspect particulier
appliquer une application Swing. La mthode setLookAndFeel() de la classe
UIManager permet d'affecter une apparence, en fournissant un nom de classe
look and feel.
// Nom de la classe Look and Feel
UIManager.setLookAndFeel(nomClasseLAF);
// Instance de la classe Look and Feel
UIManager.setLookAndFeel(instanceClasseLAF);
Il existe plusieurs look and feel pour les applications Swing. Celui que lon a choisi est
lapparence System . Cette mthode a t globalement recopie des programmes
exemples du site de Macrosystems java sun.
La mthode private static void createAndShowGUI(), appele par main(), cre
linterface graphique :
JFrame frame = new JFrame("SwingApplication"); // cration
de la fentre principale
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//
activation de la fermeture de la JFrame
Component contents = app.createComponents();//cration des
nouveaux composants
frame.getContentPane().add(contents, BorderLayout.CENTER);
//ajout des composants dans la JFrame
frame.pack(); // affichage
frame.setVisible(true); // de la fentre
La couleur de fond choisie pour la fentre est le blanc grce la commande
suivante :
buttonPanel.setBackground(Color.white);
pane.setBackground(Color.white);
Des bords sont placs autour des Jpanel :
buttonPanel.setBorder(BorderFactory.createTitledBorder(""
));
result1pane.setBorder(BorderFactory.createTitledBorder("R
sultats"));
pane.setBorder(BorderFactory.createTitledBorder(""));
Les dimensions des diffrents lments est prcise ci-dessus, avec premier
argument tant la longueur et le second la hauteur :
buttonPanel.setPreferredSize(new Dimension(800,100));
result1pane.setPreferredSize(new Dimension(320,400));
pictureScrollPane.setPreferredSize(new Dimension(650,
500));
pane.setPreferredSize(new Dimension(1000,700));

Note:les tailles des composants sont bien convenables car :
400+100<700, 500+100<700 (hauteur), et
650+320<1000, 800<1000 (longueur)

V.3.c. Les dtecteurs daction et leurs effets

On a plac des dtecteurs daction sur les cinq boutons par la commande :
button1.addActionListener(this) ;
button2.addActionListener(this) ;
button3.addActionListener(this) ;
buttonClose.addActionListener(this) ;
buttonOuvrir.addActionListener(this) ;

On associe alors chaque programme une action correspondante :
//CAS du bouton "Parcourir..."
if (e.getActionCommand() == "ouvrir") { //identification
du bouton
int returnVal = fc.showDialog(buttonPanel,"Ok");
if (returnVal == JFileChooser.APPROVE_OPTION) {
File b = fc.getSelectedFile();
filePathAndName = b.getAbsolutePath(); //String de
ladresse du fichier choisi
ImageIcon display=new ImageIcon(filePathAndName);
System.err.println(filePathAndName + " loaded");
if (Photo!=null)
Photo.setIcon(display); //Actualisation de limage
tudier dans linterface
}
}


//CAS du bouton "Quitter"
if (e.getActionCommand()=="quitter") { //identification
du bouton
System.exit(0);
}

//CAS du bouton "Dtection de la forme"
if (e.getActionCommand()=="forme") { //identification du bouton
if(filePathAndName!=null) { //Dtection d'erreur
Image rslt12=Forme.donneImageManu(filePathAndName)[0] ;//Appel
au sous-programme dsir
rslt1 = new ImageIcon(rslt12);//Cration de l'ImageIcon
Rsultat
if (Result1!=null)
Result1.setIcon(rslt1); // Actualise l'image Rsultat
Textresult.setText("Rsultat");
}
}
Lutilisation des deux autres boutons daction est totalement quivalente celle ci-dessus.
Bibliographie

II. La dtection des couleurs

Liu, H., and Ran, B., "Vision-based Stop Sign Detection and Recognition System for Intelligent
Vehicle", Transportation Research Record, No. 1748, pp.161-166, 2001.

Bartneck, N. and Ritter, W. "Color Segmentation with Polynomial Classification",
11th International Conference on Pattern Recognition, Vol.2, pp.635-638, 1992.

http://www.uc3m.es/uc3m/dpto/IN/dpin04/IE3tie97.pdf

III. Dtection des formes

K. Rangarajan, M. Shah, and D. Van Brackle, Optimal corner detector, Comput. Vision,
Graph., Image Processing, vol. 48, no. 2, pp. 230245, Nov. 1989.

L. Kitchen and A. Rosenfeld, Gray-level corner detection, Pattern Recognit. Lett., vol. 1, pp.
95102, 1982.

M. Blancard, Road sign recognition: A study of vision-based decision making for road
environment recognition, in Vision Based Vehicle Guidance, I. Masaki, Ed.Berlin, Germany:
Springer-Verlag, 1992, pp. 162175.

http://homepages.inf.ed.ac.uk/rbf/CVonline/

http://www.uc3m.es/uc3m/dpto/IN/dpin04/IE3tie97.pdf

http://www.enseignement.polytechnique.fr/profs/informatique/Jean-
Jacques.Levy//00/jdk1.1.8/docs/api/packages.html

http://java.developpez.com/faq/java/?page=graphique_general_images#GRAPHIQUE_IMAG
E_to_BufferedImage

IV. Identification des signaux

Encyclopdie en ligne : fr.wikipedia.org/wiki/Accueil. Articles sur les rseaux de neurones

Road Traffic Sign Detection And Classification (Arturo de la Escalera et al)

Road Sign Recognition by Single Positioning of Space-Variant Sensor Window (D. G.
Shaposhnikov et al)

Real-Time Recognition of Signaling Lights in Road Traffic (L. Tsinas, V. Graefe)

An Active Vision System for Real-Time Traffic Sign Recognition (Jun Miura et al)

Vision-Based Driver Assistance System (Jun Miura)

Road Sign Classification without Color Information (Pavel Paclik et al)

V. Linterface Graphique

http://penserenjava.free.fr/pens_2.4/indexMain40d4.html?chp=14&pge=00

http://www.laltruiste.com/document.php?url=http://www.laltruiste.com/coursjava/swing_appl
ication.html

http://www.thionville.com/cybermonde/java2.html

http://java.sun.com/docs/books/tutorial/index.html

http://java.sun.com/docs/books/tutorial/uiswing/index.html

http://java.sun.com/developer/onlineTraining/GUI/Swing1/shortcourse.html#JFCScrollPane