From b6d1d4671e0bcc09661db4e59d78c0a261767427 Mon Sep 17 00:00:00 2001 From: gaillaro Date: Tue, 5 Oct 2004 22:10:26 +0000 Subject: Ajout de la doc de la vision 2004-2005 --- i/vision/doc/camera.pdf | Bin 0 -> 376884 bytes i/vision/doc/camera.tex | 344 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 344 insertions(+) create mode 100644 i/vision/doc/camera.pdf create mode 100644 i/vision/doc/camera.tex (limited to 'i/vision/doc') diff --git a/i/vision/doc/camera.pdf b/i/vision/doc/camera.pdf new file mode 100644 index 0000000..80a1a7b Binary files /dev/null and b/i/vision/doc/camera.pdf 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} -- cgit v1.2.3