Sortie de CImg 1.3.9 et G'MIC 1.3.9.0

Posté par  (site web personnel) . Modéré par baud123.
25
29
juil.
2010
Audiovisuel
Deux mises à jour simultanées de bibliothèques/logiciels libres liés au traitement d'images sont à signaler, avec la sortie de CImg (en version 1.3.9) et G'MIC (en version 1.3.9.0).

Ces deux projets, qui ont respectivement dix et deux ans d'âge, sont aujourd'hui développés et maintenus dans l'équipe IMAGE du laboratoire de recherche GREYC, unité de recherche CNRS basée à Caen, et sont distribués sous licence CeCiLL. Ils définissent un ensemble de fonctionnalités pour la manipulation de données images pixelliques génériques (images 2D, 3D, 3D+t, couleurs, multi-spectrales, à valeurs entières 8/16/32 bits ou flottantes), qui peuvent se mettre en place aussi bien dans un code C++ (avec CImg) que dans un shell/script (avec G'MIC), ou encore au travers de l'interface graphique proposé par le greffon G'MIC, dédié spécifiquement au logiciel de retouche d'images GIMP.

Le duo CImg / G'MIC couvre donc un large spectre de besoins et de profils d'utilisation, et peut intéresser potentiellement à la fois les programmeurs et les utilisateurs demandeurs d'algorithmes en traitement d'images. Ces réalisations sont disponibles pour de nombreuses plateformes, et les dernières versions en particulier pour Linux (paquets Debian / Ubuntu), Windows et Mac OS X accessibles sur les pages respectives des projets.

CImg

C'est une bibliothèque C++ légère mais relativement complète pour le traitement des images. Elle est principalement destinée aux programmeurs C++ souhaitant concevoir ou appliquer des algorithmes agissant sur des données images de type quelconque. Elle est de ce fait basée sur des principes de programmation générique à base de templates, tout en restant simple à appréhender pour les programmeurs non gourous en C++ (ce qui la différencie de Boost/GIL d'Adobe par exemple).

CImg contient la panoplie indispensable d'outils classiques pour la manipulation des images, que ce soit pour les entrées/sorties, la visualisation (en 1D, 2D, 3D), le filtrage, les transformations géométriques, le tracé de primitives, la colorimétrie, etc. C'est une bibliothèque modulable (elle peut s'appuyer sur aucune ou plusieurs bibliothèques externes comme FFTW, ImageMagick, etc.), et extensible (l'utilisateur pouvant ajouter ses propres fonctions de traitement directement dans la bibliothèque). Elle a été pensée initialement pour une utilisation en recherche et en enseignement, en privilégiant une facilité d'installation, d'utilisation et d'intégration.

Cette nouvelle version 1.3.9 apporte son lot de corrections de bogues et d'optimisations. Peu de nouvelles fonctionnalités apparaissent, la bibliothèque étant déjà relativement fournie et mature et privilégiant la stabilité du code.

G'MIC

C'est un projet bien plus jeune (basé sur CImg), il connaît par conséquent une dynamique plus importante. Son but premier est de définir un langage de script, dédié à la réalisation de pipelines de traitement d'image ; de nombreuses nouveautés ont été récemment introduites, aussi bien dans l'optimisation/débuggage de l'interpréteur dédié, que dans l'élaboration de nouvelles commandes/fonctions de traitement disponibles (plus de 500 à ce jour).

On pourra citer les nouveautés suivantes en particulier :
  • Deux nouvelles démonstrations interactives du langage ont été ajoutées, visibles en appelant G'MIC via les commandes gmic -x_jawbreaker (copie d'écran) et gmic -x_light (copie d'écran). Ces démos sont intéressantes, car elles illustrent une des différences de G'MIC par rapport au fameux convert de l'honorable suite ImageMagick, à savoir une intégration conjointe des algorithmes de traitement et des modules de visualisation dans un unique exécutable, ce qui rend possible la programmation (en langage G'MIC) d'interactions personnalisées avec l'utilisateur. Pour les plus curieux, d'autres démos plus anciennes (commandes x_fire, x_fish_eye, x_fourier, x_life, x_mandelbrot, x_splines et x_tictactoe) sont également disponibles par défaut dans G'MIC.

  • L'apparition d'un nouveau filtre B&W Sketch particulièrement intéressant pour styliser des photographies en leur donnant un rendu « dessin » ou « peinture ». De nombreux exemples sont disponibles sur ce fil de discussion. Ce filtre est amusant car il est possible de générer de nombreux types de styles de rendus différents (exemple1), (exemple2), (exemple3), (exemple4), allant du dessin crayonné, au rendu de type Fractalius (greffon propriétaire pour Photoshop).

  • Un filtre de représentation réversible de transformées de Fourier (étant par essence à valeurs complexes flottantes) au moyen d'images limitées à 8 bits par composante a été ajouté, ce qui permet in-fine une manipulation directe des caractéristiques spectrales des images sous GIMP. C'est très utile notamment pour pouvoir supprimer manuellement des composantes hautes fréquences indésirables dans des images, par exemple lorsque celles-ci possèdent des bruits de trames. Ce fil de discussion illustre son utilisation pour la suppression d'une trame régulière apparaissant après numérisation d'un magazine, ainsi que pour le tatouage numérique invisible (à l'œil nu) d'images.

  • Nous avons commencé à interagir sérieusement avec Angelo Lama, le créateur d'EKD (logiciel de post-production vidéo / image / son), qui a réussi à intégrer quelques effets G'MIC dans EKD (voir le blog d'EKD). Les perspectives d'attaquer le domaine de la vidéo sont particulièrement intéressantes et devraient amener à l'élaboration de nouveaux effets spécifiques.

  • D'un point de vue plus technique, on peut noter l'apparition des variables nommées dans le langage G'MIC, pour référencer les images et/ou les éléments de la pile. Cela simplifie souvent l'écriture de nouvelles commandes, comme ici par exemple avec le calcul de la factorielle : fact : -check isint($1) res=1 -repeat $1 res={$res*(~>+1)} -done -u $res
CImg et G'MIC sont deux outils assez complémentaires, qui permettent de nombreuses manipulations dans le domaine du traitement d'images. Ils avancent doucement dans l'univers des logiciels libres disponibles en imagerie. N'hésitez pas à tester et donner vos impressions sur ces deux projets !

Aller plus loin

  • # Miam-miam !

    Posté par  (site web personnel) . Évalué à 2.

    Avant G'MIC, j'utilisais déjà le plugin GREYC Storation pour Gimp. Il n'y a pas à dire, c'est un outil quasi incontournable ! Les nouveautés de cette version ne m'intéressent pas spécialement, mais je ne manquerai pas pour autant de la télécharger ! ^^
  • # QUESTIONS ? :)

    Posté par  (site web personnel) . Évalué à 6.

    Alors voilà... j'ai un p'tit logiciel (que je vais bientôt releaser ;) ), qui a besoin d'afficher les images (ça c'est bon), de les rotationner (ça c'est bon aussi avec tous les formats d'images pris en compte par Qt) et de faire un spectre (je somme les intensité de chacune des colonnes puis j'affiche le graphe).

    Mon problème se pose pour un format d'image spécialement dédié à l'astro le format "fits".
    [FITS]

    Autant j'arrive à bien l'afficher, autant j'aimerais garder la dynamique (16bits par canal. Souvent 1 seul) pour mon calcul de spectre. Mais mon calcul se spectre se fait "après" la rotation or la rotation n'est prise en compte (pour python-imaging ou Qt) que pour des images à 8 bits par canal.

    Questions !! : CImg absorbe-t-il ce genre d'images en entrée ?
    CImg peut-il faire une rotation d'une image de 16 bits (monochrome) et redonner en sortie un tableau ?
    • [^] # Re: QUESTIONS ? :)

      Posté par  (site web personnel) . Évalué à 3.

    • [^] # Re: QUESTIONS ? :)

      Posté par  (site web personnel) . Évalué à 4.

      La réponse est oui. CImg ne s'intéresse pas au type des pixels quand il fait des transformations géométriques, donc que ce soit du 8, 16 ou 32 bits entier ou flottants, la sortie de la fonction de rotation sera la même que celle d'entrée.
      • [^] # Re: QUESTIONS ? :)

        Posté par  (site web personnel) . Évalué à 2.

        y'a pas de bindings python :)))))))))) ??? c'est dommage...
        • [^] # Re: QUESTIONS ? :)

          Posté par  (site web personnel) . Évalué à 2.

          Vu la facilite a binder du FORTRAN avec Python,
          j'imagine que du C ou C++ ca ne doit pas etre bien difficile non plus
          (je ne connais rien a FORTRAN mais j'ai pu binder une fonction
          FORTRAN pour l'appeller depuis Python en 30mn, lecture de la doc
          de f2py comprise).
          • [^] # Re: QUESTIONS ? :)

            Posté par  (site web personnel) . Évalué à 2.

            Ici, je pense que ce n'est pas forcément facile du fait de l'utilisation des templates. Je ne connais pas trop Python, mais les classes principales de CImg sont paramétrées elles-mêmes par un paramètre template.
            Est-ce que c'est quelque chose que Python sait gérer ?
            • [^] # Re: QUESTIONS ? :)

              Posté par  (site web personnel) . Évalué à 1.

              Je ne vois pas trop la, vite-fait en passant.
              Il me faudrait un exemple concret pour réfléchir dessus.
              A priori, je dirais que oui ça doit être faisable.
  • # Video

    Posté par  . Évalué à 4.

    Je pense qu'il manque vraiment aujourd'hui un outil performant pour traiter un flux d'images tel qu'un film. Penses tu qu'il y aurait un intérêt à intégrer Gstreamer en tant que moyen d'entrée de vidéos, je m'explique.

    Il existe tout un tas de pipeline possible dans gstreamer qui permettent d'acquérir des flux (mms, rtsp, file, v4l2) pour la video et le son. pouvoir utiliser cimg Cimg et G'MIC via une suite de pipe bien choisis permettrait vraiment de toucher par exemple le monde de la video.
    Je sais que OpenCv a déjà commencé ce travail, mais les résultats me semblent encore limités (gros bugs sur les flux rtsp).

    Dans ce cadre il y aurait deux stratégies, soit inclure gstreamer comme source de données, soit faire un plugin de G'MIC. Les deux on des avantages et des incovénients. Personnellement je trouve que gstreamer est super mais un peu trop usine à gaz, je préferais donc pouvoir utiliser directement gstreamer depuis G'MIC ou EKD.


    Qu'en penses tu ?
  • # Création de code C++ ?

    Posté par  (site web personnel) . Évalué à 2.

    Dans le cas d'un usage de G-MIC en prototypage, cela sera sympa d'avoir un moyen faire générer à gmic le code C++ qui correspond au filtre créer.

    Cela permettrait de pouvoir intégré le code dans une application plus vaste, voir pourquoi pas avoir de meilleur performance.

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

Suivre le flux des commentaires

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