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 16 décembre 2019 à 9h00 (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 17 décembre à 9h00. 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. Cette bibliothèque est accompagné d'un manuel d'apprentissage de la synthèse d'images. |
||||
Documentations - Lecture | ||||
wiki_Luminance.pdf : wiki traitant de la Luminance (perception de luminosité). RGB2HSV.pdf : conversion du RGB vers le HSV. wiki_Image_segmentation.pdf : wiki traitant de la segmentation d'images. wiki_K-means.pdf : wiki traitant de l'algorithme de clusterisation K-means. wiki_matrices_convolution.pdf : wiki traitant des matrices de convolution. wiki_Filtre_median.pdf : wiki traitant du filtre médian. haar_classifier.pdf : résumé OpenCV sur le Haar Cascade Classifier. viola-cvpr-01.pdf.pdf : Article de Paul Viola sur la detection d'objets. |
||||
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). | ||||
Démarrage avec OpenGL/GL4D/GLSL : GLSLExample-00.0.tgz et GLSLExample-00.1.tgz. | ||||
Textering avec OpenGL/GL4D/GLSL : avec image PNG GLSLExample-01.0.tgz et avec flux vidéo OpenCV GLSLExample-01.1.tgz. | ||||
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-02.0.tgz, OpenGL : chargement d'une image, flou Gaussien, Sobel 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 en fonction du focus lié au pointeur de souris. | ||||
GLSLExample-06.0.tgz, OpenCV : Haar Cascade utilisé pour la détection de visages puis des yeux (documentation OpenCV). | ||||
sample_3d_00-1.0.tgz, OpenGL : géométrie, lumière et transformations GL4Dummies. | ||||
sample_3d_01-1.0.tgz, OpenGL : Lumière positionnelle, Gouraud et Phong (appuyer sur 'p' pour switcher de l'un à l'autre). | ||||
sample_3d_01-1.1.tgz, même exemple que précédent avec lumières : ambient, diffuse and specular. | ||||
sample_3d_02-1.0.tgz, OpenGL : suivi du click souris. | ||||
|
Exemples d'introduction au développement
natif sous Android, Respectivement
: jniBlurCours.zip flou
gaussien en Java et le même en natif (C/jni) avec
FPS, SimpleGL4D.zip Quad
coloré en natif/OpenGL/GL4D (partie native compilée à l'aide
de CMake), AndroidGL4D.zip
Quad éclairé en natif/OpenGL/GL4D (partie native compilée
directement par gradle). SimpleGL4D_androidStudio3.zip et AndroidGL4D_androidStudio3.zip sont les versions modifiées et testées avec Android Studio 3.0 Enfin, GL4DES3.zip est un projet GL ES 3 donnant accès à plus de fonctionnalités GL4D ... bon courage :) |
|||
SolarVR.tgz, Android, OpenGL et réalité virtuelle : utilisation des sensors pour orientation spaciale, possibilité d'utilisation d'une télécommande bluetooth et double vue (frustum et viewport) pour optiques de casque de réalité virtuelle. | ||||
Exemple de Loader de fichiers 3D (.obj, .3ds, certains .fbx, ...) utilisant la bibliothèque Assimp (www.assimp.org), GL3 (VAO/VBO ...) et les shaders/matrices GL4Dummies : sample_3d_06-1.0.tgz, voir la fonction keydown pour les commandes clavier. | ||||
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. | ||||
GLSLExample-09.1.tgz,
Code réalisé en cours le 15/10/2019 reprenant les exemples
GLSLExample-09.0.tgz et GLSLExample-06.0.tgz pour exploiter la
détection du dernier en
OpenGL. Puis GLSLExample-09.2.tgz, Code réalisé en cours le 05/11/2019 rajoutant le calcul de position/dimension et rendu (éclairage Phong avec spéculaire) d'une sphère sur chaque position de visage. |
||||
Exercices | ||||
Exercice 1 (A faire entre le 10 et le 17 septembre 2019) | ||||
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. | ||||
Exercice 2 (A faire pour le 24 septembre 2019) | ||||
En partant du code de segmentation openCV, reproduire les effets réalisés avec GIMP dans l'archive segmentation.zip. | ||||
Exercice 3 (TP du XX/XX/2019) | ||||
|
||||
Exercice 4 (TP du XX/XX/2019) | ||||
|
||||
Exercice 5 (TP du XX/XX/2019, des points à gagner si rendu avant la fin de semaine) | ||||
|
||||
Farès Belhadj |