img-outils

dernière mise à jour: 4 février 2010
# et #

Au départ, c'était juste quelques programmes de démonstration pour ma libimage, mais maintenant, c'est arrivé à un stade où ça devient utilisable. Et comme un miracle n'arrive jamais seul, voici la documentation, un peu légère, il faut l'avouer...
Bien que ce pdf soit une réelle avancée dans le monde spongieux de la documentation. Par contre, la doc de la bibliothèque est plus consistante, elle.

Current Tarball is here -> img-outils.tar.gz <-

Quelques remarques :

Il est possible de 'faire causer' ces outils en positionnant la variable d'environnement TGA_OUTILS_VERBOSE à yes. En particulier, la ligne de commande sera explicité sur stderr, ce qui est parfois utile dans les scripts ou les Makefiles complexes et/ou àlc.

A partir de mi-février 2008, les paramètres de type 'entier' peuvent éventuellement être donnés en notation décimale, octale ou hexa-décimale. La mise en oeuvre de ce nouveau truc a entrainé l'apparition de nombreux nouveaux messages de trace, qui vont bientôt disparaitre.

tga_showdiff

tga_showdiff iA.tga iB.tga mode dst.tga [params]

Mise en évidence des différences entre deux images de même dimension. A l'heure actuelle, les modes disponibles sont: 0, 1, 2 et 3.
Voir ici pour (un peu) plus de détails. Parce que, bon, c'est assez difficile à expliquer, mais je vais essayer.

modecalculs
0Pour chacune des composantes, on calcule dC = ( (s1C - s2C)/2 ) + 127.
1Pour chaque composante, si celle de la première image est supérieure à celle de la seconde image, la composante du résultat est à 255, sinon, elle est à 0.
2Pour chacune des composantes, le calcul est: dC = (C1*C1 - C2*C2)/256, ce qui semble empirique, mais donne de bons résultats.
3On calcule d'abord la valeur absolue de la difference de chaque composante des deux images: dC = abs(C1-C2), puis on binarise en fonction du seuil passé en paramètre sur la ligne de commande.

tga_2x2contrast

Mise en évidence des zones à fort contraste. Le reste de l'image deviendra pratiquement noir. La méthode utilisée est ésotérique, moi-même, j'ai du mal à la comprendre.

tga_tools

(9 oct 2009) C'est un outil assez ancien, et qui propose de faire un cetain nombre d'opérations. Au départ, il a servi de base pour certains tests unitaires, pour se révéler ensuite prêt pour le prime time. Je me suis donc décidé à écrire la doc.

Pour avoir une première idée des choses disponibles, la commande tga_tools sans arguments est un bon début.

lecture des dimensions

Cette partie du logiciel est faite de façon à pouvoir lire les trucs depuis stderr et récupérer les informations pertinentes sur stdout, ce qui est très shellistique. Exemple :

[plop] $ foo=$(./tga_tools getdims laPoncha.tga)
lecture header 'laPoncha.tga' -> 0
laPoncha.tga --> 520 x 325
[plop] $ printf "=%s=\n" $foo
=520=
=325=
[plop] $ printf "=%s=\n" "$foo"
=     520      325=
[plop] $
mot clefrésultatexplications
getdims515 443 pour les scripts shell
getdimx515x443 option -geometry de X11
getdimpov-w515 -h443 pour la ligne de commande de POVRAY

actions sur les images

mot clefrésultatexplications
headerplein de chiffres Affichage en +/- clair du contenu de l'entête d'un fichier Targa
prhisto
174       2      46      48
175       4       2       3
176       2      67      79
Quelques chiffres abscons machinables avec Awk

informations diverses

mot clefrésultatexplications
versiondes trucs...quelques informations sur les versions et dates de compilation des outils et de la libimage
structsbasic types : short=2 int=4 long=4 ptr=4 Tests de boutisme, de sizeof des types de base et des structures de la libimage.
environ 1 TGA_OUTILS_VERBOSE (null) Affichage de quelques variable d'environemment pertinentes.

tga_applymap

tga_applymap M src.tga color.map dst.tga
M est le mode:

Vous trouverez peut-être quelques détails dans cette page. Les fonctions concernées sont Image_apply_Map et Image_gray_Map.

tga_cadre

Syntaxe: tga_cadre TYPE <src.tga> <dst.tga> [p1] ... [pn]

Pour les différents types de cadres disponibles, il faut utsl, ou tenter de taper tga_cadre list, ce qui vous donne un truc dans ce genre:

  commande  | type arg |  et ça fait quoi ?
------------+----------+----------------------
 A          |          |  use 'filet' instead
 filet      |          |  un simple filet noir & blanc
 B          | i        |  use 'cracra' instead
 cracra     | i        |  un machin bizarre, un peu cracra
 sweep      | iiii     |  dégradé: rouge vert bleu taille
 D          | iiii     |  use 'bruit' instead
 bruit      | iiii     |  du bruit: r g b taille
 E          | iiii     |  cadre 'blablanux': 4 paramètres
 blablanux  | iiii     |  cadre 'blablanux': 4 paramètres
 f          | ii       |  un simple filet en gris, 2 params
 filetg     | ii       |  un simple filet en gris, 2 params
 pattern    | si       |  cadre pattern
 patt_degr  | si       |  pattern dégradé
 patt_rand  | si       |  pattern random
 burp0      | iii      |  cadre burp 0
 burp1      | ii       |  cadre burp 1
 burp3      | iiii     |  dimension,  R, G, B
 pixx       | ii       |  pixx!
 wave0      | iiiii    |  des vagues en chantier
------------+----------+----------------------

Une page de démonstration vaut mieux qu'un long discours. Il ne reste plus qu'à la faire. Qui s'en occupe ? Bon, il va falloir que je m'y colle... Voilà, c'est fait.

tga_extract

tga_extract source.tga resultat.tga X Y W H
Extraction d'une partie de l'image. Comportement non (encore) défini si il y a débordement :)
coredump in progress...

tga_plothisto

tga_plothisto image.tga histo.tga [texte]
Dessine l'histogramme des 3 composantes r, g & b d'une image. Si le paramètre texte existe, il sera écrit dans l'image. Sinon il y aura le nom de l'image source. Pour plus de détails voir libimage#plotteurs.

tga_mires

Cet outil permet de tracer quelques images de test, et les fontes 16x24. Ce truc est encore en chantier, parfois il ne fait pas ce qu'on attend. La syntaxe générale est tga_mires type dest.tga p1 p2 p2 .., avec un nombre variable (selon le type) de paramètres optionnels.

mircol0 dimensions : 512x512
paramètres : "un texte libre"
mircol1 dimensions : 512x512
paramètres : "un texte libre"
mircol2 Une chose étrange destinée à un projet secret.
paramètres : largeur hauteur "un texte libre"
mircol3 Nous essayons d'avoir trois teintes différentes dans trois zones de l'image. Avec le paramêtre mode, la position des couleurs tourne.
paramêtres : largeur hauteur mode "un texte libre"
rgb0 dimensions : 256x256

Avec un peu de chance, la description des primitives de cette documentation est plus avancée, en particulier sur les divers paramètres auquels vous n'avez pas accès par cette interface simplifiée. Gniark gniark.

tga_plotmap

tga_plotmap colors.map graphe.tga [texte]
Si le paramètre texte existe, il sera écrit dans l'image, et sinon, ce sera le nom du fichier .MAP
Voir les fonctions plotteurs.

tga_remap

tga_remap MODE source.tga colors.map destination.tga
Là, il manque quelques explications. utsl. Il faut juste ajouter ceci:

  1. c'est vraiment très lent.
  2. certains MODE sont buggués.
  3. il faudrait que je trouve d'autres méthodes.

tga_equalize

tga_equalize avant.tga mode apres.tga
Egalisation des niveaux. A essayer...

tga_pattern

Fabrication de divers patterns, pas toujours très beau, mon sens artistique étant limité... Désolé, je ferais mieux l'année prochaine.

tga_resize

Il existe quatre commandes différentes, certaines d'entre elles pouvant utiliser plusieurs méthodes:

half paramètre: 0 subsample ou 1 interpole
double paramètre: 0 subsample ou 1 interpole
percent
newsize

fev 2008 Dans le temps (au siècle dernier, en fait), il existait une commande tga_halfsize qui a disparue. Afin de faire marcher un très vieux truc, je viens de la réimplémenter sous la forme d'un script shell.

tga_fractales

Ce petit truc est en fait à l'abandon depuis plusieurs années. Je l'ai hacké à la va-vite quand j'en ai eu besoin, mais je vais y jeter un regard plus attentif parce que mon fils Nicolas s'interesse aux fractales. Vous pouvez aussi aller lire ce petit blabla.

tga_combine

La ligne de commande est: tga_combine s1.tga s2.tga MODE d.tga [PARAMS]. Voyons les différents mode de combination:

  commande  | type arg |  explication
------------+----------+----------------------
 mixer      | i        |  no help
 mix_gray   | i        |  param: 1..10000
 mix_rgb    | iii      |  params: 3*1..10000
 seuils     | iiii     |  
 lines      | iii      |  taille offset 0
 columns    | iii      |  taille offset 0
 checker    | iiiii    |  no help
 random     | i        |  param: 1..100
 diago      | fii      |  no help
 diagonale  | fii      |  no help
 minmax     | i        |  0:min 1:max
 waou       | iiii     |  no help
 wauo       | i        |  must be 0
 circle0    | i        |  must be 0
 hdeg       | f        |  0 or 1
 vdeg       | f        |  0 or 1
 ifnotblack |          |  new mars 2007
 stereo     |          |  rouge/vert
 stereok    | iii      |  rouge/vert/coefs

Pour plus d'explications, lire la doc des primitives. Il y a un petit cas pratique sur les images en relief.

tga_effects

Ce programme remplace tga_water, tga_2gray et tga_swapcolors.

 4bits      |          |  and 0xf0
 class0     |          |  experimental
 decomp     | f        |  flag: print colors
 flatgray   | i        |  detect flat gray zones
 gray       | f        |  
 grayk      | iii      |  3 coefs
 mirror     |          |  
 mosaic0    |          |  ?
 photomaton |          |  
 negate     |          |  
 seuil      | iii      |  rgb thresholds
 noise      | i        |  0..100
 pixelX     |          |  prototype
 pixelY     |          |  prototype
 recurse    | i        |  EXPERIMENTAL !
 rgbmskh    | i        |  'par' is a gray level
 rgbmskv    | i        |  'par' is a gray level
 rot4pix    | i        |  ???
 cont2x2    |          |  detection de contours, automatique.
 scratch    | i        |  coredumper :)
 sinwave1   | dddddd   |  strange effect
 swapcol    | s        |  rg rb bg
 updown     |          |  upside down
 water      | i        |  'par' is water distance
 x0         | iii      |  3 thresholds for r, g, b
 x1         |          |  xor other componant
 x2         | iii      |  trigonometry
 x3         | iis      |  
 x4         | iis      |  essai Avr 2007
 x5         | iii      |  essai Avr 2007

La ligne de commande tga_effects list affiche une liste des effets disponibles.

tga_export

Conversion d'une image TGA (à priori en 24 bits) vers divers formats. Cet utilitaire est pour le moment assez pauvre en possibilités, mais riche en limitations. Et surtout plein de bugs...

Pour plus de détails, consultez la doc des différents formats de fichiers gérés par la libimage. Et en particulier, les difficultés que nous cause le Grand Satan :)

genplot2

Ce truc permet de fabriquer une image TGA à partir d'ordres de tracés simples. Les dimensions de l'image sont déterminées par un parsing du fichier de commande, et vous avez quelques chances d'appeler le tristement célèbre OOM-killer si votre image est démesurée.

encore quelques trucs...

Pour connaitre la liste des effets/options disponibles: tga_effects list. Tout cela ne semble pas très clair, mais avec un peu de pratique, ça vient vite. Voici quelques séquences de commandes qui vont vous permettre de démarrer sans patauger.

Image grise avec les contours mis en valeur.

$ tga_2x2contrast SRC.TGA toto.tga
$ tga_effects SRC.TGA gray tutu.tga
$ tga_combine tutu.tga toto.tga mixer DST.tga 4000

D'ailleurs, donner en seul argument le mot 'list' à tous les tga_* permet d'obtenir (en général) la liste des mots-clef utilisables.


POV height-fields

Bon, je ne vais pas ré-expliquer ce qu'est un champ d'altitude, j'ai bien trop peur de dire des bétises.