\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}
