Journal G'MIC 1.5.8.3 : Quelques avancées supplémentaires pour le traitement d'image libre

77
11
fév.
2014

Sommaire

Bonjour à tous.
Je vais vous donner (encore!) quelques nouvelles du projet G'MIC, un framework libre pour le traitement d'image, que nous développons dans l'équipe IMAGE du laboratoire GREYC (UMR CNRS 6072), et qui est distribué sous licence libre CECILL.
A l'occasion de la sortie de la dernière version (estampillée 1.5.8.3), je vous propose un récapitulatif des nouvelles fonctionnalités introduites depuis l'arrivée de la branche 1.5.8.x (c'est-à-dire juste quelque temps après la publication de mon dernier journal sur le sujet, fin octobre).

G'MIC : Kesako ?

logo
Le projet libre G'MIC (acronyme de GREYC's Magic for Image Computing) propose différentes interfaces utilisateurs pour la manipulation d'images génériques (2d/3d, multi-spectrales,..), dont un plug-in pour GIMP, un web-service G'MIC Online, un outil en ligne de commande gmic, ou encore une bibliothèque C++ (libgmic), et une interface graphique en Qt pour la manipulation d'images provenant de la webcam (ZArt).

Le plug-in pour GIMP étant ajourd'hui l'interface de G'MIC la plus utilisée, j'insisterais ci-dessous sur les fonctionnalités ajoutées pour cette interface. Mais bien sûr, gardez en mémoire que vous pouvez réaliser exactement les mêmes opérations en utilisant les autres interfaces disponibles (notamment, vous pouvez tout automatiser dans des scripts shell, ou disposer de tous ces filtres dans vos propres programmes si vous le souhaitez !).

Les nouveaux effets disponibles.

Aujourd'hui, l'installation du greffon G'MIC pour GIMP et de la dernière mise à jour des filtres vous permet de disposer d'un total de 612 effets à appliquer sur vos images. Même si beaucoup de ces filtres sont encore en phase de test (rangés dans la section Testing/), il y a quand même de quoi s'amuser pendant quelque temps ! Voici un (long) résumé des effets ajoutés récemment. Vais-je battre le record du journal contenant le plus d'images ? Suspens !

Effet : Arrays & tiles / Puzzle

Comme son nom l'indique, ce filtre convertit une image en puzzle.
"Mais, mais, mais, il y a déjà un effet de ce type par défaut dans GIMP !" vous entends-je crier au loin. C'est vrai (effet par défaut disponible dans Filters / Render / Pattern / Jig-saw), mais le filtre G'MIC va plus loin : il décompose réellement l'image en différentes pièces de puzzle. Il ne se contente pas d'ajouter un motif au dessus de l'image qui fait croire à un puzzle "tout fait". Cela nous permet en particulier de pouvoir appliquer des rotations ou du redimensionnement sur chaque pièce (avec un peu d'aléatoire si besoin est), et éventuellement de mélanger les pièces. On peut même faire en sorte que chaque pièce se place indépendamment sur un nouveau calque.
puzzle
Du coup, on peut très rapidement faire ce genre de choses :
puzzle
Sympa non ?

Effet : Artistic / Hope poster

Pas grand chose à dire, c'est un filtre qui tente de transformer votre image en un poster de campagne façon Barack Obama :)
hope

Effet : Artistic / Polygonize

Voilà un filtre amusant, qui essaye de transformer votre image en un ensemble de polygones de couleurs constantes, qui suivent plus ou moins les contours. Peut-être intéressant pour les créateurs de vitraux d'églises ! En pratique, on part d'un ensemble de points aléatoires connectés et on déplace ces points de façon à ce qu'ils collent aux contours présents dans l'image. Rien de bien compliqué, mais avec les bons paramètres, on peut vraiment générer de jolies choses (et éviter de faire ça à la main, tant qu'à faire).
polygonize

Effet : Frames / Frame [blur]

Un petit filtre tout bête qui ajoute un cadre à une image, en prenant une version lissée de l'image comme référence pour remplir l'intérieur du cadre, avec éventuellement l'ajout d'un petit bandeau de couleur ainsi que de l'ombrage. Ici c'est pareil, ça fait gagner pas mal de temps pour un résultat rapide et sympa.
frame

Effet : Repair / Inpaint [patch-based]

Nous avons également beaucoup retravaillé sur l'algorithme d'_Inpainting_, qui permet de reconstruire de manière automatique des parties manquantes dans les images. J'avais déjà présenté cet algorithme sur Linuxfr, lors de la sortie de G'MIC 1.5.5.1, mais les améliorations que nous avons récemment apporté à cet algorithme méritent qu'on en reparle un peu.
Notons d'abord que quelques résultats de ces travaux, réalisés en partie par Maxime Daisy et Pierre Buyssens (respectivement doctorant et post-doc dans l'équipe IMAGE du GREYC) ont été publiés et présentés récemment à SIGGRAPH Asia 2013 à Hong-Kong (voir cette page de démo), et les autres améliorations apportées plus récemment (notamment sur le temps de calcul mais aussi sur la qualité de la reconstruction) sont en cours de publication.

Patrick David (photographe amateur américain, proche de l'équipe de développement de G'MIC) en a d'ailleurs assez bien parlé sur un article de son blog. De son point de vue, l'algorithme actuel d'inpainting disponible dans G'MIC est maintenant plus performant que celui du greffon Resynthetizer classiquement utilisé jusqu'à maintenant pour enlever des objets gênants dans des images sous GIMP.

Nos toutes dernières expériences montrent que nous rivalisons largement avec le fameux algorithme d'inpainting dit du Content Aware Filling disponible sur Photoshop, qui fait des choses équivalentes. Un exemple ci-dessous, où l'algorithme d'inpainting de G'MIC permet de reconstruire toute la partie masquée en rouge.

inpainting

Effet : Rendering / Equation plot [parametric]

Vous rêviez de tracer de jolies courbes en restant sous GIMP ? Alors ce petit filtre est fait pour vous ! Il permet de tracer des équations paramétriques 2d dont vous donnez la formule. Voici quelques exemples :
parametric

Effet : Rendering / Cupid

Et justement, une équation paramétrique remarquable (par sa longueur et par l'originalité de son tracé) est la fameuse Cupid curve (allez voir la formule, ça vaut le coup d'oeil!). Et pour vous éviter de vous retaper l'équation à la main, on vous a fait un filtre exprès. C'est pas gentil ça ? Oui ça sert à rien, et alors ! (enfin si, ça sert in fine à tester l'évaluateur d'équation intégré à G'MIC!).
cupid

Effet : Rendering / 3d blocks

Voilà un effet 3d sympa, qui transforme votre image en un champ de parallélépipèdes plus ou moins hauts, suivant la valeur de la luminance des pixels de votre image. Un filtre pour les amateurs de LEGO ?
blocks3d

Effets : Repair / Smooth [skin], Colors / Detect skin, Details / Split details et Details / Details equalizer.

Ces 4 filtres ont été ajoutés presque simultanément. Le but initial était de pouvoir lisser la peau lors de la retouche de portraits, mais on peut aussi les utiliser dans d'autres cas bien entendu.
Le principe de base pour la retouche de peau sur des images de portraits repose sur deux fonctionnalités principales :

  1. La détection de peau, pour générer un masque qui va permettre de ne pas traiter les autres parties d'une photographie (la création de ce masque est le but principal du filtre Colors / Detect skin). Cette étape se fait de manière assez rudimentaire, en calculant une carte de probabilité d'appartenance des pixels à la couleur 'peau', définis comme les couleurs dont les chromaticités sont proches de chromaticités de référence (obtenus par apprentissage sur une base de données de pixels labéllisés à la main). C'est une technique assez classique pour segmenter la peau dans les photos (et que j'ai vu aussi par ailleurs pour détecter des images à caractère pornographique!). La qualité du résultat dépend bien sûr pas mal de l'environnement dans lequel a été prise la photo (intérieur / extérieur), du type d'éclairage lors de la prise de vue, etc, mais en général c'est satisfaisant. Bien sûr, dans les cas où ça ne fonctionne pas, le filtre propose un mode 'manuel' qui permet à l'utilisateur de faire lui même son apprentissage sur un échantillon de peau qu'il détermine 'à la main'.

  2. Le lissage de la peau : cette partie doit se faire avec assez de précaution pour ne pas faire ressembler le modèle de votre portrait à un mannequin en plastique. Classiquement, les artistes qui font ça de manière propre décomposent d'abord l'image en plusieurs échelles de détails, et enlèvent des détails correspondants à une échelle moyenne (ni trop fine, ni trop grossière), de façon à garder les détails fins qui correspondent grosso-modo à la texture naturelle de la peau (pores).
    On a donc ajouté toute une panoplie de filtres permettant de décomposer une image suivant plusieurs niveaux de détails, de pouvoir modifier ces détails indépendamment (soit manuellement, soit automatiquement), et de recomposer l'image finale à partir de chacun des niveaux de détails modifiés.

Bref, pour la retouche de peau, on peut maintenant faire des choses assez sympas dans G'MIC, en rendant le processus plus ou moins automatisé en fonction de son niveau d'expérience. Quelques exemples valent mieux que de long discours (j'ai volontairement exagéré le lissage pour le rendre visible sur des petites images, mais bien sûr tout cela est réglable).

skin

En poussant un peu la bête, on peut gagner facilement 10 ans ! (bon j'avoue j'ai un peu trop forcé sur les paramètres).

therese

Effet : Deformation / Textured glass

On revient à des choses plus simples, avec un filtre déformant une image, comme avec du verre 'brouillé'.
glass

Effet : Patterns / Op art

Ca c'est un filtre amusant et pouvant générer des effets très différents : il permet de remplacer chaque pixel de votre image, par une imagette quelconque. L'utilisateur peut spécifier les motifs d'entrés qu'il veut utiliser, ou choisir dans une liste de motifs prédéfinis. L'image ci-dessous illustre les deux façons de faire, avec des motifs prédéfinis (à gauche) ou définis par l'utilisateur (à droite, avec les sprites du jeu Gauntlet).
opart

Améliorations diverses, sous le capot

Bien sûr tous ces filtres correspondent à la partie 'immergée' de l'icerberg. Un gros travail a été aussi réalisé sur d'autres améliorations moins visibles, l'optimisation de l'interpréteur de script interne à G'MIC, une meilleure stabilité (notamment pour les machines tournant sous MacOSX, merci valgrind!), etc…
Quelques démos supplémentaires ont été ajoutées, et vous pouvez les apercevoir en lancant la commande

$ gmic -demo

Perspectives

Bref, ces 4 derniers mois passés ont été plutôt intenses pour l'amélioration du projet G'MIC, et on va essayer de maintenir le cap pour les prochains mois. Le projet est vraiment actif, et la vitesse avec laquelle les nouvelles fonctionnalités apparaissent est vraiment bonne pour le moment.

A noter que nous présenterons G'MIC à la conférence Libre Graphics Meeting 2014, à Leipzig, avec une retrospective des 2 dernières années écoulées. Avec 20 minutes prévu pour la présentation, autant dire que nous allons manquer un peu de temps :)

Pour en finir avec ce long journal (le record a-t-il été battu ?), je voudrais signaler qu'on a organisé il y a quelques temps un challenge spécial G'MIC, uniquement pour le fun.
Ce modeste challenge intitulé From scratch challenge consistait à proposer des images dont le contenu avait été généré uniquement par l'application de filtres G'MIC (à partir d'une image blanche ou noire en entrée). C'est plutôt intéressant de voir la variété des résultats proposés (59 images ont été soumises pour ce challenge), et de se dire que quand même, on peut en faire des choses avec G'MIC !
Toutes les images de ce challenge sont disponibles ici.

Merci de votre attention, et à dans quelques mois pour la suite de nos aventures.

  • # Superbe travail

    Posté par (page perso) . Évalué à 9.

    Merci pour cette belle présentation, les rendus sont vraiment impressionnants.

    En tant que simple amateur, j'ai l'impression de ne pas utiliser (ni connaître) le quart du dixième des possibilités offertes par Gimp et ses extensions.

    • [^] # Re: Superbe travail

      Posté par (page perso) . Évalué à 2.

      Je suis comme toi. C'est juste bluffant.

      Il faut montrer çà à ses enfants pour leur apprendre à être critique sur ce qu'ils voient en photo!

      On comprend mieux pourquoi l'infographie peut être un métier.

  • # Effet : Repair / Inpaint [patch-based]

    Posté par (page perso) . Évalué à 10.

    Effet : Repair / Inpaint [patch-based]

    Shut up and take my money!

    Commentaire sous licence LPRAB - http://sam.zoy.org/lprab/

  • # From scratch challenge

    Posté par (page perso) . Évalué à 4.

    Il y a quelques images issues de ce challenge qui sont tout simplement magnifiques. Il y a moyen de savoir la liste les filtres qui ont été appliquées, voir de télécharger les images ?

    Il existe deux catégories de gens : ceux qui divisent les gens en deux catégories et les autres.

  • # Coquille

    Posté par . Évalué à 2.

    L'URL de votre laboratoire est erronée. La bonne adresse est https://www.greyc.fr/

    J'en profite pour saluer ce travail admirable qui donne envie de faire du traitement d'image !

  • # Encore ?

    Posté par . Évalué à 5.

    Je vais vous donner (encore!) quelques nouvelles du projet G'MIC.

    Franchement ne te prive pas, ça fait un de ces plaisir de voir un projet libre avancer aussi bien et offrir des fonctionnalités avancées d'une manière ergonomique.
    Merci pour cette dépêche claire et complète et bien rédigée (et plaisante) ;-)

    kentoc'h mervel eget bezan saotred

  • # Inpainting

    Posté par . Évalué à 1.

    Je suis assez impressionné par "l'inpainting" (je ne connaissais pas le terme). C'est peut-être parce que je n'y connais pas grand chose en traitement de l'image et que je suis impressionnable.
    C'est un truc qu'il faudra que je teste la prochaine fois que j'en aurai besoin, plutôt que de copier des bouts de l'image autour de l'objet à supprimer, et d'essayer d'étaler ces bouts d'image avec l'outil de "barbouillage". Ben ouais, je suis pas moderne moi, je ne sais utiliser que les outils de base de Gimp.

    • [^] # Re: Inpainting

      Posté par (page perso) . Évalué à 10.

      En fait la plupart des algorithmes d'Inpainting font exactement ça : ils essayent de copier/coller des bouts d'images connus à l'endroit des zones à reboucher, mais en faisant ça de manière automatique.
      ça revient donc bien à utiliser l'outil Clone de GIMP.

      Mais ne rêvons pas, l'algorithme ne fait pas ça mieux que l'humain, et il y a des chances qu'en faisant le travail 'à la main', ça donne quelque chose de plus joli (mais faut prendre beaucoup de temps!).
      Par exemple, avec des configurations un peu difficiles, aucun algorithme ne peut faire de miracles. Illustration avec l'exemple ci-dessous, où on essaye d'enlever le bateau. Resynthetizer et G'MIC n'arrivent pas à bien joindre les bouts, étant donné qu'il n'existe tout simplement pas de zones copiables depuis l'image d'origine correspondant parfaitement à ce que l'on cherche à reconstruire (notamment à l'intersection mer, ciel, plage à l'horizon).

      ex

    • [^] # Re: Inpainting

      Posté par . Évalué à 1.

      À propos d'inpainting, est-ce qu'il existe une implémentation pour appliquer ce mécanisme à de la vidéo ?
      Sur Internet, on trouve un certain nombre de papiers de recherche et autres démos mais j'ai pas vu de logiciel disponible.

      • [^] # Re: Inpainting

        Posté par (page perso) . Évalué à 2.

        Pour la vidéo, ça se complique. Si on applique l'inpainting frame par frame, ça ne rend rien, il manque une cohérence temporelle, et ça saute aux yeux en pratique. C'est toute la difficulté de l'inpainting vidéo, et c'est un problème vraiment pas résolu encore. La plupart des papiers sur l'inpainting vidéo montrent encore des résultats où les vidéos ont des fonds fixes…

        • [^] # Re: Inpainting

          Posté par . Évalué à 1.

          En effet, j'imagine qu'il y a un saut de complexité à passer à de la vidéo.
          Mais, déjà pour le cas d'un fond fixe, je serais curieux de pouvoir faire quelques tests pour m'amuser.
          Exemple typique que j'ai en tête : une caméra stationnaire qui filme dans une rue et on fait disparaître les gens qui passent, en ne gardant que les bâtiments.
          Ce qui donnerait un rendu du genre time-lapse dans une ville fantôme :)

          • [^] # Re: Inpainting

            Posté par (page perso) . Évalué à 2.

            Mais justement pour ce genre de cas, l'inpainting n'est pas vraiment nécessaire.
            Il suffit de calculer pour chaque pixel sa valeur médiane dans toutes les frames, et le tour est joué.

            • [^] # Re: Inpainting

              Posté par . Évalué à 2.

              Il y a quand même un effet de flou, et les variations de luminosités qui peuvent faire des choses bizarres.

              "La première sécurité est la liberté"

  • # amélioration ?

    Posté par . Évalué à 2.

    Je rêve d'un filtre pour "embellir" globalement les photographies.

    En gros, il s'agit de supprimer les déformations géométriques, un outil externe existe mais il utilise une base de données obsolète d'objectif et les données exif.

    Il faudrait aussi pouvoir compenser le vignetage, voir la suppression des franges violettes (diffraction de second ordre ?).

    Il faudrait aussi pousser le contraste et la couleur, sans bruler les claires, ni les saturer (je le fait avec une courbe en l'"arrondissant").

    Cela permettrait d'utiliser des objectifs moins chère pour des rendus semblables à des focales fixes.

    "La première sécurité est la liberté"

    • [^] # Re: amélioration ?

      Posté par . Évalué à 3.

      un outil externe existe mais il utilise une base de données obsolète d'objectif et les données exif.
      Il me semble qu'il est "relativement" facile d'intégrer un nouvel appareil / objectif à lensfun (si c'est bien de lui que tu parles) : il suffit de prendre 3 photos de la même chose à 3 focales différentes (avec le même objectif), et de pointer quelques endroits facilement repérable par un outil automatique (par exemple un coin de maison, un point d'une couleur qui ressort) et d'utiliser le bon outil.

      Enfin un tuto explique ça mieux que moi http://www.vide.memoire.free.fr/photo/textes/lensfun/calibration-lensfun-hugin.php

      Ça prend un peu de temps, mais le cas échéant c'est utile.

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.