summaryrefslogtreecommitdiff
path: root/i/vision/doc/camera.tex
blob: a200796816bf7d7b3ec22704323e8b3d5964b871 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
\documentclass[a4paper,dvips,pdftex,titlepage]{article} 
\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}
\usepackage[french]{babel}
\usepackage{fancyhdr}
\usepackage[dvips]{graphicx}
\usepackage{verbatim}
\usepackage{times}
\usepackage{vmargin}

% MACROS
%----------------------

\pagestyle{fancy}
\parskip=10pt
\baselineskip=12pt
\parindent=20pt		% alin�a
\lhead{{EFREI Robotique}}
\rhead{Documentation vision}

% espace horizontale
\newcommand{\HRule}{\rule{\linewidth}{1mm}} \setlength{\parindent}{0mm}

% definitions des titres de parties
\newcommand{\Section}[1]{\section{\LARGE{#1}}}
\newcommand{\addsection}[1]
{
    \addtocounter{section}{1}
    \addcontentsline{toc}{section}{\LARGE{\arabic{section}.  #1}}
    \clearpage
    \hspace*{-2cm}
    \begin{LARGE}\textbf{\arabic{section}. #1}\end{LARGE}\\
    \hspace*{-2cm}
    \rule[15pt]{18cm}{0.5pt}
    \setcounter{subsection}{0}
    \newline\newline
}
\newcommand{\addsubsection}[1]
{
    \addtocounter{subsection}{1}
    \addcontentsline{toc}{subsection}{\Large{\arabic{section}.\arabic{subsection}  #1}}
    \vspace{1cm}
    \hspace*{-1cm}
    \begin{Large}\textbf{\arabic{section}.\arabic{subsection} #1}\end{Large}\\
    \newline
}


% commande d'ajout d'image
\newcommand{\addpic}[3] 
{
    \begin{figure}[h]
    \begin{center}
    \fbox{\includegraphics[height=#2]{#1}}
    \caption{#3}
    \end{center}
    \end{figure}
}

\linethickness{5pt}

% �vite les orphelins en d�but ou fin de page
\widowpenalty=10000
\clubpenalty=10000
\raggedbottom
%-----------------------------------------
%-----------------------------------------
\begin{document}

% PAGE DE PRESENTATION
%----------------------
\begin{flushright}
\includegraphics{robot.png}
\end{flushright}


\thispagestyle{empty}
\vspace*{\stretch{1}} \HRule
\begin{flushright}
\Huge
\textsc{Les yeux du robot}\\
\end{flushright}
\HRule  \\ \Large\textsc{Olivier Gaillard} \vspace*{\stretch{1}}
\begin{center}
 \Large\textsc{Septembre 2004}
\end{center}
\newpage


% SOMMAIRE
%----------------------
%\addcontentsline{toc}{section}{Table des mati�res}
\renewcommand{\contentsname}{\Huge Table des Mati�res}
\tableofcontents
\newpage


\fontsize{12}{15pt}\selectfont

%\small

% INTRO
%----------------------
\begin{Huge}\textbf{Introduction}\end{Huge}
\addcontentsline{toc}{section}{Introduction} \vspace{5cm}

Ce programme de traitement et d'analyse d'images a �t� con�u pour le concours
Eurobot organis� par Plan�te Sciences.\\

Le programme est capable de capturer une image � partir d'une webcam,
traiter l'image, analyser les couleurs, analyser les formes, d�tecter les balles
et les poteaux, donner la position d'un objet par rapport au robot, construire 
une carte virtuelle contenant la position de toutes les balles vues.\\

Nous allons voir en d�tails chaque partie de ce programme.\\


% les espaces couleurs
\addsection{Les espaces de couleurs}

% + definition
\addsubsection{D�finition}
Les espaces de couleurs sont des r�f�rentiels permettant de coder une couleur.
Par exemple, le vert va �tre repr�sent� dans le mode RGB par : R=0 G=255 B=0. 
Chaque espace de couleurs poss�de des sp�cifit�s particuli�res, ainsi, le choix de 
l'espace de couleur utilis� d�pends de l'application que l'on veut effectuer.\\

Nous allons voir en d�tails trois des espaces de couleurs les plus connus : RGB, YUV, HSI.

% + RGB
\addsubsection{RGB (Red, Green, Blue)}
Le RGB est le mode que l'on conna�t le mieux. Chaque composante repr�sente 
une couleur de base : rouge, vert et bleu. La valeur de chaque composante
est proportionnelle � la quantit� des couleurs de base � m�langer pour
obtenir la couleur finale.\\

\addpic{couleur_rgb.png}{2.5in}{Cube RGB}

L'avantage de ce mode de couleur est qu'il est tr�s intuitif, ainsi, lorsque l'on
change une des valeurs, on sait � peu pr�s quel va �tre le r�sultat de ce changement
sur la couleur finale.\\

Par contre, l'inconv�nient de ce mode est sa sensibilit� � la lumi�re. En effet, en ajoutant
de la lumi�re sur un objet, les trois composantes vont changer de valeurs.


% + YUV
\addsubsection{YUV}
Le YUV est un espace de couleur tr�s utilis�, il est notamment utilis� pour 
le codage des couleurs de la t�l�vision. On peut diviser cette espace en 
deux parties : \\
\begin{itemize}
	\item la luminance (Y), qui repr�sente la luminosit� d'une couleur.
	\item la chrominance (UV), qui d�termine la nature d'une couleur (marron, violet, ...).\\
\end{itemize}

Son principal avantage pour notre utilisation est qu'il est moins sensible aux
variations de lumi�re. En effet, pratiquement seul la luminance est affect� par
un changement de luminosit�.

La conversion de RGB en YUV est tr�s simple :\\
\begin{center}
	Y = 0,299.R + 0,587.G + 0,114.B\\
        U = 0,147.R - 0,289.G + 0,437.B + 0,5\\
	V = 0,615.R - 0,515.G - 0,100.B + 0,5\\
\end{center}

% + HSI
\addsubsection{HSI (Hue, Saturation, Intensity)}
Ce mode de couleur est tr�s utilis� en robotique.\\

Son avantage est le m�me que le YUV, il n'est pas sensible aux variations de 
luminosit�.\\

\addpic{couleur_hsi.png}{3.5in}{Cone HSI}

Par contre, la conversion � partir de donn�es RGB demande plus de ressources processeur.\\

La conversion de RGB et HSI se fait de la mani�re suivante :
\begin{equation}
	I = \frac{1}{3}(R+G+B)
\end{equation}
\begin{equation}
	S = 1-\frac{3}{R+G+B}[min(R,G,B)]
\end{equation}
\begin{equation}
	H = cos^{-1}
		\frac
			{\frac{1}{2}[(R-G)+(R-B)]}
			{\sqrt{(R-G)^{2}+(R-B)(G-B)}}
\end{equation}

% Les r�seaux de neurones � comp�titions 
\addsection{Les r�seaux de neurones}

% + pr�sentation
\addsubsection{Pr�sentation}
Le r�seau de neurones est l'un des plus grands outils de l'informatique. Il est
utilis� dans des situations o� l'algorithme n�cessaire � la t�che demand�e serait
trop complexe � r�aliser. N�anmois, le r�seau de neurones n'est pas toujours facile
� ma�triser. C'est une grande bo�te noire dans laquelle des donn�es sont rentr�es 
et transform�es par le r�seau de neurones. Cette bo�te noire doit cependant �tre
calibr�e pour la t�che � traiter.\\

\addpic{NN.png}{4in}{Exemple de r�seau de neurones}

Le r�seau de neurones informatiques prennent exemple sur les neurones biologiques
pour traiter les informations. Chaque neurone est reli� aux autres par des connections
pond�r�s. La sortie d'un neurone r�sulte de l'int�gration de ces entr�es. En g�n�ral
l'int�gration utilis�e est simplement la somme de ces entr�es multipli� pour les poids
associ�s � ces entr�es.\\

\addpic{NN_nodes.png}{3in}{D�tails d'une connection entre plusieurs noeuds}

La calibration du r�seau (ou apprentissage) va se faire en modifiant les connections
entre les diff�rents neurones et notamment leurs poids. La modification de ces poids
se fait en utilisant des algorithmes de minimisation des erreurs. L'apprentissage se
fait en appliquant un grand panel d'exemples en entr�e du r�seau pour que celui
puisse s'adapter.\\


\newpage

% + la comp�tition 
\addsubsection{La comp�tition}
Le r�seau de neurones � comp�tition est l'un des plus simples mais il est tr�s puissant.
Il permet de diff�rentier un set de donn�es.\\

Pour la vision, nous allons l'utiliser pour diff�rentier automatiquement les diff�rentes
couleurs pr�sentes dans une image. Par exemple, on pourra lui demander de diff�rentier
dix couleurs diff�rentes. Lors de l'apprentissage, le r�seau va alors essayer de s�parer
les six couleurs les plus oppos�s possibles.\\



% la segmentation
\addsection{La segmentation}
La segmentation est un processus qui permet de transformer l'image captur�e par la cam�ra.
Cette transformation a pour but de la rendre plus simple � traiter par la suite.\\

\addpic{screen_adjust.png}{3in}{Exemple de segmentation}

Dans notre cas, la segmentation va �tre une diminution du nombre de couleurs de l'image.
On va ainsi passer de 256 couleurs � moins de 10 couleurs. Cette segmentation est tr�s 
d�licate puisqu'elle va produire l'image de base pour les traitements suivants.\\

C'est dans ce traitement qu'intervient le r�seau de neurones. Il aura en entr�e les trois
composantes de chaque pixel et en sortie la num�ro de la couleur segment�e. Le r�seau devra
�tre pr�alablement calibr�. Cette op�ration est en grande partie automatique mais 
n�cessite quelques r�glages manuels pour une meilleure efficacit�.\\

On aura donc en sortie de cette segmentation une image contenant une dizaines de couleurs
partag�es par le r�seau de neurones.\\


% la formation des groupes
\addsection{La formation des groupes}
Pour trouver un object dans l'image, on la parcourt en effectuant des tests de couleur
sur une partie des pixels de l'image. On va ainsi tester, pour commencer, seulement 1\% de
l'image, en faisant des tests uniquement tous les 10 pixels. En effet, si un object est
situ� sur l'image, on consid�re que celui-ci � une largeur sup�rieur � 10 pixels, ainsi, 
m�me en effectuant ces sauts, il sera trouv�.\\

Une fois qu'un pixel de la couleur cherch�e est trouv�, quelques tests suppl�mentaires
vont �tre effectu�s pour avoir une meilleure pr�cision de la position et de la taille de 
l'object. Pour d�limiter l'object, on utilise l'algorithme suivant :\\
	- On prends comme point de d�part le pixel trouv�.\\
	- On monte tant que la couleur est la m�me.\\
	- On descend en faisant le m�me.\\
	- Puis on teste la gauche et la droite.\\

\addpic{plague.png}{2.5in}{Exemple de l'algorithme sur une balle}

On a alors les coordonn�es d'une bo�te qui entoure l'object. Mais un probl�me subsiste,
si l'object est plus grand que 10 pixels, il peut �tre retrouv� plusieurs fois.
On va alors utilis� le centre de l'object que l'on peut calcul� gr�ce aux coordonn�es
obtenues. Si le centre est le m�me � une certaine erreur pr�s, on consid�re que c'est
le m�me object.\\


% la reconnaissance de forme 
\addsection{La reconnaissance de forme}
La reconnaissance de forme utilise la repr�sentation \i{Phi-s code}. Cette repr�sentation
stocke les distances entre le centre d'un object et les points de son contour. On obtient
alors une fonction des distances en fonction de l'orientation avec laquelle on calcule la
distance.\\

Pour minimiser le bruit, on fusionne des valeurs cons�cutifs de notre courbe et on calcule
leur moyenne.\\

De plus, l'object recherch� pouvant avoir plusieurs tailles, fonction de la
distance auquel la webcam prends l'image, on normalise notre courbe. Pour la normalisation,
on divise par la plus grande distance trouv�e.\\

Un autre probl�me est l'orientation de l'object, en effet celui-ci peut �tre vu avec des 
angles de vue diff�rents. On va d�phaser notre courbe pour la faire commencer � l'index qui
� la plus grande distance.\\

\addpic{graph_forme.png}{4in}{Graphe des distances centre-contour en fonction de l'angle}

Il ne reste alors plus qu'� comparer une courbe de r�f�rence, obtenue lors d'un calibrage,
et la courbe des objects trouv�s. Si le d�calage entre les deux courbes est en dessous d'un
certain seuil, on admettra alors que les objects sont identiques.\\


% la conversion des coordonn�es
\addsection{La conversion des coordonn�es}
Nous disposons maintenant de l'emplacement sur l'image des objects trouv�es. Mais, ce qui
nous int�resse est leur position r�elle par rapport au robot. Cette position r�elle
d�pend �videmment de l'orientation et de la position de la cam�ra. Il va donc falloir
faire une calibration pour trouver une correspondance.\\

Cette conversion contient deux composantes qui vont avoir chacun un traitement diff�rent,
�tant donn� que la nature de leur variation est diff�rente. En effet, pour les ordonn�es,
on peut trouver une �quation du second degr� en faisant une r�gression par rapport � des 
points dont on aura pr�alablement enregistr� la correspondance. On peut utilis� Gnuplot
pour r�aliser cette regression.\\

\addpic{graph_dist.png}{4in}{Courbe de la distance d'un objet en fonction la valeur du pixel}

Pour les abscisses, c'est encore plus simple, il s'agit d'une �quation du premier degr� qui 
est en fonction de l'ordonn�. Il faut donc trouv� pour chaque points de l'ordonn�e les 
coefficients de cette �quation.\\


% la carte virtuelle
\addsection{La carte virtuelle}
La carte virtuelle permet de m�moriser la position des objects trouv�s et de faire des
recoupements entre les diverses informations obtenues par la cam�ra. Le r�le de cette
carte est d'analyser toutes les informations pour donner le plus pr�cis�ment possible
la localisation des objects, et notamment, celle de l'object le plus proche. Cette carte
calcule aussi la probrabilit� que l'object soit encore � la m�me position en fonction
des �v�nements qui ont lieu.\\

Un syst�me de score permet aussi de choisir un object en fonction de diff�rentes options,
comme l'orientation de l'object par rapport au robot, la probabilit� de sa pr�sence �
l'endroit m�moris�, ...\\
  
Cette partie permet une interface facile avec un autre programme car elle donne des 
informations simples et fiables qui ne demandent aucun autre traitement.\\



\end{document}