summaryrefslogtreecommitdiff
path: root/i/vision/doc
diff options
context:
space:
mode:
Diffstat (limited to 'i/vision/doc')
-rw-r--r--i/vision/doc/camera.pdfbin0 -> 376884 bytes
-rw-r--r--i/vision/doc/camera.tex344
2 files changed, 344 insertions, 0 deletions
diff --git a/i/vision/doc/camera.pdf b/i/vision/doc/camera.pdf
new file mode 100644
index 0000000..80a1a7b
--- /dev/null
+++ b/i/vision/doc/camera.pdf
Binary files differ
diff --git a/i/vision/doc/camera.tex b/i/vision/doc/camera.tex
new file mode 100644
index 0000000..a200796
--- /dev/null
+++ b/i/vision/doc/camera.tex
@@ -0,0 +1,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}