PROJ002 CMI : Projet en traitement et analyse d'image
Responsable: Jacques-Olivier Lachaud
Objectifs
Ce module constitue une initiation au monde de la recherche dans le laboratoire d'adossement du CMI Info. Plusieurs sujets en lien avec le traitement et l'analyse d'image et les thématiques développées dans le laboratoire sont proposés aux étudiants, chacun avec un tuteur identifié. Le projet nécessite de
Les étudiants CMI travaillent dans le laboratoire d'accueil sur ces sujets, qui comportent tous:
- découverte du sujet de recherche à partir de références bibliographiques
- appropriation du sujet précis visé et développement d'algorithmes répondant au problème posé.
- un point possible de contribution pour l'étudiant, qui constitue un apport nouveau au sujet.
Le projet se déroule en janvier, après le cours de traitement et analyse d'image, avec environ 25h de présentiel dans le laboratoire. A l'issue du projet, l'étudiant ou le groupe d'étudiant doit remettre un dépôt (github ou autre) présentant l'avancement de son travail, le code développé, un readme expliquant le sujet, décrivant les points saillants du travail réalisé et ainsi que comment se servir du code développé. Des exemples d'utilisation doivent aussi être donnés.
Sujets proposés 2022-2023
Segmentation d'image hiérarchique par ensembles échelle (C. Carmagnac, L. Chardonnet)
La segmentation d'image constitue à découper une image en ses régions d'intérêt. Il se pose alors un problème d'échelle à laquelle on veut voir l'image. Doit-on faire attention aux détails (e.g. visages, couleurs des yeux) ou à des parties plus globales (nombre de personnes dans la photo, etc). L'approche par ensembles-échelle ou scale-sets construit une hiérarchie de partitions en régions d'une image, paramétrée par une échelle lambda. Cette hiérarchie est causale (les hiérarchies plus fines sont incluses dans les hiérarchies plus grossières). En général la partition la plus fine est celle où chaque pixel est une région pour lambda=0. Avec l'augmentation de lambda, on fusionne deux à deux régions jusqu'à arriver à la partition la plus grossière constituée d'une seule région. L'intérêt du modèle de Guigues et al. est d'associer une énergie à chaque région, paramétrée par l'échelle lambda, et qui est représentatif de son homogénéité et de sa forme. Entre 2 régions adjacentes R_i et R_j, on peut déterminer l'échelle lambda_ij à partir de laquelle il vaut mieux fusionner les 2 régions pour diminuer l'énergie totale. L'algorithme de calcul de la hiérarchie consiste donc à regarder les paires de régions et à fusionner les régions dans l'ordre croissant des échelles de fusion lambda_ij.
- Etape 1 : prototype
- comprendre le modèle énergétique des ensemble-échelle et l'algorithme (heuristique) de calcul de sa hiérarchie
- comprendre les structures de données utiles pour implémenter cet algorithme : graphe d'adjacence de région, calcul du périmètre d'une région, de son énergie
- mettre en place un premier algorithme de fusion de régions
- calculer pour 2 régions le lambda_ij optimal
- afficher une partition à un lambda donné
- Etape 2 : optimisation
- travailler les structures de données pour accélérer ou réutiliser les calculs
- partir d'une segmentation fine initiale moins triviale, genre le résultat d'un watershed/ligne de partage des eaux
- tester d'autres énergies pour les régions
- tester sur des bases d'image
- Liens pour démarrer
Réduction intelligente de taille d'image par "seam carving" or "liquid rescaling" (R. Théodet, Y. Thépaut)
Si on réduit une image de manière non isotrope, par exemple, on veut passer de 1080x600 à 400x400, les éléments importants de l'image vont être déformés. L'approche proposée ici est d'éliminer les parties non importantes de l'image. Il se trouve que notre perception attache peu d'importance aux parties homogènes d'une image alors que nous distinguons très bien les parties à forte variation. Le principe du seam carving est d'éliminer 1 pixel par ligne (mettons). On pourrait donc essayer d'éliminer la colonne la plus homogène, mais ce n'est un peu trop rigide. On va plutôt tracer une colonne possiblement zigzaguante du haut vers le bas, qui minimise les variations de couleur. Cette "colonne" serait extraite par un algorithme d'optimisation. Une fois qu'on sait enlever une colonne, on peut recommencer le processus pour enlever plus de colonnes.
- Etape 1 : prototype
- comprendre le modèle énergétique du seam carving.
- faire les prétraitements nécessaires à son calcul (gradient notammen)
- mettre en place un algorithme de recherche du meilleur chemin
- faire alors les fonctions qui enlèvent une colonne et une ligne d'une image
- en déduire l'algorithme de réduction de résolution w x h vers w' x h', qui commence par une interpolation puis par éliminer seulement des lignes ou des colonnes
- Etape 2 : traitement temps-réel
- la méthode est presque parallélisable naturellement, au sens où l'algorithme d'optimisation peut donner plusieurs chemins candidats
- mettre en place cette approche avec élimination de plusieurs chemins simultanées
- voir si on peut aboutir à un traitement temps-réel d'un flux vidéo
- Etape 3 : amélioration possibles
- on peut travailler les énergies mises en place, changer l'espace des couleurs, ou mixer plusieurs modèles de réduction de résolution
- on pourra s'inspirer aussi d'articles ayant amélioré cette méthode.
- Quelques liens pour démarrer
Scan de page par Webcam, redressement et amélioration d'image
L'objectif est de scanner une page avec une simple webcam ou camera. L'application doit permettre de lire un flux video en entrée, repérer les côtes d'une feuille si elle est présente dans une certaine zone, puis ramener cette géométrie déformée à une feuille A4 (mettons). Ensuite des algorithmes d'amélioration d'image peuvent être utilisés : élimination du bruit, binarisation (e.g. Otsu). Enfin on peut chercher à reconnaître les caractères (Optical Character Recognition). Ce projet poursuit le travail de R. Bouvier de l'an dernier.
- Etape 1 : prototype
- On pourra commencer par reprendre le travail de Rémi Bouvier
- Pour détecter les contours de la feuille, 2 techniques ont été implémentées, Canny ou watershed.
- Permettre à l'utilisateur de choisir en cours d'utilisation la technique utilisée, de modifier les paramètres, de visualiser en surimpression le résultat
- Reprendre ensuite la méthode de détection de lignes (transformée de Hough)
- Indiquez clairement où l'utilisateur doit à peu près placer les coins
- Sélectionner les droites données par Hough en ne gardant que celles qui passent par ces zones
- Si 4 bords de la page sont détectés, capturer l'image et affichez-là
- On pourra enfin redresser l'image par une transformation homographique
- Etape 2 : améliorations
- on peut travailler sur le déclenchement automatique de la capture, e.g., repérer que l'histogramme dans la partie correspondant à la feuille comporte essentiellement des blancs/gris clairs et des noirs.
- on peut renforcer/aider la détection des bords de l'image en détectant des coins dans les zones spécifiées.
- on peut repérer que la feuille n'est pas très droite (genre courbée d'un côté ou de l'autre : en fait, elle ne peut pas être courbée des 2 côtés en même temps (car sa courbure gaussienne est nulle !).
- on peut améliorer l'image capturée en égalisant l'image, ou proposer sa binarisation optimale par la méthode d'Otsu.
- on peut grouper les lignes puis tenter d'utiliser la reconnaissance de caractères pour extraire les textes dans l'image.
- si le focus de la caméra n'est pas bon, on peut essayer des techniques de déconvolution pour retrouver une image plus nette (c'est un problème d'optimisation), ou on peut essayer de piloter le focus de la caméra (mais pas toutes les caméras/webcam se laissent piloter).
- Liens pour démarrer
Archive des projets réalisés
Projets réalisés 2021-2022
- R. Bouvier: Scan de page par WebCam
Projets réalisés 2020-2021
- R. Tournafond et A. Decouttère: Transfert de couleurs entre images par transport optimal par coupes