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
Aller plus loin
- CImg : C++ Template Image Processing Library (13 clics)
- G'MIC : GREYC's Magic Image Converter (8 clics)
- Greffon pour GIMP (4 clics)
- Laboratoire GREYC (UMR CNRS 6072) (8 clics)
# Miam-miam !
Posté par Benoît Bâlon (site web personnel) . Évalué à 2.
# QUESTIONS ? :)
Posté par djibb (site web personnel) . Évalué à 6.
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 djibb (site web personnel) . Évalué à 3.
[^] # Re: QUESTIONS ? :)
Posté par David Tschumperlé (site web personnel) . Évalué à 4.
[^] # Re: QUESTIONS ? :)
Posté par djibb (site web personnel) . Évalué à 2.
[^] # Re: QUESTIONS ? :)
Posté par zaurus (site web personnel) . Évalué à 2.
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 David Tschumperlé (site web personnel) . Évalué à 2.
Est-ce que c'est quelque chose que Python sait gérer ?
[^] # Re: QUESTIONS ? :)
Posté par zaurus (site web personnel) . Évalué à 1.
Il me faudrait un exemple concret pour réfléchir dessus.
A priori, je dirais que oui ça doit être faisable.
# Video
Posté par freejeff . Évalué à 4.
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 Nicolas Boulay (site web personnel) . Évalué à 2.
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.