FR 2845806 A1 20040416 FR 0212588 A 20021010 Description Rôle La présente invention concerne un système uni-sensoriel destiné à reconstruire une image en trois dimensions d'un objet visualisé par une caméra par la méthode de segmentation pyramidale, par une formule de calcul de netteté d'image et par la formule de recherche de contour. Etat technique antérieure Le principe de la vision artificielle actuelle repose sur le concept de Réalité Virtuelle ou Augmentée dans lequel la scène modélisée (monde virtuel) est superposée au monde réel vu par une caméra et repose aussi sur le concept de Réalité Virtuelle Intégrale. La mise en oeuvre des systèmes de réalité augmenté et réalité virtuelle intégrale, nécessite la modélisation de l'environnement du robot. Cette modélisation est réalisée grâce aux canaux mult-sensoriels à savoir; des capteurs télémétriques IR ou US et des caméras, pour la reconstruction d'une image en 3 dimension. L'idée originale consiste à utiliser un capteur mixte constitué par la caméra et le télémètre. L'image caméra sert à positionner l'objet dans une pyramide infinie ayant pour sommet le centre optique de la caméra. Le télémètre fournit l'information de profondeur qui permet de situer l'objet dans la pyramide. Le système uni-sensoriel que nous proposons ici, selon l'invention, permet de positionner l'objet dans une pyramide infinie ayant pour sommet le centre optique de la caméra, d'avoir une image réelle à élément finis de l'objet et de fournir l'information de profondeur en utilisant uniquement une seule caméra. Ce système est destiné en particulier à la navigation réactive d'un robot mobile. L'objectif est d'utiliser des techniques basées sur la logique floue pour réaliser une navigation réactive d'un robot mobile. Nous nous plaçons dans le cadre du contrôle des déplacements d'un robot mobile dans un environnement partiellement connu et nous utilisons une méthode hybride pour exploiter les avantages des stratégies de navigation globale et locale. La connaissance à priori de l'environnement est mémorisée afin, d'une part, de générer un chemin global et, d'autre part, de pouvoir comparer la scène réelle à la scène mémorisée. Son avantage est sa simplicité d'implémentation et la rapidité de son exécution. Un autre avantage est que plusieurs processeurs peuvent travailler en parallèle chacun travaillant sur un block d'image. Selon des modes particuliers de réalisation: figure 8 - Une caméra numérique ou analogique, peut être noir et blanc. - Une visualisation, peut être une interface logicielle d'acquisition et de visualisation d'image, peut communiquer avec le calculateur. - Un calculateur, peut commander la caméra, peut reconstruire une image d'un objet en trois dimensions. Principe Vous avez peut être déjà remarqué que lorsque vous entrez dans une pièce pour la première fois vous scannez, avec vos yeux, la pièce avec des mouvements aléatoires pour mémoriser l'image de la pièce en trois dimensions afin de permettre des déplacements éventuels. Nous pouvons penser que vous élaborez une vision en trois dimensions en faisant varier l'épaisseur de votre oeil pour avoir une netteté maximale pour chaque portion de l'image de la pièce. Ensuite vous déduisez, pour chaque portion d'image, la distance objet en utilisant un tableau de correspondance bijectif dans votre cerveau qui lie l'épaisseur de lentille de l'oeil avec la distance objet pour une portion d'image nette donnée. Nous pouvons penser aussi que ce tableau est mis à jour d'une façon dynamique pendant l'apprentissage. En scannant toute la pièce le cerveau effectue une extraction d'une image de la pièce en 3D à éléments finis. Nous pouvons transposer cette méthode dans l'optique en scannant la pièce de la même façon que le cerveau le fait en variant la distance image et en cherchant au moment à trouver une netteté maximale d'une portion d'une image de la pièce, ensuite nous nous déduisons pour chaque portion d'image la distance objet associée en utilisant la formule optique qui lie la distance objet, la distance image et la distance focale pour créer une image de la pièce en 3D à éléments finis. Comment savoir qu'une sous-image est nette ? Une méthode parmi d'autres consiste à effectuer une analyse spectrale par la transformée de Fourier en cosinus discret utilisée en TV numérique pour permettre la compression d'image. Nous savons que plus une image spatiale est nette plus l'image fréquentielle associée est riche en hautes fréquences. Nous pouvons par cette méthode détecter la netteté maximale d'une portion d'une image. Ensuite déduire la distance objet grâce à la formule optique liant la distance objet, la distance image et la distance focale. Nous appellerons les portions d'image sous-image dans l'expose qui suit. La transformée de Fourier en Cosinus Discret(DCT) Soit (x, y) une base orthogonale ayant pour origine O, soit une sousimage f de N pixels par N pixels dans le plan xOz, ou f(x, y) est l'amplitude du pixel ayant pour coordonnées (x, y). On transforme ce plan image, par une opération linéaire, dans un plan fréquentiel de façon à obtenir des données transformées decorrelées. Une transformée linéaire permet la transformation d'une image f en une image F. L'image F présente des composantes ayant des propriétés statistiques différentes de celles des composantes f. Les composantes du nouveau vecteur doivent nous intéresser plus que le vecteur lui-même. Nous pouvons considérer que le vecteur f est conserve mais que la base est transformée. Pour obtenir des résultats équivalents il faut et il suffit que les composantes de f selon la nouvelle base B2 soient identiques à celles de F dans l'ancienne base BI. - Soit [f] la matrice des luminances de la de la sous-image de dimension N,N dans la base spatiale. - Soit[F] la matrice des coefficients transformés de la sous-image de dimension N,N dans la base fréquentielle tel que; i c {0,1................ .N-1} j {O,1l..................N-l} x {,1..................N-l} y e {,1... ............N-l}..DTD: x, y sont les coordonnées des points de la sous-image dans la base spatiale et i, j sont les coordonnées des points de la sous-image dans la base fréquentielle. avec c(O) = 112 et c(s) = 1 pour s u e {0,1,.................N-l} On démontre que la transformation de la base spatiale dans la base fréquentielle est donnée par; (N-1) (N-1) F(ij) = (1/X(2N))c(i)c(j)E Y { f(x,y).cos[(n/N)i(x + 2)].cos[(7u/N)j(y + /2)]} x=0 y=o A titre d'information la transformation DCT inverse de la base fréquentielle dans la base spatiale est donnes par; (N-1) (N-1) f(x,y) = (1/V (2N)Z Z { c(i).c(j)F(ij).cos[(r/N)i(x + 1/2)].cos[(rt/N)j(y+ 1/2)]} i=0 j=0 Calcul de la netteté d'une sous-image Nous savons que plus une image est nette dans la base spatiale plus elle est riche en hautes fréquences dans la base fréquentielle, c'est-à-dire que les amplitudes relatives des hautes fréquences par rapport aux basses fréquences augmentent avec la netteté, autrement dit, plus la sous-image est nette, plus l'énergie du signal est portée par les hautes fréquences. Nous allons donc chercher une formule mathématique qui nous permet de détecter la richesse maximale d'une sous-image en hautes fréquences d'o la détection de la netteté maximale. Quand nous cherchons la signature fréquentielle d'un signal physique le composant continue(ici le composant continue dans la base fréquentielle est F(0,0)) a peu d'importance et comme la Transformée de Fourier en Cosinus Discret(DCT) est une application linéaire, nous soustrairons ce composant avant tout traitement de la sous-image dans la base spatiale. Soit f(x, y) l'amplitude de la luminance du pixel ayant pour coordonnées (x, y) d'une sous-image de dimension N, N. Le composant continu(qu'on appelle dans le programme C++ mean) est donné par; N-1 N-1 mean= { t f(xy)}/N2 x=O y0O Cette valeur " mean " dans la base spatiale est équivalent à la valeur F(0,O) dans la base spatiale. La nouvelle amplitude de la luminance fi (x, y) du pixel est donnée par; N-1 N-1 fl (x,y)= f(x,y)- _ E f(u, v)} /N2 u=O v=O Remarque: Comme la DCT est une opération linéaire, il suffira après la DCT inverse de rajouter le composant continu qui a été soustrait avant la DCT directe à chaque pixel pour retrouver les sous-images spatiales initiales. Une fois que le composant continue est soustrait, on calcul la transformée de Fourier en Cosinus Discret(F1(i, j)). En pratique, nous constatons que même pour une image spatiale très nette les bases fréquences ont des amplitudes très élevées par rapport aux hautes fréquences ( plus le couple (i, j) a des indices élevées plus la fréquence associée est élevée). Les petites variations de la netteté entraînent des petites variations des amplitudes des hautes fréquences mais ces petites variations des amplitudes des hautes fréquences sont masquées par les variations des amplitudes des bases fréquences. Il faut que nous nous rappelions que ce sont les variations des amplitudes des hautes fréquences qui nous intéressent. Pour résoudre ce problème de la détectabilité des petites variations des amplitudes des hautes fréquences, deux approches peuvent être adoptées. La première est une approche analytique qui releve des mathématiques pures, la deuxième est une approche empirique et intuitive. Ici nous adoptons la deuxième approche empirique et intuitive qui consiste à beaucoup atténuer les amplitudes des bases fréquences en favorisant au même moment les amplitudes des hautes fréquences. Autrement dit, un filtre passe haut avec une atténuation exponentielle. Plus la fréquence est basse plus son coefficient associé dans la base fréquentielle est atténué. Ceci doit nous permettre de détecter des petites variations des amplitudes des hautes fréquences donc augmenter la détection de la netteté maximale de la sous-image. La formule suivante a été testée en simulation numérique en C++, elle permet de mesurer la netteté d'une sous-image avec une bonne précision. Ici la DCT sans le composant continu est donnée par; (N-l) (N-1) Fl (ij) =( 1/ /(2N).c(i).c(j).l Z(fl (x,y).cos[(2t/N)i(x+1/2)].cos[(7r/N)j(y+/2)] ) x = Oy = La formule qui mesure la netteté est donnée par; N-1 N-1 net(p,q) = d exp[(i+l).(j+1)/ N2 - l).k]. FI(ij) i=O j=O ou net(p, q) dénote la netteté de la sous-image de coordonnées (p, q). k > 0, k est coefficient de discrimination. La valeur k est choisie d'une façon empirique car si elle est trop grande, elle rendrait le système instable, sensible aux bruits électroniques et aux bruits de quantification numérique, par contre si elle trop petite, elle rendrait la dectection de netteté maximale imprécise. Il faut rappeler que nous traitons des signaux physiques noyés dans le bruit. Comme les composants électroniques sont le siège d'une évolution chaotique non prédictible dans ce cas il faudrait faire un lissage de la courbe liant la netteté avec la distance image pour chaque sous-image pour éviter de se verrouiller sur les pointes de bruit. En théorie pour focaliser une sous-image sur la matrice photo-receptrice, il suffit de varier la distance image pour trouver la valeur maximale de la netteté. Ensuite en déduire la distance objet. La sous-image est mémorisée dans une zone mémoire avec ses coordonnées et la distance associée. Nous effectuons ce procédé pour toutes les sous-images dans un angle d'ouverture fixe pour consister une image en 3D à éléments finis. Segmentation de l'image principale par la méthode de segmentation pyramidale à des angles fixes. Considère le système de la prise d'image dans le plan yOz comme le montre la figure 1 et la figure 2, à gauche nous avons les sous-objets, au milieu la lentille dans le plan xOz et a droite les sous-images. Nous remarquons que le sous-objet O1 donne une sous-image Il limite par l'angle 01 et de même pour tout autre couple de sousobjet et de sous- image, nous remarquons aussi que quand la matrice photo-receptrice glisse au long de l'axe Oy et dans le plan xOz, à une certaine distance donnée (yimage est nette) la sous-image Il converge. C'est à dire que la sous- image devient nette. On en déduit que pour trouver une sous-image (Il) nette d'un sous-objet (01) il suffit d'ouvrir une sous-fenetre limitée par l'angle (01) et de faire glisser la matrice phot-receptrice au long de l'axe Oy et dans le plan xOz. Nous pouvons effectuer le même procédé si nous considérons le système de prise d'image dans le plan xOy. Cela nous donne une souspyramide comme le montre le figure 3, ail étant l'angle d'ouverture horizontal(azimut) et 01 étant l'angle d'ouverture vertical(tilt). Nous pouvons généraliser cette méthode pour toute l'image principale pour obtenir des sous-pyramides ayant pour origine O comme sommet commun. Nous appellerons cette méthode, la méthode de segmentation pyramidale à des angles fixes et à un sommet commun. Soit (x,y,z) une base orthogonale ayant pour origine O comme le montre la figure 4, nous précisons que l'objectif est de segmenter l'image spatiale initiale en nombre donné de sous-image ayant approximativement les mêmes dimensions, ceci pour avoir des sous-images presque carrées afin de permettre une meilleure optimisation pendant la phase du traitement, car la DCT traite des sous-images carrées. Az est le pas de segmentation dans la direction z et Ax est le pas de segmentation dans la direction x, en pratique on fera en sorte que Az soit égale à Ax. yI est la valeur de y pour l'initialisation, cette valeur doit > à la distance focale. Calcul de tilt; On suppose que AOO = 0 = AaO = 0O Az = yI.tan(A01) 2Az = yI.tan(A02 + A01) 3Az = yI.tan(A03 + A02 + AO1) nAz = yI.tan(AOn + A0(n-1) + A(0n-2) +.......+ A03 + A02 + AO1) autrement écrit; n-1 nAz = yI.tan( A0n + A0j) j=O Nous avons donc; n-1 AOn = arctan(nAz/ yI) - JA0j J=0 Calcul d'azimut; De la même façon; n-1 nAx = yi.tan( Aan + Aaj) j=O n-1 Aun = arctan(nAx/ yI) - ZAaj J=0 Ces valeurs Acn et AOn sont calculées une fois pour toute à l'initialisation. Ces valeurs d'angles seront utilisés plus pour chaque nouvelle valeur de yi(distance image). Cette segmentation, vue autrement, nous donne le schéma dans la figure 5. Nous plaçons la lentille dans le plan xOz et la matrice photo-receptrice dans le plan ABCD parallèle au plan xOz. Le plan ABCD n'est qu'un quart de la matrice photoréceptrice. Nous avons fait ce choix pour simplifier le dessein. La sous-image abcd est définie par l'intersection du prisme Ox2xlcdG avec le prisme OHEFCD et avec le plan ABCD, ceci forme une souspyramide du sommet O et de base abcd comme le montre la figure 6 tel que; N-1 nAx = yI.tan( Aan + Aaj) j=0 N-1 nAz = yI.tan( A0n + ZA0j) j=0 Pour faire une poursuite d'une sous-image dans une sous-fenêtre il faut que celle-ci reste exacte à l'intérieure des angles d'ouverture définis par Au et A0, au moins en théorie car il ne faut pas oublier que les coordonnées (x, z) des sommets de la sous-image se mesurent en pixels donc des valeurs entières, comme nous travaillons avec un ordinateur numérique comme outil de calcul, le positionnement de la fenêtre de poursuite subira ce que l'on appelle les bruits de coude de trajectoire d à l'arrondissement de la valeur réelle en une valeur entière. En théorie, il faut que nous prouvions que pour un sommet donné, le lieu de l'origine O et des coordonnées (x, z) forment une droite pour un couple donne de Au et A0, V yi(la distance image de ième rang). Pour démontrer celi il suffit de prendre deux vecteurs ayant le même point commun O et démontrer que l'un est une combinaison linéaire de l'autre, c'est-àdire; Ovl = XOv2 avec X!= 0(X n'est pas nul). Autrement dit, si le produit vectoriel OvlxOv2 = vecteur nul, dans ces conditions, Ovl est une combinaison linéaire de Ov2 et si Ovl a un point commun avec Ov2, alors le lieu des deux points d'indice ( m(i), n(i)) ou bien de coordonnées ( Ax(i), Az(i)) et l'origine forment une droite V yi, yi étant la distance image de i ieme rang. Pour simplifier l'ecriture soit; xm(i) = y(i).tan( am) zn(i) = y(i).tan( On) Comme les valeurs an et 0m ont été calculées une fois pour toutes pour une direction donnée, elles ne dépendent pas de y(i) (la distance image). Les coordonnées (x,z) pour le i+1 rang sont données par; xm(i+1) = y(i+l).tan( am) zn(i+l) = y(i+l).tan( On) Soient les vecteurs Ov(m,n,i) et Ov(m,n,i+l1) deux vecteurs partant de l'origine O et définissant les points xm(i), zn(i), xm(i+1) et zn(i+1) respectivement tel que; Ov(m,n,i) = xm(i) y(i) zn(i) Ov(m,n,i+1) xm(i+l) = y(i+l) zn(i+l) L Faisons le produit vectoriel; xm(i) Ov(m,n,i) x Ov(m,n,i+ 1) = y(i) zn(i) xm(i+l, x} y(i+l) = zn(i+l) xm(i).y(i+1) - xm(i+1)y(i) y(i).zn(i+1) - y(i+l).zn(i) xm(i+l).zn(i) - xm(i).zn(i+1) Substituons xn(i), xn(i+1) dans l'équation suivante; y(i).tan( am).y(i+l1) - y(i+l).tan( am).y(i) Ov(m,ni) xOv(m,ni+l) = y(i). y(i+l).tan( On) - y(i+l). y(i).tan( On) y(i+l1). tan(am). y(i).tan( On)- y(i).tan(am). y(i+l).tan( On) Ov(m,n,i) x Ov(m,n, i+l) = 0 Le produit vectoriel Ov(m,n,i)xOv(m,n,i+l) est égale au vecteur nul et s'il est nul les vecteurs sont parallèles et comme ils ont un point commun(l'origine O), le lieu de l'origine et des points ayant pour coordonnées (x, z) forment une droite. Nous venons de démontrer que pour un couple d'indice (m,n) donné, le lieu des sommets d'une sous-image et le sommet de la pyramide O forment une droite V yi( la distance image), ceci est vrai pour les trois autres sommets restant. Ceci prouve que la sous-image sera bien limitée par les angles fixes pendant la poursuite. Implémentation Le prototype, comme le montre la figure 8, est composé d'une caméra CCD(ici une webcam), un panneau d'acquisition et de visualisation d'image et un calculateur pour la poursuite des sous-images. La caméra CCD est une webcam démontée et remontée comme montre la figure 9, la matrice photo-réceptrice est montée sur une table coulissante, ceci pour simplifier les équation qui régissent le système, la lentille et l'objet sont rigidement fixés sur le même support. Spécifications de la caméra; Capteur CCD: Capteur CMOS, capture vidéo jusqu'en 640x480 pixels, microphone intégré, mise au point manuelle, débit d'images jusqu'à 30 images/sec et interface USB compatible. La VISU est une interface logicielle conviviale et puissante qui permet d'acquérir, de visualiser, de traiter des images, de piloter des caméras, de créer et de lancer des scripts en TCL(Tool Command Language, certains passionnés l'appellent Top Cool Language). Le CALCULATEUR est un logiciel développé en C++, il permet de segmenter l'image, de faire la poursuite des sous-images en fonction de la distance image et finalement de calculer la netteté de chacune des sous-images. Le protocole entre le logiciel client (CALCULATEUR) et le serveur (VISU) est basé sur l'échange de fichiers sur le disque dur. L'efficacité de la méthode en terme de vitesse de communication n'est pas exceptionnelle, mais en contre partie la technique est facile à implémenter, elle est bien portable et fiable. Il est à noter que la relative lenteur du protocole (dans la version actuelle) n'est pas un vrai handicap si on considère qu'il permet d'exécuter des scripts puissants qui ont une large autonomie par rapport au programme client. Voici le déroulement étape par étape de l'exécution en parallèle d'un script dans la logiciel serveur(VISU) et du logiciel client(CALCULATEUR). Voir la listing du script et du logiciel client(CALCULATEUR) en annexe. Etape 1 L'utilisateur décide de lancer le logiciel client(CALCULATEUR) depuis une ligne de commande, un menu, une boite de dialogue et ensuite il lance le serveur(VISU). Le logiciel client commence par effectuer l'initialisation en effaçant sur le disque dur les deux fichiers de synchronisation(framing files) à savoir; " request.txt " et " answer.txt ". Etape 2 Appel du sous-programme interfacewithwebcam( Etape 3 Il initialise la taille de l'image principale(xl = zl = 1; x2 = xcamax = 639; z2 = zcamax = 479; ces valeurs sont définies dans #DEFINE). Il calcule les angles de segmentation une fois pour toute en appelant le sousprogramme calculate_delta-angles(). Appel du sous-programme get locking_addresssegmentimage() permettant de calculer les adresses de verrouillage des sous-images et la segmentation de l'image principale en utilisant les angles de segmentation calculés auparavant. Etape 4 L'utilisateur décide de demander le serveur d'envoyer l'image prise par la caméra. Le programme ouvre un fichier de requête nommé " request.txt ", il écrit dans ce fichier l'ordre à transmettre au VISU. Etape 5 Le programme client tourne dans une boucle " while " en attendant la réponse du serveur, c'est-à-direl'écriture du fichier " answer.txt ". Etape 6 Depuis son lancement le serveur tourne dans une boucle " while " en attendant l'écriture d'une requête " request.txt " par le client. Une fois la requête est reçue, le serveur extrait l'ordre et les paramètres associés, ici c'est l'envois de toute l'image. Il sauvegarde l'image dans le fichier du résultat " result.txt ". Il crée le fichier " answer.txt " et écrit dans ce fichier " finished sending sub image ". Il se met en attente dans une boucle " while " en attendant l'effacement du fichier " answer.txt ". Etape 7 Nous revenons à l'étape 5 o le client attend dans une boucle " while ", le client efface le fichier de requête " "request.txt " et efface le fichier " answer.txt ". Nous revenons à la fin de l'étape 6 o le serveur attend l'effacement du fichier " answer.txt " pour se mettre en attente pour une nouvelle requête dans une boucle " L'utilisateur peut choisir d'envoyer une image segmentée vers le serveur en tapant le numéro 2, le protocole de communication sera identique à celui déjà décrit ci-dessus. Validation Nous avons proposé que la netteté d'une sous-image est donnée par; N-1 N-1 net(p,q) = 1 Y exp[(i+l).(j+1)/N2 - 1).k]. Fl(i,j) i=O j=O ou net(p, q) dénote la netteté de la sous-image de coordonnées (p, q). k > O(ici k = 1) , k est coefficient de discrimination. Il faudrait démontrer expérimentalement que la méthode et la formule sont justes, pour cela il faut montrer que la valeur de la netteté calculée atteint un point de maximum quand l'image d'une sous-image donnée est la plus nette. Dans notre expérience nous allons utiliser nos yeux pour apprécier la netteté. Comme la caméra(webcam) a une distance focale très petite et en plus il est difficile de la mesurer avec précision, nous allons nous contenter de relever 11 mesures de netteté à des distances images dans l'ordre décroissant tel que yl > y2 > y3 > y4 > y5 > y6 > y7 > y8 > y9 > ylO > yl 1 d'un objet à deux plans parallèles à la matrice photo-réceptrice et à la lentille comme montre la figure 10. L'image du départ figure lOb a été divisée en 20 sous-images de coordonnées (x, z) de telle façons que les coordonnées des sous-images affichées sont telles que la somme (x + z) soit paire comme le montre la figure 11. Le fait de n'afficher que la moitié des sous-images alternativement facilite la localisation d'une sous-image étudiée. La sous-image des coordonnées (0,0) se trouvent dans le coin en bas à gauche de l'écran. Le texte de gauche dans la figure 11 (l'originale non-segmentée de la figure 12) se trouve à 6 cm derrière le texte de droit. Ces deux textes sont séparés par une ligne noire verticale qui se trouve près du milieu de l'image. Les figures 16 à 26 montrent l'image originale segmentée à des distances images variant de la valeur maximale(yl) à la valeur minimale(yl 1). Il faut rappeler que l'alignement de la matrice photo-réceptrice et de la lentille est extrêmement délicat vue les moyens utilisés. Vous remarquerez aussi que l'image est très floue, ceci est à la fois un inconvénient et un avantage, un inconvénient car la mesure de la netteté est imprécise et un avantage car nous testons notre méthode et la formule dans des conditions très défavorables. Nous pouvons penser, sans prendre trop de risque, qu'avec des moyens plus élaborés, la mesure de la netteté ne peut que s'améliorer. Il sera alors nécessaire, plus tard, d'effectuer un pré-traitement d'image, Le pré-traitement des images acquises avec une caméra CCD permet d'améliorer leur qualité et d'extraire des informations utiles. La phase de pré-traitement permet, notamment, de corriger les imperfections techniques du CCD (courant d'obscurité) et les déformations photométriques du système optique employé (vignettage, poussières sur l'optique, etc.). Le pré-traitement de base n'est pas compliqué. Il consiste d'abord à soustraire le " dark " de l'image brute puis à diviser le résultat par le " flat ". Nous allons considérer 3 couples de sous-images pour examiner les variations de la netteté, ses coordonnées sont les suivantes (x, z); { (4, 6), (6,6)}du plan à gauche et du plan à droite, { (6,6), (8,6)} de même plan à droite et finalement { (2,6), (4,6)} de même plan à gauche. Les figures 13, 14 et 15 représentent la netteté sur l'axe des ordonnées et l'indice d'image sur l'axe des abscisses. Plus l'indice est petite plus l'image est éloignée de la lentille. Vous remarquez, dans la figure 13(plans différents), que la netteté de la sous-image(6,6) atteint sa valeur maximale avant la sous-image(4,6). Ceci va dans le bon sens car le premier sous-objet est plus proche que le deuxième sous-objet de la lentille. Ce résultat est en accord avec la loi optique qui veut que plus l'objet est proche de la lentille plus son image est éloignée de la lentille. Le dernier résultat mais pas le moindre, la valeur de netteté maximale est atteinte quand l'image est visiblement la plus nette(voir les figures du 16 au 26, ces images sont plus claires sur l'ordinateur, les figures du 16 au 26 représentent les images d'indice du 1 au 11 respectivement). Vous remarquez, dans la figure 14(même plan à gauche), que les valeurs de la netteté atteignent leurs valeurs maximales au même moment, ce qui est normal car ces deux sous-images se trouvent dans le même plan. Mais vous remarquez, dans la figure 15(même plan à droite), que les valeurs de la netteté n'atteignent pas leurs valeurs maximales au même moment, il faut rappeler que la caméra utilisée est une webcam démontée et remontée. Ceci pose 3 problèmes à savoir; l'alignement du plan du lentille avec celui de la matrice photo-réceptrice et l'alignement du centre de la matrice photo-réceptrice(le centre de gravité de la matrice photo-réceptrice) avec celui de la lentille sont très imprécis. Le troisième problème est la distorsion radiale propre aux lentilles optiques, ce dernier peut être corriger par une bonne calibration radiale. Les deux premiers problèmes peuvent être corriger par des montages industriels de haute précision. Malgré le problème de précision qui est directement liée aux matériels optiques utilisés, nous avons démontré qu'il est tout à fait possible d'avoir une image en relief à éléments finis. Calcul de contour Quand on cherche à trouver des variations abruptes sur un signal en 2 dimensions, amplitude et temps, on fait la dérivée. De la même façons pour trouver des contours(variations abruptes) il faut faire un différentielle totale sur l'image, soit f(x, y) l'amplitude de l'image de coordonnées (x, y). La différentielle totale est donnée par; df= (ap/ax).dx + (ap/ay).dy Dans une application pratique les valeurs x et y sont des quantités finies, dans notre cas ce sont des coordonnées des pixels, dans ce cas nous replaçons dx par /x dans la formule précédente, soit; df= (ap/3x).Ax + (ap/ay)./'y Cette méthode nécessite la recherche dela pente dans les 8 directions pour un pixel donné sans compter le rayon de calcul de dérivée au tour ce pixel. Nous pouvons contourner le problème en nous la question suivante; comment faire une différentielle totale d'une fonction qu'on connaît pas ? Une réponse parmi d'autres consiste à faire une pseudo différentielle totale sur la transformée DCT inverse, soit (N-l) (N-1) p(x,y) = (1/](2N))j Y {c(i).c(j)F(i,j).cos[(n/N) i(x + 1/2)].cos[(n/N)j(y+ 1/2)]} i=O j=O la DCT inverse. Si f(i,j,x,y) = cos[(r/N)i(x + 1/2)].cos[(r/N)j(y+ 1/2)] df= -(l/N).i. sin[(\/N)i(x+lA)].cos[(n/N)j(y+l/2)])Ax-(7/N)j.cos[(r/N)i(x+l/2)].sin[(nN) j(y+ l/2)])Ay ici Ax = Ay = 1, alors df= -(N/N).i.sin[(/N)i(x+l/)]. cos[(7/N)j(y+l/2)])-(r/N).j.cos[(r/N)i(x+l/2)].sin[(nrN)j(y+ 1/2)]) Nous avons alors; (N-1) (N-l) dp(x,y) = (1/(2/N)) E { c(i).c(j)F(ij).df(ij,x,y) } i=0 j=0 Nous remarquons que quand nous effectuons la DCT et puis la transformée DCT inverse dérivée(dp(x,y)) sur une image à la recherche des contours le résult n'est pas satisfaisant pour deux raisons; la première est qu'en dérivant la DCT inverse nous risquerons d'avoir des valeurs négative et la deuxième est que même en prenant le module de l'amplitude du pixel pour éviter des valeurs négatives, les contours de l'image obtenus est très granulé(pas de continuité). Pour remédier à ce problème, nous modifions la différentielle totale en enlevant les coefficients multiplicateurs suivant; -(7x/N), i et j. Soit; dfl= sin[(w/N)i(x+l/2)]. cos[(n/N)j(y+l/2)]) + cos[(7t/N)i(x+l/2)].sin[(rn/N)j(y+ 1)]) Nous avons donc une nouvelle transformée DCT inverse pseudo dérivée suivante; (N-l) (N-l) dpl 1 (x,y) = 1 (1 //(2/N)) i=0 j=0 Z { c(i).c(j)F(i,j).dfl(i,j,x,y) } I Si nous appliquons la DCT et puis cette nouvelle transformée DCT inverse pseudo dérivée sur une image, le résultat est meilleur, la figure 27 montre l'image de départ(de très mauvaise qualité) et la figure 28 montre le résultat des contours obtenus. Conclusion Nous connaissons bien des dispositifs d'extraction d'une image en relief, ces dispositifs utilisent une combinaisons de moyens à savoir; la télémétrie laser, la télémétrie acoustique et l'image vidéo pour créer un scène sur-réelle. Nous avons démontre théoriquement et par expérience qu'il est possible de d'extraire une image en relief par la prise successive des images en utilisant la méthode de la segmentation pyramidale et en utilisant la formule de calcul de la netteté, sans utilisation des moyens télémétriques. Cette méthode a été inspirée par la vision naturelle qui a pris des millions d'années pour se perfectionner et la formule a été inspirée par l'analyse fréquentielle( Transformée de Fourier en Cosinus Discrète) qui a fait ses preuves dans la télécommunication surtout dans la télévision numérique, ces deux considérations plaident à juste titre de la crédibilité de notre approche pragmatique. Une mise en oeuvre d'un système d'extraction d'une image en trois dimensions d'un objet visualisé par une caméra optique par la méthode de segmentation pyramidale, par la formule de calcul de netteté d'analyse fréquentielle et la transformée DCT inverse pseudo dérivée décrites dans ce rapport constitue l'objet de la présente invention. Applications industrielles - navigation réactive d'un robot mobile industriel ou domestique. - modélisation des images de synthèse à partir d'un mannequin. - conduite automatique de voiture. Revendications (1) La formule de calcul de netteté d'image décrite dans la description. (2) La formule de recherche de contour décrite dans la description. (3) Le calculateur logiciel pour la reconstruction d'une image en trois dimensions fourni dans le listing. (4) Le méthode de segmentation d'image ainsi que des formules utilisées décrites dans la description. (5) Le concept de prise d'images successives à une distance image variable à la recherche de point de convergence de chaque sous-image afin de reconstruire une image en trois dimensions à élément finis.