GIG
Sujets de TER proposés en M1 Informatique


Voici les projets (TER) qui ont été proposés cette année (2017-2018) aux étudiants de M1 Informatique.

Distances sur un maillage
Romain Raffin
Une opérations essentielle sur les maillages, qui peut être le point de départ d'une recherche de paramètres, de métriques de comparaison de maillages ou de segmentation, est le calcul de distances, entre sommets, entre points quelconques, en passant par des arêtes ou de manière "libre" en passant par les faces. calculs de géodésiques sur un maillage, entre 2 points quelconques ou 2 sommets de distance min entre tous les sommets. Selon les support de chemin possible (sommets, arêtes, faces) on peut donner des poids et donc adapter le chemin (passer par les arêtes les plus courtes, les groupes de faces les plus planes...). Les outils nécessaires sont l'algorithme de Dijkstra sur les graphes, la découpe/projection de faces. Une bibliothèque de lecture de fichiers maillages 3D ainsi que de manipulation de la structure sera fournie.

Comparaison de méthodes de reconstruction
Romain Raffin
De plus en plus d'objets sont numérisées, avec des données résultats sous forme de nuages de point ou de maillages 3D. L'objectif de ce projet est de mettre en place une chaîne de comparaison d'algorithmes de reconstruction à partir d'un nuage de points (Cocone, Poisson...). Comment qualifier la reconstruction ? Les critères peuvent être : la précision par rapport à une forme connue, la conservation de détails, la conservation de topologie ou des données initiales, la conservation des courbures aux sommets. On comparera avec des objets simples, issus de formes d'équation/de surfaces maillées connues. Une bibliothèque de lecture de fichiers maillages 3D ainsi que de manipulation de la structure sera fournie, ainsi que des liens vers des librairies existantes afin d'avoir un panorama large des méthodes possibles.

Un environnement pour la réalisation de visites en réalité augmentée
Marc Daniel
La mise en place d’outils pour permettre la visite d’un site ou d’un musée en réalité augmentée intéresse de nombreux musées ou sites. Une telle visite présente au moins deux avantages : elle offre un côté ludique d’accès à la culture. Elle remplace avantageusement toutes les sortes de guides dont les audio-guides. Le principe est simple. Le visiteur se voit remettre à l’entrée une tablette avec l’application (objet du présent projet). Un système de repérage est proposé. On peut s’intéresser au repérage GPS (mais inutilisable avec des étages et imprécis), du QR-code ou du repérage NFC. Nous sommes actuellement plutôt partis sur la troisième solution. Une tablette sous Android permettant la lecture de bornes NFC est mise à disposition du projet. Il faut définir un scénario général de visite qui pourrait servir de cadre à tout développement. Le principe est assez simple. Un tag NFC pour présenter la salle ou la partie de salle ou l’étage, puis sur chaque objet, centre d’intérêt, un tag NFC permettant d’apporter de l’information : images, modèles 3D, son, texte, replacement de l’objet dans son contexte, …. Un travail a déjà été réalisé qui a donné les bases de l’étude et réglé de nombreux problèmes de fonctionnement d’une telle application sous Androïd. Ce travail montre qu’il est indispensable de travailler sur la réalisation d’une application générique qui offre un cadre au développement de différentes applications. Pour illustrer le projet, on pourra utiliser des images et des modèles d’un musée sur la civilisation Cham (à Danang, Vietnam), ainsi que des images du site où ces objets ont été découverts (My Son, à environ 60 km de Danang).

Visite dans l'espace et le temps
Brett Desbenoit
Aujourd’hui il existe plusieurs outils qui permettent des visites virtuelles de sites historique. Cependant, très peu d’entre eux s’intéresse à la fois à l’aspect collectif et à l’aspect temporel.
Votre objectif est de développer une application de visite virtuelle dans laquelle chaque utilisateur pourra se déplacer et visualiser l’ensemble des participants. Un guide, également contrôlé par un utilisateur pourra quant à lui, en plus de se déplacer, faire varier le temps exposant ainsi le site dans ces différentes temporalités. Enfin, chaque utilisateur doit être en mesure de communiquer au travers d’un chat.
L’application sera écrite en utilisant les technologie web (javascript/nodejs) et une architecture client/serveur.

Entrainement d'un réseau de neurones par des images de synthèse
Sébastien Thon
L'intelligence artificielle est très utilisée pour reconnaître des objets dans des photographies au moyen de réseaux de neurones informatique. Les techniques actuelles les plus efficaces font appel au "deep learning" ou apprentissage profond, qui consiste à créer des réseaux de neurones profonds avec énormément de couches intermédiaires. Mais pour faire en sorte que le réseau soit capable de prendre une image en entrée et d'estimer en sortie ce qu'elle contient, il faut définir les poids associés à ces neurones en entraînant le réseau avec énormément d'images.
Le but de ce projet est de produire de manière automatique par synthèse d'images 3D une très grandes quantité d'images afin d'entraîner un réseau de neurones. Le projet tient en trois étapes :
1) Ecrire un programme C++/OpenGL qui permette de générer une multitude d'images 2D correspondant à un objet 3D vu sous différents angles, différentes conditions d'éclairage, différents zoom, différents fonds. On prendra comme exemple d'objet à reconnaître des modèles d'avions.
2) Construire un réseau de neurones en Python/Tensorflow et l'entraîner avec la série d'images produites précédemment.
3) Tester le réseau de neurones en lui fournissant de nouvelles images de synthèse ainsi que de véritables photographies pour voir si il parvient à reconnaître l'objet.

De la silhouette au squelette à la silhouette
François-Xavier Dupé
Les silhouettes (ou formes) peuvent être représentées par des nuages de points 2D ou 3D. Ces formes peuvent être amincies jusqu'à avoir un simple point d'épaisseur, ce processus d'amincissement est appelé squelettisation et la forme obtenue est appelée squelette de la forme. Ce squelette possède des propriétés selon la façon dont il est calculé, par exemple, il conserve la topologie de la forme - c'est à dire qu'un trou donne un trou et si la forme possède des parties séparées, alors le squelette aussi - et permet aussi de reconstruire une nouvelle forme (qui aura donc le même squelette).
Le but de se projet est d'implémenter un algorithme d'amincissement de silhouette (en C++ ou Python) et de proposer plusieurs méthodes de construction de formes à partir d'un squelette. Aucune connaissance de géométrie discrète n'est nécessaire. Par contre une bonne maitrise de la programmation est requise.

Génération de maillages mixtes par fusion tétraédrique
Ricardo Uribe Lobello
Un maillage 3D est une approximation d’un domaine d’intérêt avec des cellules géométriques simples. Par exemple, des tétraèdres. Les maillages tétraédriques sont une des représentations le plus communes pour la simulation numérique. Néanmoins, de plus en plus, les logiciels de simulation sont optimisés pour utiliser des maillages mixtes. Ce genre de maillages contiennent des éléments géométriques à géométrie variable. Par exemple, des hexaèdres, des pyramides, des prismes et aussi des tétraèdres. Le problème de trouver la meilleure approximation d’un domaine 3D avec des éléments mixtes reste un problème ouvert. Pour qu’un maillage soit efficace dans la cadre de la simulation numérique, il doit respecter certains critères de qualité. Ces critères sont globaux (nombre d’éléments, distribution d’éléments, conformité, etc) ainsi comme locaux (angles dièdres à l’intérieur de chaque élément, orientation, etc). Dans ce projet, nous allons commencer avec un maillage tétraédrique adaptatif conforme et nous allons chercher à minimiser la quantité d’éléments en fusionnant des tétraèdres pour obtenir des hexaèdres, des prismes et des pyramides si possible. Le maillage doit rester conforme et l’approximation du volume initial ne doit pas se voir fortement affectée. D’autres critères de qualité peuvent aussi être ajoutés et validés (angles dièdres, angles plats, densité d’éléments, etc).

Transport Optimal pour la construction de maillages anisotropes
Ricardo Uribe Lobello
La théorie du transport optimal a comme objectif de trouver la manière la plus efficace de transporter de la matière (ou des particules) d’une configuration (une forme dans un domaine) vers une autre configuration ou domaine. Elle a été utilisée pour transformer des maillages ou les transférer dans d’autres repères. Dans ce projet, nous sommes intéressés par la possibilité d’utiliser des techniques de transport optimal pour transformer des maillages volumiques isotropes dans des maillages anisotropes en suivant une fonction ou un champ vectoriel. Les maillages initiaux seront constitués des tétraèdres et devront être transformés afin de s’ajuster à un nouveau domaine et, potentiellement, à une nouvelle densité d’échantillonnage. Ce type d’algorithme peut se révéler utile pour le ré-échantillonnage des champs scalaires n-dimensionnels ou pour la génération des maillages à partir d’une densité d’échantillonnage et une topologie déjà définies.
L’algorithme sera codé en C++ avec l’utilisation de librairies pour la visualisation et traitement de maillages.

Génération à la volée d'un traitement spécifique à partir d'un algorithme générique
Eric Remy
Dans le cadre de la géométrie discrète, on utilise souvent la transformation de distance (en anglais, distance map) qui consiste à étiqueter chaque point d'une forme discrète avec sa distance au point le plus proche du complémentaire. Plusieurs distances sont souvent considérées : distance euclidienne, norme $\ell_1$, norme $\ell_\infty$, ou distances de chanfrein. L'implantation de cette transformation pour n'importe quel objet discret et n'importe quelle distance de chanfrein nécessite d'inclure un certain nombre de tests simples pour détecter des situations qui dépendent de la taille de l'espace de travail ou du masque de chanfrein. Pendant la transformation, ces tests sont répétés des milliers de fois, et il semble donc intéressant de tenter de les éliminer. Pour cela, le travail proposé consiste à permettre à un code existant de générer, à partir d'un modèle algorithmique, une version de l'algorithme spécifique au besoin exprimé, à en permettre la compilation sous la forme d'un plugin, puis à le lier dynamiquement à l'exécutable existant et à le déclencher. Une partie du travail demandé sera d'effectuer une comparaison expérimentale entre les implantations classiques et spécifiques (temps de calcul et espace mémoire consommée) afin de juger de la pertinence de cette approche.
Ce travail sera effectué en C++ sous Linux sur une base de code existante. Il mettra en œuvre des concepts avancés dans ce langage (variadic template et autres nouveautés de C++ 2011, 2014, 2017) ainsi qu'un peu de programmation système (compilation, shared objects, liaison dynamique). Des compétences éventuelles en assembleur x86\_64 seraient bienvenues.

Effet du changement d'échelle sur le calcul d'un squelette discret
Eric Remy
Le calcul du squelette d'une forme discrète à partir de sa carte de distance consiste en l'étiquetage de chaque point de cette forme à la distance qui le sépare de son bord puis, sur la base d'un critère de recouvrement local, à n'en conserver que certains points. On utilise en général le terme d'axe médian pour désigner ce type de squelette discret. Cet axe médian discret partage certaines propriétés du squelette continu « idéal » : il est centré et (quasi-)réversible. Hélas, il en diffère par le fait qu'il n'est, en général, pas connexe et qu'il contient souvent deux types de points : ceux qui sont les plus pertinents pour décrire la forme globale (qui sont appréciés) et d'autres qui codent une très petite partie de la forme (et qu'on souhaite en général éliminer par un traitement ultérieur).
Le travail proposé consiste à compléter un code existant réalisant les transformations décrites ci-dessus pour comparer les squelettes discrets obtenus en faisant varier la discrétisation d'une forme continue à différentes échelles avant d'en calculer l'axe médian, puis à vérifier si les points « souhaitables » sont moins dépendants que les points « indésirables » de la discrétisation.
Ce travail sera effectué en C++ sous Linux sur une base de code existante. Il mettra en œuvre des concepts récents dans ce langage (C++ 2011 et 2014) et éventuellement un peu de Python.

Remodeler la réalité grâce à la 3D : la réalité augmentée
Nicolas Hoareau
La réalité et le virtuel ont toujours fait bande à part. Le but a toujours été de faire se rapprocher le virtuel du réel grâce à une qualité des textures et à des moteurs graphiques et de rendu de plus en plus performants. Aujourd'hui grâce aux appareils nomades et à la réalité virtuelle nous pouvons nous déplacer dans une scène virtuelle, améliorant ainsi encore un peu plus l'expérience de l'utilisateur. Le cap est aujourd'hui encore un peu plus franchi grâce à la démocratisation de la réalité augmentée permettant de faire entrer directement des objets virtuels dans le mode réel.
Ce sujet à pour but d'explorer ce nouveau monde où réel et virtuel se lient.
Grâce à un appareil iOS il vous sera demandé de créer un jeu ou une application 3D tirant le plus possible parti du SDK ARKit et du moteur 3D Metal 2. Le code sera effectué en Swift 4.

Vision et Manipulation d'Objets 3D en Réalité Virtuelle
Sébastien Mavromatis
L'objectif de ce projet est la création d'un environnement virtuel permettant de visualiser et d'interagir avec un objet 3D. Les élèves utiliseront le moteur de jeu Unity (https://unity3d.com) pour la partie logicielle et un casque de réalité virtuelle OSVR HDK1 (http://www.osvr.org). Les sources du projet seront déposées sur Github (https://github.com).

Web 3D et Réalité Augmentée
Sébastien Mavromatis
Les technologies 3D (https://www.w3schools.com/html/html5_intro.asp, https://threejs.org) et de réalité augmentée (https://www.artoolkit.org) sont matures pour être interfacées. L'objectif de ce projet est la création d'une application Web permettant la visualisation et la manipulation d'objets 3D à l'aide de marqueurs 2D. Les sources du projet seront déposées sur Github (https://github.com).

Recalage de nuages de points multi-vues issus d'un scanner à main
Arnaud Polette
Un scanner 3D permet de produire des représentations numériques 3D d'objets réels sous forme de listes de points 3D xyz (nuages de points). Il est courant de procéder en plusieurs étapes de numérisation, puis d'assembler les résultats afin d'avoir une représentation 3D complète. L'objectif de ce projet est de développer un outil d'automatisation de cette procédure d'assemblage de relevés numériques 3D, en s'appuyant sur des libraires de manipulation de nuages de points (par exemple PCL). Un accès à un scanner à main permettra de tester l’outil développé.

Outil de préparation de maillages pour l’impression additive 3D
Arnaud Polette
Lors d'une impression additive 3D il est souvent nécéssaire d'ajouter des supports à l'objet à imprimer pour certaines parties de l'objet, cet ajout consomme de la matière qui sera finalement jetée après impression. L'objectif de ce projet est de développer un outil d'optimisation de la matière à utiliser pour les supports en recherchant une orientation d'impression optimale. Un accès à une imprimante 3D permettra de tester l’outil développé.

Déplacement d'un robot
Bertrand Estellon et Karim Nouioua
Le but du projet est d'implémenter différents algorithmes permettant de trouver le déplacement d'un robot, d'un point de départ vers un point d'arrivée, dans une pièce contenant des obstacles. Pour formaliser le problème, on peut représenter le robot et les obstacles par des polygones du plan.
Vous pourrez vous attaquer au cas simple d'un robot représenté par un point qui se déplace au milieu d'obstacles convexes, puis,
au cas moins facile du déplacement d'un robot convexe.