Adrien Auclair homepage

en

Je suis actuellement en dernière année de thèse à Paris-Descartes, encadré par Nicole Vincent et Laurent Cohen (laboratoire Ceremade, Paris Dauphine).

Mes recherches portent sur la reconstruction 3d, notamment pour la vidéo-surveillance. Je travaille également sur la recherche de plus proche voisin dans des espaces à beaucoup de dimensions. Sur ces sujets, j'ai développé certains algorithmes sur le processeur graphique (GPU) en langage CUDA.


Reconstruction 3D à partir d'images :

La méthode utilisée utilise une surface déformable pour approcher l'objet 3D. Quelques résultats :
Images initiales Surface 3D initiale (visual hull) Surface 3D finale obtenue
 



Reconstruction 3D de voitures à partir de séquences vidéos :

On souhaite reconstruire en 3D une voiture qui passe devant une caméra fixe.
carmove car 3D
Une image d'un film de synthèse, avec certaines trajectoires dessinées. Une reconstruction 3d de la voiture
(le nuage de points est triangulé, texturé, et reprojeté sur une image
du décor, avec sa boite englobante)



Une image extraite d'un film. Voiture 3D reconstruite (la partie droite est obtenue par symmétrie)


Indexation d'images

Dans ce projet, on dispose d'une base de données d'image. Pour une image requete donnée, on souhaire savoir si notre base contient des images proches. Une application est de gérer les droits d'auteurs d'une base de photos. Nous avons créer une base de données de 160.000 images. Chaque recherche prends alors moins de 10 secondes.

Notre application retourne les résultats d'une requete sous forme d'une page web. Ci-dessous, un exemple de résultat.

Image requete Capture d'écran de la page HTML des résultats

 Les images de notre base ont été récupérées au hasard sur internet. On voit ici que l'on retrouve meme une pochette de DVD qui contient une copie de l'image requete.


Publications


CV ( format pdf ) : cv.pdf

Anciens projets (stages)

( cliquez sur les images pour plus de détails )

 

 

Projet de DEA : L'objectif de ce projet est de développer un algorithme pour optimiser le calcul de l'attraction gravitationnelle des reliefs. On commence pour cela par trianguler un MNT ( modèle numérique de terrain). Ensuite on va simplifier la surface construite grâce un algorithme qui annule la variation en volume ( Lindstrom & Turk ). Ensuite, il faut adapter la simplification pour que les triangles soient précis proche du point où l'on calcule la gravité, et plus grossier loin du point de calcul. On construit alors une représentation hiérarchique de la simplification qui permet de simplifier la surface en fonction du point de calcul. On utilise pour cela l'algorithme "Smooth View-Dependant Level Of Detail control" de Hughes Hoppe.
Avril-Septembre 2004, IGN

 

 

 

Projet de Fin d’Etudes réalisé dans le cadre d’une collaboration entre Total et le LIS (Laboratoire Image et Signal, Grenoble). Au cours de ce stage, j’ai développé en C++ un algorithme capable de découper une surface aux niveaux de ses rétrécissements. Cet algorithme est totalement innovant, il s’appuie sur la tetrahèdrisation de Delaunay de l’objet. L’application pour Total est de segmenter les poches de pétrole reliées entre elles par de petits canaux. Ce stage m’a permis de travailler 6 mois sur des algorithmes de traitement de données 3D. ( ce stage a débouché sur une proposition de thèse CIFRE chez Total ).
Mars - Août 2003, TOTAL

 

 

 


Projets (HLSL/Cg)

( cliquez sur les images pour plus de détails )



  Water effect
Ce programme reprends le générateur de terrain précédent. Il ajoute la surface de l'eau à l'altitude 0. Les montagnes et le ciel (créé avec une skybox) se reflètent dans l'eau. De plus, l'eau est transparente et l'on voit le fond du terrain à travers. Les reflets sont obtenus en projetant la texture dans laquelle on a préalablement rendu la partie du monde au dessus de l'eau. Pour le rendu final, on commence par rendre le monde complet. Ensuite, on rajoute l'eau avec un coefficient alpha de transparence. J'ai aussi ajouté un modèle de vagues pour perturber les reflets dans l'eau de manière naturelle. Le fond vu par transparence est aussi perturbé.

Octobre 2004  [ download ] [ download MFC version ]
(Windows)
  Terrain generator
Ce programme génère un terrain aléatoire avec un bruit de Perlin. On mélange ensuite une texture d'herbe et une autre de pierre selon un coefficient dépendant de l'altitude. Enfin, à partir de la carte des altitudes, on enregistre la normale à la surface dans une texture. Cela permet au pixel shader (en HLSL) de simuler une ombre. A télécharger : le code c++ et le projet sous Visual C++ 6.0.

Octobre 2004 [ download ]
(Windows)
  Perlin Noise texture generator
Le bruit de Perlin est très utilisé pour générer des textures aléatoires à l'aspect doux, contrairement à un générateur de nombres aléatoires standard dont les résultats ne sont pas continus du tout. Le programme crée une texture Direct3D9 et la plaque sur une surface.A télécharger : le code c++ et le projet sous Visual C++ 6.0.

Octobre 2004 [ download ]
(Windows)
  HLSL Particles system
Sur cet exemple, la pièce est illuminée par une lumière qui parcours un cercle au plafond. Les murs et le sol sont illuminés, avec bump mapping. Au centre, on trouve un système de particules. Ce système est rendu avec la technique de "point sprite". C'est à dire que chaque particule est un point texturé. Le vertex shader en HLSL fixe la taille des particules. Le pixel shader applique la texture. A noter que le pixel shader ne permet pas de faire bien grand chose avec la texture du point sprite (sur ma carte ATi RADEON 9600 Pro, on dirait qu'il y a un bug avec les point sprites, à vérifier). A télécharger : le code c++ et HLSL et le projet sous Visual C++ 6.0.

Septembre 2004 [ download ]
(Windows)
  HLSL Shadow map
Sur cet exemple, la scène est composée d'un tore dans une pièce. Une lumière tourne au dessus du tore. Le tore, les murs et le sol sont éclairés, texturés et on ajoute un effet de bump mapping. On rajoute en plus l'ombre du tore sur le sol. Pour cela, on rends une première fois la scène dans une texture en prenant la lumière comme point de vue. Cette texture est la shadow map. Ensuite, on projette cette texture sur le sol par la méthode de "projective texturing". Le pixel shader lit cette texture pour savoir si un point est éclairé ou non. A télécharger : le code c++ et HLSL et le projet sous Visual C++ 6.0.

Septembre 2004 [ download (exe) (source) ]
(Windows)
  HLSL Bump Mapping
Exemple de bump mapping réalisé avec le pipeline programmable de Direct3D 9. Les murs et le sol sont simples à réaliser. Pour le tore, on doit calculer la matrice de passage dans l'espace tangent. Les formules simples du tore donnent cette matrice par dérivation. A télécharger : le code c++ et HLSL et le projet sous Visual C++ 6.0.

Septembre 2004 [ download (exe) (sources)]
(Windows)
 

Petit jeu 2D  
Le but du jeu est de ramasser le maximum de bonus en un temps donné. Le joueur est poursuivi par les boules ennemies. Il peut utiliser des bombes, des téléporteurs et des hologrammes pour se défendre des ennemis. Le moteur lit les murs dans un fichier texte. Il construit le BSP du jeu à partir de ces murs. Ensuite il ajoute les portails entre les pièces nécessaires à l'algorithme A-star de pathfinding. ( démo codée en 3 semaines). Le BSP et le A* sont codé de façon générique avec des templates.
Mars 2004 [ download ]
(Windows)

     
 

Metaballs 3D
Il s'agit du même concept que les metaballs 2D sauf que chaque metaball crée un potentiel dans l'espace 3D. Et surtout, à la différence de la 2D, on n'affiche pas toutes les valeurs de potentiel, mais on affiche une unique isosurface, c'est à dire un surface où le potentiel est constant que l'on extrait grâce à l'algorithme de marching-cube.
Octobre 2003 [ download ] (Linux)

     
  Metaballs 2D
Petit effet 2D très simple. Une metaball génère un potentiel proche d'elle, par exemple un fonction du style cos(d) où d est la distance au centre de la metaball. Il suffit de sommer tous les effets des metaballs pour obtenir une carte des potentiels.
Octobre 2003 [ download ] (Linux)
     
  Projet de wargame temps réel complet (Warcraft-like)
L’IA permet au joueur de lancer une partie contre l’ordinateur. Les unités gérées par l’ordinateur vont défendre leurs bâtiments, ramasser de l’or, du bois, reconstruire les bâtiments détruits par le joueur…L’interface permet au joueur de sélectionner jusqu'à 10 unités et de leur assigner un ordre commun. Le code source a une taille d’environs 15000 lignes de code. La version à télécharger contient les 3 premières missions.
Septembre - Décembre 2002 [ download ]
(Windows)
     

 

Bump 2D
Pour illuminer une image, on a besoin de la normale en tout point. Sur une image 2D, la normale est perpendiculaire partout... pas très intéressant. Dans cet effet, on utilise les valeurs de l'image en niveaux de gris pour perturber cette normale. Ensuite, plus qu'à faire balader le point de lumière et on obtient un beau bump mapping 2D.
Octobre 2000 [ download ] (Windows)

 


Links

Levenberg-Marquardt algorithm  MinPack C++ (BSD license) | levmar (GPL license)
Librairies graphiques    OpenGL | DirectX | VTK | Coin3D
Librairies d'interfaces    QT | FLTK
Librairie pour les traitements géométriques   GTS | CGAL | OpenMesh
Outils   CVS | Doxygen | Doxbar | KDevelop | NVIDIA tools
Modèles 3d   Stanford repository | The Stanford Bunny
Jeux vidéos   Gamasutra | GameDev
Programmation   STL | Design Patterns | Non-Software Examples of Software Design Patterns


Auteur :  Adrien Auclair  
email : adrien dot auclair at gmail dot com
Last update : 06/01/2008