G’mic: Image et format

0-Introduction

Une image matricielle est matrice de pixels qui suit les règles de son format. Avec jusqu’à 4 canaux définissant la couleur d’après l’espace de couleur (RVB, CMJN, …) et des entiers de 0 à 255 ou à 65535, cela dépend du nombre de bits.
Mais une fois que G’mic prend l’image en charge, elle devient une matrice 4D de nombres à virgule sans réelle limitation. Cela signifie que durant la manipulation G’mic, vous pouvez avoir des nombres négatifs, des valeurs extrêmement hautes ou basses, des canaux par douzain, etc. Sensations de liberté…
Mais vous aurez peut-être aussi parfois la sensation d’être perdu, parce que vous aurez des difficultés à faire rerentrer votre image dans le monde contraignant des formats d’image, à moins que vous ne soyez au courant de ce qui suit.

1-Les canaux

1.1-Trois canaux dans le visionneur

Le visionneur de G’mic n’est pas pensé pour l’affichage de l’image, mais pour l’affichage d’informations de cette matrice 4D. Il ne montre que les 3 premiers canaux et considère que l’image est en RVB. Donc, si vous manipulez une image en CMJN, le canal N est ignoré et le reste aura l’air plutôt étrange. Si vous chargez une image avec transparence, vous ne la verrez pas.
Vous pouvez visualiser le quatrième canal en utilisant, par exemple, la commande -channels:

gmic mon_image.jpg -channels 3

Vous pouvez aussi demander à G’mic de simuler la transparence du quatrième canal sous forme de damier:

gmic mon_image.jpg -display_rgba

1.2-Combien de canaux dans quel format?

La façon dont vous arriverez à faire rentrer tous les canaux dans le fichier que vous avez l’intention de créer dépend du format d’image utilisé. G’mic tente de placer autant de canaux que le format peut en contenir et fait disparaître les autres. Et la signification des différents canaux dépend du format utilisé. Par exemple, 4 canaux dans un JPEG sera interprété comme une image CMJN alors que 4 canaux dans un PNG constituera un RGBA. Pour être sûr de ce que vous obtenez finalement, utilisez un visionneur « conventionnel » ou utilisez ImageMagick:

identify -verbose mon_image.jpg |grep Colorspace

alternate

récupérez Tux avec gmic tux_rgb.png -split x,3 -+, LGPL

2-Les nombres

2.1-Montrer n’importe quel nombre

Puisque virtuellement, n’importe quel nombre peut être contenu dans la matrice, le visionneur G’mic gère ce point en considérant le plus grand nombre comme le plus lumineux et le plus petit comme le plus sombre, puis il étire linéairement ce qu’il reste entre les 2. Il faut donc faire attention quand vous utilisez des algorithmes qui retournent des valeurs non conventionnelles. Par exemple:

gmic mon_image.jpg -luminance -threshold 120

affichera une image en noir et blanc, mais comme la commande -threshold ne retourne que des 0 ou des 1, si vous exportez ça dans un format conventionnel, vous obtiendrez une image très foncée. Ça se gère habituellement en étirant les valeurs entre 0 et 255 avec -normalize:

gmic mon_image.jpg -luminance -threshold 120 -normalize 0,255

D’autres manipulations peuvent localement introduire des valeurs extrêmes. Si vous faites:

gmic mon_image.jpg -unsharp_octave 2,2

Vous obtiendrez des valeurs comme -250 ou 450 sur un très faible nombre de pixels, votre image apparaîtra donc bien grise dans le visionneur G’mic. Rasez tout ça avec -cut:

gmic mon_image.jpg -unsharp_octave 2,2 -cut 0,255

Encore un commentaire sur le sujet, il est possible d’éviter l’étirement des valeurs dans le visionneur G’mic: -display0.

2.2-Ce que ça devient dans le fichier

Si toutes les valeurs sont contenues dans l’intervalle [0,255], G’mic se contentera d’arrondir à l’entier le plus proche et produira une image 8 bits. Mais si une seule valeur sort de ces limites, il produira une image 16 bits si le format le permet et/ou transformera les mauvaises valeurs en brouillard parasite afin que ça rentre dans les limites. ImageMagick peut vous aider à savoir ce qu’il s’est passé:

identify -verbose mon_image.jpg |grep bit

A partir de Troy Holden, CC-by-nc-nd

3-Encore quelques petites choses à propos de formats

3.1-A propos de Tiff

Le format TIFF est supposé accepter les nombres réels, donc G’mic n’hésite pas à les en mettre dedans. Mais en pratique, il est difficile de trouver un visionneur capable de lire de tels TIFF. Pour éviter les soucis de ce genre, vous devriez ajouter -type uchar avant d’exporter en TIFF. La commande précédente deviendrait:

gmic mon_image.jpg -unsharp_octave 2,2 -type uchar -o mon_image.tiff

3.2-About Raw

G’mic sait gérer le raw, mais vous devez faire attention au type et aux dimensions vous-même. Par exemple, pour charger une image 8 bit de dimension 1000x1000x200, utilisez la commande:

gmic -type uchar mon_image.raw,1000,1000,200

3.3-Formats natifs: CIMG et CIMGZ

Les formats natifs de G’mic sont le CIMG et son analogue compressé, le CIMGZ. Donc, si vous avez besoin de stocker votre image au cours d’une manipulation, il est conseillé de le faire dans l’un de ces formats pour éviter de perdre des informations à travers les contraintes habituelles. Ex:

gmic mon_image.jpg -unsharp_octave 2,2 -o mon_image.cimg
gmic mon_image.jpg -unsharp_octave 2,2 -o mon_image.cimgz

3.4-Formats texte

Una autre façon de conserver toutes les informations est d’utiliser un format texte (TXT ou DLM). De cette façon, vous serez même capable d’utiliser un éditeur de texte pour modifier votre image:

gmic mon_image.jpg -unsharp_octave 2,2 -o mon_image.txt
gmic mon_image.jpg -unsharp_octave 2,2 -o mon_image.dlm

3.5-Entrée/sortie standard

Vous pouvez aussi lire à partir de l’entrée standard ou écrire sur la sortie standard. Les deux commandes ci-dessous sont identiques. Elle demandent à G’mic de lire l’entrée standard au format texte:

echo -e "1 2 3\n4 5 6" | gmic -.txt
echo -e "1 2 3\n4 5 6" | gmic txt:-

Les deux commandes ci-dessous écrivent sur la sortie standard au format texte:

gmic image.jpg -o -.txt
gmic image.jpg -o txt:-
  1. Le format texte représente plusieurs intérêts :
    Possibilité d’édition sans logiciel dédié en effet mais ça peut être adapté également pour versionner des images que l’on retouche par exemple.
    Les système de gestion de versions sont très mauvais sur des fichiers binaires : c’est très lourd à l’usage car il sauvegarde chaque nouveau fichier plutôt que copier les différences souvent minimes.
    On peut également accéder directement aux méta-données (type exif) et surtout à des données cachés tel que des tatouages numériques.
    Un beau projet en python pour “découper” les fichiers binaires et y voir un peu plus clair : hachoir.
    https://bitbucket.org/haypo/hachoir/wiki/Home
    Dommage que son développement est ralenti depuis quelques temps.

  1. No trackbacks yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: