Algorithmes pour la Synthèse d'Images

 

 
Pour information : la validation de l'enseignement est faite sur projet. Les projets sont à rendre au plus tard le lundi 14 décembre 2015 à 11h00 (1 point de pénalité par heure de retard). Le projet sera soutenu (présentation de 5mn sur vidéo projecteur) et la soutenance se déroulera en A193 le mardi 15 décembre à 12h00. Afin d'être notés, tous les étudiants ont l'obligation de se présenter aux soutenances même si leur projet n'est pas terminé.
 
Supports & liens
  • OpenCV, bibliothèque de Computer Vision : Dans un premier temps, nous utiliserons OpenCV pour montrer rapidement certains algorithmes de traitement d'images mais aussi pour sa facilité d'usage comme bibliothèque de gestion de fenêtres, de chargement de différents types d'images et de gestion des devices de capture vidéo. Ce dernier point restera utile le long du cours.

  • Site de la SDL - Simple DirectMedia Layer : Nous utiliserons la SDL-2 comme bibliothèque donnant accès à un contexte OpenGL 3.2 ou plus et aussi comme bibliothèque de gestion des évènements et des interactions utilisateur. Elle pourra, si besoin, être utilisée pour la gestion des threads, des fonts, au chargement de divers formats d'images ou de sons.

  • Site d'OpenGL - Open Graphics Library : OpenGL sera utilisé en version CORE 3.2 et + (voire 3.3 et +). Nous utiliserons la documentation des Reference Pages d'OpenGL 3.3, au moins pour les premiers exemples donnés, nous fournissons les Projets/Makefiles pour un fonctionnement sous Linux (Makefile), Windows (Code::Blocks, Visual C++ 2010 express, DevC++ 5 ou Makefile sous cygwin/MingW32) et Mac OS X (Makefile).

  • GL4Dummies : nous développons une bibliothèque permettant une gestion uniforme et facile des ressources OpenGL via la SDL2 (une ancienne version utilisant la SDL 1.2 existe mais ne sera plus maintenue par l'auteur).

  • ForCB : contenu spécifique aux utilisateurs de Code::Blocks, vous pouvez décompresser le dossier ForCB au même niveau que les exemples de cours afin d'avoir l'ensemble des dépendances nécessaires (includes et libs des libs SDL2).

  • ForVC : contenu spécifique aux utilisateurs de Visual C++ 2010 Express, vous pouvez décompresser le dossier ForVC au même niveau que les exemples de cours afin d'avoir l'ensemble des dépendances nécessaires (includes et libs des libs SDL2 et GL).

Documentations
Exemples utilisés en cours
OCVExample-01.tgz, OpenCV : récupération d'un flux depuis un device vidéo (ou image - pour cela décommenter le bout de code correspondant) et utilisation d'une fonction de conversion pour tranformer la frame en niveaux de gris.
OCVExample-02.tgz, OpenCV : récupération d'un flux depuis un device vidéo, conversion des pixels en HSV et filtre laissant passer les teintes vertes.
OCVExample-03.tgz, OpenCV : récupération d'un flux depuis un device vidéo, conversion en HSV et cycle sur les teintes.
OCVExample-04.tgz, OpenCV : récupération d'un flux depuis un device vidéo, segmentation de l'image soit sur R, G et B soit sur V (de HSV).
Codes à voir en cours pour respectivement faire un simple flou, appliquer une convolution passée en argument ou un filtre Sobel : simple flou, convolution générique, Sobel
GLSLExample-01.0.tgz, OpenGL : chargement d'une image OpenGL/GL4Dummies/GLSL.
GLSLExample-02.0.tgz, OpenGL : chargement d'une image et flou Gaussien itératif utilisant les FBOs (OpenGL/GL4Dummies/GLSL).
GLSLExample-03.0.tgz, OpenGL : chargement d'une image et flou (très rapide !) Gaussien Horizontal/Vertical (OpenGL/GL4Dummies/GLSL).
GLSLExample-04.0.tgz, OpenGL : chargement d'une image et flou lié au focus lié au pointeur de souris.
GLSLExample-06.0.tgz, OpenCV : détection de visages et des yeux à partir d'une image.
GLSLExample-06.1.tgz, OpenCV : détection de visages et des yeux à partir d'un flux vidéo.
jniBlur.zip, Android Studio / JNI : comparatif entre un flou Java et un flou C sous Android.
AndroidGL4D.zip, Android Studio / JNI / OpenGL ES 2 / GL4Dummies : portage de GL4Dummies sous Android avec exemple de rectangle faisant une compinaison de rotations.
Stereo4VR.zip, Android Studio / JNI / OpenGL ES 2 / GL4Dummies : 2 Viewports + 2 points de vue pour Réalité Virtuelle sur mobile + casque RV.
GLSLExample-07.1.tgz, Sphère avec Bump Mapping (calcul TBN) et éclairage Phong ou Toon Shading (appuyer sur 't').
GLSLExample-09.0.tgz, Couplage d'un streaming provenant d'OpenCV avec de la géométrie OpenGL utilisant une projection orthogonale (identité) et une projection perspective avec rotation de la géométrie.
Exercices
Exercice 1 (A faire en cours le 29 septembre 2015)
En partant d'un code openCV récupérant un flux vidéo ou simplement une image, ajouter aléatoirement des points (dispersion de poivre et sel) à chaque frame en reprenant l'image source (ou le flux d'origine). Sur la moitié de l'image, appliquer un filtre médian développé from scratch.
VOUS POUVEZ TELECHARGER LE CORRECTIF ICI : OCVExample-03-SelPoivre-Median.tgz
 
Exercice 2 (A commencer en cours et à finir avant le 06 octobre 2015)
Récupérer la bibliothèque GL4Dummies et à partir d'un des samples insérer un plan affichant le flux vidéo obtenu depuis OpenCV.
 
Exercice 3
Partant des codes donnés (GLSLExample-04.0, GLSLExample-6.0 et GLSLExample-6.1) faire un focus automatique (flouter tout sauf l'emplacement où doit être fait le focus) sur le visage de la personne devant sa WebCam.
 
Exercice 4 (en cours le 27 octobre 2015)
Partir du Sample Project HelloGL2 disponible sous Android Studio ou télécharger cette version et implémenter un flou GLSL équivalent à celui donné dans jniBlur.zip. Les comparer en terme de temps de calcul et de qualité.
 
Exercice 5 (en cours le 17 novembre 2015)
Partir des fichiers window.c et images.tgz à utiliser dans le projet GLSLExample-07.1.tgz et faire une modélisation de la terre utilisant la texture de jour et de nuit ; produisant un reflet spéculaire (cf. ici ou ici et ) uniquement sur les océans ; utilisant le bump et modilisant la couche de nuages.
 

 

 

Farès Belhadj

 

<-