Ceci est une ancienne révision du document !



G'MIC

G'MIC est un outil de traitement d'images en ligne de commande. Il permet de charger/sauver, convertir, manipuler/filtrer et visualiser des images de toute sorte et de tous formats. Dans cette notice, nous montrerons tout d'abord quelques utilisations de base de G'MIC pour comprendre sa logique interne de fonctionnement. Puis nous l'appliquerons pour lancer des manipulations plus complexes sur des images et des séquences vidéos.

Le paquet gmic ne se trouve pas dans les dépôts officiels, il va donc falloir modifier vos sources de mises à jour pour y ajouter le dépôt suivant :

deb http://download.tuxfamily.org/xcfaudio/gmic lenny contrib

et rajouter la gerer_les_cles_d_authentificationclef d'authentification en tapant dans une console:

wget http://download.tuxfamily.org/xcfaudio/download/xcfaudio.key.asc -O - | sudo apt-key add -

Rechargez la liste des paquets et installez le paquet gmic.

Si tout se passe bien, vous devriez pouvoir lancer G'MIC depuis la console :

user@laptop:~$ gmic

<gmic-#0> No options or data provided. Try 'gmic -h' for help.

A partir de là, tout est en ordre ! A noter que G'MIC étant un outil en ligne de commande, il n'apparaît pas dans le menu déroulant de la liste des programmes.

L'ensemble des paramètres passés à G'MIC est interprété comme une séquence de commandes à exécuter. Une commande commence généralement par le caractère '-' suivi du nom de la commande, puis un espace, puis éventuellement l'argument de cette commande.

Chargement d'une (ou plusieurs) image(s)

Par exemple, pour charger un fichier image dans G'MIC :

gmic -input fichier.jpg

Cette commande charge (et affiche) l'image spécifiée en paramètre. A noter que la fenêtre de visualisation permet à l'utilisateur d'une part d'explorer précisément les valeurs des pixels de l'image, et d'autre part de zoomer sur certaines parties, en utilisant la souris ou la combinaison CTRL + molette.

Certaines commandes telles que -input sont tellement redondantes qu'il en existe des raccourcis, en l'occurrence ici l'option -i :

gmic -i fichier .jpg

La commande -input est même tellement utile, que G'MIC l'utilise par défaut lorsque l'élément lu en ligne de commande ne correspond à aucune commande interne reconnue. On peut donc écrire aussi :

gmic fichier.jpg

Une des particularités de G'MIC est qu'il sait charger plusieurs images en mémoire :

gmic -i fichier1.jpg -i fichier2.jpg -i fichier3.jpg

ou encore

gmic fichier1.jpg fichier2.jpg fichier3.jpg

Ainsi, ces commandes vous afficheront trois images dans la même fenêtre de visualisation (qui est toujours unique celle-ci).

G'MIC "reconnaît" un format de fichier d'image par son extension. Il est donc nécessaire que vos fichiers images aient l'extension qui corresponde bien à leur format.

On voit que de cette façon, G'MIC va être capable de charger des séquences entières d'images. Effectivement, si on lui spécifie une vidéo en fichier d'entrée, G'MIC va charger les différentes images composant la séquence comme une liste d'images :

gmic video.mpg
G'MIC stocke en mémoire vive toutes les images chargées. Pour une vidéo, il est donc important de vérifier que l'ensemble des images la composant va tenir en mémoire avant de la charger !

A noter que G'MIC est capable également de charger un sous-ensemble d'images d'une vidéo. Par exemple, la commande suivante va charger les images No 10 à No 99, avec un pas de 5 entre chaque image :

gmic video.mpg:10,99,5

Sauvegarde d'une (ou plusieurs) image(s)

De la même façon, G'MIC peut sauvegarder les images préalablement chargée dans sa liste interne, en utilisant l'option -output qui peut être raccourcie en -o. Si un format de fichier de sortie ne peut contenir l'ensemble des images (par exemple si on essaye de sauvegarder une liste de plusieurs images en un fichier .bmp), alors la sauvegarde se fait en plusieurs fichiers numérotés.

G'MIC peut donc convertir un image d'un format en un autre de la façon suivante :

gmic input.jpg -o output.png

ou bien séparer les images d'une séquence vidéo en plusieurs fichiers images numérotés distincts :

gmic input.mpg -o frames.png

ou encore assembler des images de même taille pour en faire une vidéo :

gmic frames*.png -o output.avi

Les commandes G'MIC étant lues et interprétée dans l'ordre d'apparition sur la ligne de commande, on peut aussi écrire :

gmic image.jpg -o image.bmp -o image.png -o image.tiff

par exemple pour convertir une image au format jpg en ses fichiers équivalents aux formats bmp, png et tiff.

G'MIC est basé en partie sur la bibliothèque Magick++ et reconnait donc la plupart des types de fichiers images courant. Mais il peut aussi charger et sauver des fichiers plus exotiques comme des images volumiques (imagerie médicale). Un point qui peut être très pratique également est la lecture/écriture de fichiers ASCII simples contenant les valeurs des pixels.

On peut par exemple écrire les valeurs des pixels d'une image sur la sortie standard par :

gmic image.jpg -o -dlm

ou même générer automatiquement du code C/C++ définissant un tableau de valeurs correspondant aux pixels d'une image :

gmic image.jpg -o table_pixels.h

Autres commandes utiles

Les commandes -input et -output ne sont que deux exemples d'un ensemble de commandes de traitement de base comprises par G'MIC, comprenant également des opérateurs de filtrage, de conversion d'espace couleurs, de déformations géométriques, etc. Nous en listons ici quelques exemples les plus intéressants pour une utilisation de base :

  • Redimensionnement d'image : L'option -resize (raccourcie en -r) peut servir à redimensionner les images. Elle prend un argument qui donne la nouvelle taille de l'image sous la forme Largeur,Hauteur,Profondeur,Nombre_de_canaux,Type_d_interpolation. Les caractères % sont autorisés. Par exemple, la commande :
gmic *.jpg -r 50%,50%,1,3,5 -o resized.jpg

va prendre tous les fichiers .jpg d'un répertoire, va les réduire en taille de moitié (avec une interpolation '5' qui correspond à une interpolation bicubique), et va les sauver sous forme de fichiers numérotés resized_xxxx.jpg.

  • Débruitage d'image et rehaussement de contours : G'MIC possède les options -smooth,-denoise et -sharpen dédiées à la restauration d'image, repris de l'outil open-source GREYCstoration. Ces commandes utilisent des processus relativement complexes de lissage d'image qui sont capables d'enlever le bruit en préservant les contours. Par exemple en utilisant la commande suivante :
gmic sample.jpg -sharpen 300 -smooth 50

On obtient le résultat de droite à partir de l'image de gauche (image reprise du site officiel)

sample9.jpg

Agir sur des sous-images

Comme on l'a vu, G'MIC considère en interne une liste d'image en mémoire. Ce qui est intéressant, c'est que chaque commande de G'MIC peut en fait s'appliquer à l'une ou l'autre des sous-images de la liste, en ajoutant tout simplement [] au nom de la commande appelée, et en mettant entre les crochets les indices des images de la liste que l'on veut traiter (la première image ayant le numéro 0).Le fait de ne pas rajouter cet indicateur est équivalent à l'application de la commande à l'ensemble des images de la liste. Quelques exemples valent mieux qu'un long discours :

  • Sauvegarde uniquement de la 10ème image d'une vidéo :
gmic input.mpg -o[9] frame10.png
  • Débruitage des frames No 0,5,10,15,20,25,30,35 d'une vidéo :
gmic input.mpg -denoise[0,5,10,15,20,25,30,35] 10 -o output.mpg

Ce qui peut être écrit de manière plus courte :

gmic input.mpg -denoise[0-35:5] 10 -o output.mpg

Ce qu'on peut mettre entre [] peut être relativement compliqué. Les % sont par exemple admis, et la commande suivante :

gmic input.mpg -o[0-10,20-50%,75%-100%:5] output.mpg

va sauver le fichier vidéo output.mpg composé de l'ensemble :

  • des images 0 à 10 de la vidéo d'entrée.
  • des images 20 → moitié de la vidéo d'entrée
  • du dernier quart de la vidéo d'entrée, avec une image sur 5.

A noter également que les nombres négatifs sont autorisés pour désigner des numéros d'images de la liste : le nombre -1 correspondant à la dernière image, -2 à l'avant dernière, etc…

Ainsi, si l'on veut traiter toutes les images d'une liste sauf les trois premières et les trois dernières, on pourra écrire (par exemple ici, pour une rotation) :

gmic video.mpg -rotate[3--4] 30 -o result.mpg

(A noter que les deux - dans l'expression [3–4] n'ont pas le même sens ici). Inversement, si on veut uniquement traiter les trois premières et les trois dernières images de la liste :

gmic video.mpg -rotate[0-2,-3--1] 30 -o result.mpg

Créer des enchaînements de commandes complexes et des macro-commandes

Cette capacité de G'MIC à agir de manière très précise sur une ou plusieurs images de sa liste est capitale : elle permet d'enchaîner des commandes simples de manière assez flexible pour créer des effets complexes au final. Par exemple, la commande suivante :

gmic -i sample.jpg -i [0]x3 -rotate[-1] 90 -rotate[-2] 180 -rotate[-3] 270 -r [0] -* -equalize -normalize 0,255

va charger une image, en faire trois copies grâce à l'opérateur -i qui est aussi capable de cloner des images de la liste (donc avoir finalement un total de 4 images identiques), va tourner les trois dernières respectivement de 90 deg., 180 deg. et 270 deg., puis va les redimensionner toutes avec la même taille (celle de la première image), pour finalement les multiplier entre elles, égaliser l'histogramme de l'image résultante et normaliser les valeurs de ses pixels entre 0 et 255.

Voila le résultat sur l'image de tout à l'heure :

sample2.jpg

Ce traitement est relativement complexe et s'interprète en lisant la commande de gauche à droite. Ainsi, même si le nombre de commandes "de base" de G'MIC peut sembler limité à première vue, l'association qu'il est possible d'en faire peut définir en réalité un nombre d'effets potentiellement illimité !

Les développeurs de G'MIC l'ont bien compris et ont intégré un système de macro-commandes destiné à exploiter cette particularité : Plutôt que d'obliger un utilisateur définissant ses propres effets à créer à chaque fois un fichier de script particulier dédié à cette tâche, G'MIC donne la possibilité de définir des macro-commandes : une macro est simplement un nom de commande défini par l'utilisateur dont l'invocation sur la ligne de commande va être substituée par toute une suite de commande, également définie par l'utilisateur.

En reprenant l'exemple précédent, nous allons créer un fichier mes_macros.txt contenant les lignes :

#
# Mon premier fichier de macro G'MIC !
#

zarbi : -i [0]x3 -rotate[-1] 90 -rotate[-2] 180 -rotate[-3] 270 -r [0] -* -equalize -normalize 0,255

La création et la sauvegarde de l'image précédente pourra alors se faire par l'invocation de G'MIC de la façon suivante :

gmic -m mes_macros.txt sample.jpg -zarbi -o output.png

Le tour est joué ! Il est évidemment possible de définir plusieurs macros à l'intérieur de ce même fichier, et les traitements personnalisés que l'on définit peuvent ainsi être regroupés au sein d'une même entitée.

G'MIC définit par défaut une soixantaine de macro-commandes aux buts divers et variés : filtrage, effets artistiques, désentrelacement, estimation de mouvement, etc… Ces macros n'ont pas besoin d'être explicitement chargées avec l'option -m car elles sont intégrées par défaut. La liste et le code correspondant de ces macros par défaut est disponible dans le fichier gmic_def.raw.

Voici quelques exemples d'utilisation des macros par défaut. Il est intéressant de voir le déroulement de l'ensemble des sous-commandes appelées lorsque l'on lance G'MIC en invoquant une macro-commande (images reprises du site officiel) :

  • Effet dessin au crayon :
gmic sample.jpg -pencilbw

sample16.jpg

  • Effet vieille photo :
gmic sample.jpg -noise 2 -damppatch -sepia

sample19.jpg

  • Effets reflexion + lissage radial : :
gmic sample.jpg -radialblur -waterreflection

sample20.jpg

  • Effet 'Andy Warhol' :
gmic sample.jpg -r 200%x200%x1x3x5 -warhol3x3

sample18.jpg

On voit que l'enchaînement de macros est tout à fait possible, et même l'appel de macros par d'autres macros. Ce système de commande personnalisé est tout à fait pratique et permet à chacun de se constituer très facilement un fichier d'effets personnalisés de traitement d'image.

Pour supprimer cette application, il suffit de supprimer le paquet gmic :

sudo apt-get remove gmic

G'MIC est un outil de traitement d'images aux multiples possibilités. Il permet notamment de traiter de manière flexible des images par lot, mais il permet surtout la création de filtres personnalisés de manière simple et efficace par un système de macro-commandes. Il possède également des capacités d'extraction et de visualisation de caractéristiques 3D des images (à compléter).

  • gmic.1237307952.txt.gz
  • Dernière modification: Le 17/03/2009, 17:39
  • par ZondeR