dernière mise à jour: 09 septembre 2015
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... Pour compenser, 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 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.
mode | calculs |
---|---|
0 | Pour chacune des composantes, on calcule dC = ( (s1C - s2C)/2 ) + 127. |
1 | Pour 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. |
2 | Pour chacune des composantes, le calcul est: dC = (C1*C1 - C2*C2)/256, ce qui semble empirique, mais donne de bons résultats. |
3 | On 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. |
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.
(9 oct 2009) C'est un outil assez ancien, et qui se propose de faire un certain 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.
Pour avoir une première idée des choses disponibles, la commande tga_tools sans arguments est un bon début.
Cette partie du logiciel est faite de façon à pouvoir lire des trucs futiles émis dans stderr et récupérer les informations pertinentes sur stdout, ce qui est très shellistique. Exemple :
tth@gaston:/opt/gruik$ foo=$(./tga_tools getdims laPoncha.tga) lecture header 'laPoncha.tga' -> 0 laPoncha.tga --> 520 x 325 tth@gaston:/opt/gruik$ printf "=%s=\n" $foo =520= =325= tth@gaston:/opt/gruik$ printf "=%s=\n" "$foo" = 520 325= tth@gaston:/opt/gruik$
Plusieurs présentations de ces valeurs sont disponibles, et d'autres vont peut-être arriver un de ces jours.
mot clef | résultat | explications |
---|---|---|
getdims | 515 443 | pour les scripts shell, deux nombres séparés par un space. |
getdimx | 515x443 | option -geometry de X11 |
getdimpov | -w515 -h443 | pour la ligne de commande de POVRAY |
getdimweb | width=550 height=380 | pour le tag IMG des pages HTML |
mot clef | résultat | explications |
---|---|---|
header | plein 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 |
mot clef | résultat | explications |
---|---|---|
version | des trucs... | quelques informations sur les versions et dates de compilation des outils et de la libimage |
structs | basic 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 | TGA_OUTILS_VERBOSE (null) LIBIMAGE_PATH /opt/tthimg/datas |
Affichage de quelques variable d'environnement pertinentes. |
Les fonctions sous-jacentes n'étant pas vraiment stabilisées, cette partie de la doc est à prendre avec des pincettes.
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.
Syntaxe: tga_cadre <src.tga> STYLE <dst.tga> [p1] ... [pn]
Pour connaitre les différents types de cadres disponibles, il faut utsl, ou tenter de taper tga_cadre list, ce qui vous donnera quelques explications de base.
commande | type arg | explication |
---|---|---|
filet | un simple filet noir & blanc | |
cracra | i | un machin bizarre, un peu cracra |
sweep | iiii | dégradé: rouge, vert, bleu, et taille |
bruit | iiii | du bruit : rouge vert bleu taille | blablanux | iiii | 4 paramètres |
filetg | ii | un simple filet en gris, 2 params |
pattern | si | cadre pattern |
patt_degr | si | pattern degrade |
patt_rand | si | pattern random |
burp0 | iii | cadre burp 0 |
burp1 | ii | cadre burp 1 |
burp2 | iiii | inversion composantes |
burp3 | en chantier... | |
soft1 | en chantier aussi | |
pixx | ii | pixx me ! |
rasta0 | i | largeur des bandes |
wave0 | iiiii | des vagues en chantier |
zsnd0 | iii | cadre zongo sound |
zsnd1 | iii | cadre zongo sound |
b84a | iii | cadre de la base 84 |
b84b | ii | cadre de la base 84 |
b84c | iii | non cadre base 84 |
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. Mais ça commence à devenir *vieux*.
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...
Maintenant que nous savons extraire un fragment d'une image, il est temps de savoir le coller dans une autre image. Bizarrement, c'est un outil dont je n'ai jamais vraiment éprouvé le besoin avant de faire des GIFs animées. Et je suis encore en train de réfléchir sur la syntaxe de la ligne de commande, qui devrait être dans ce genre :
tga_incrust from.tga what.tga KEYWORD to.tga params
keyword | type arg | explication |
---|
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 la doc des plotteurs.
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" |
mircol4 | Nous essayons encore d'avoir trois teintes différentes, mais d'une
autre manière. 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 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 MODE source.tga colors.map destination.tga
Là, il manque quelques explications.
utsl.
Il faut juste ajouter ceci:
tga_equalize avant.tga mode apres.tga [params]
Égalisation des niveaux, ajustement des contrastes. Le script essai_equal.sh vous permettra de tous les essayer sur vos propres clichés, en obtenant ce genre de chose.
commande | type arg | explication |
---|---|---|
std | standard method | |
rgb | same as 'std' | |
gray | gray based | |
2x2 | 2x2 matrix | |
lumin | i | param : identity is 256 |
square | pix**2 | |
sqroot | sqr(pix) |
Réduction du nombre de couleurs dans une image, par des méthodes diverses, empiriques et variées. Il est bon de voir quelques exemples pour mieux comprendre.
* tga_dither v 0.0.20 [0.51] (dwtfywl) tonton Th usage: tga_dither avant.tga mode avant.tga [params] commande | type arg | explication ------------+----------+-------------------------------- 2x2 | | not working 3x3_0 | | 3x3_1 | | bayer0 | | atkinson | i | mmmm ? crude | i | dbltresh | ii | hi & low tresholds error | | simple err diffusion random | i | random treshold byr8rnd | ii | new 29 nov 2013 xper | i | param: 1..254 ------------+----------+--------------------------------
Fabrication de divers patterns, pas toujours très beau, mon sens artistique étant limité... Désolé, je ferais mieux l'année prochaine.
Syntaxe: tga_resize source.tga methode resultat.tga [params]. Il existe quatre commandes différentes, certaines d'entre elles pouvant utiliser plusieurs méthodes:
opcode | paramètres |
---|---|
half | 0=subsample ou 1=interpole |
double | 0=subsample ou 1=interpole |
percent | |
newsize | newW newH method |
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.
Quelques opération liées au canal alpha, communément utilisé pour stocker une information de transparence, que l'on peut utiliser pour gérer les incrustations.
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. Ou regarder ce que l'on peut en "faire.
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 | iii | P in [0..255] |
lines | iii | taille offset 0 |
columns | iii | taille offset 0 |
checker | iiiii | no help |
random | i | param: 1..10000 |
rndrgb | i | param: 1..10000 |
diago | fii | no help |
diagonale | fii | no help |
hsplit | ii | P in pixels |
vsplit | ii | P in pixels |
minmax | i | 0:min 1:max |
waou | iiii | ubyte ubyte ubyte bit |
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 |
proto | prototype |
Pour plus d'explications, lire la doc des primitives. Il y a un petit cas pratique sur les images en relief. On peut aussi incruster des images.
Ce programme remplace les anciens tga_water, tga_2gray et tga_swapcolors.
La ligne de commande tga_effect list donne la liste des possibilités :
commande | type arg | explication |
---|---|---|
4bits | and 0xf0 | |
class0 | experimental | |
decomp | f | flag: print colors |
flatgray | i | detect flat gray zones |
gray | coefs RGB : 100 100 100 | |
grayk | iii | 3 coefs à fournir |
mirror | ||
mosaic | ? | |
mosaic0 | iif | ? |
photomaton | ||
negate | ||
seuil | iii | rgb thresholds |
noise | i | 0..100 |
pixelX | prototype | |
pixelY | prototype | |
efive | got it, code it | |
recurse | i | EXPERIMENTAL ! |
rgbmskh | i | 'par' is a gray level |
rgbmskv | i | 'par' is a gray level |
bicolor0 | i | grosse fatigue... |
bicolor1 | ii | grosse fatigue... |
rot4pix | i | ??? |
cont2x2 | contours 2x2 en auto | |
cont2x2g | contours 2x2 sur le gris | |
scratch | i | coredumper :) |
sinwave1 | dddddd | strange effect |
swapcol | s | rg rb bg |
swapnibble | swap all pix nibbles | |
updown | upside down | |
shift_xy | ii | les deux offsets |
water | i | 'par' is water distance |
fukung | i | OMG ! WTF ? |
class1 | iiii | R G B diameter |
x0 | iii | 3 thresholds for r, g, b |
x1 | xor other componant | |
x2 | iii | trigonometry |
x3 | iis | |
x4 | i | essai Aug 2008 |
x5 | iii | essai Sept 2008 |
Certains des effets disponibles ne fonctionnent pas très bien; mais d'autres ne sont pas si mal, en fait. Et de nouveaux arriveront dans le futur.
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. La syntaxe est : tga_export src.tga format dest.xxx [params].
format | params | explications |
---|---|---|
pgm0 | component | exportation vers le format PGM d'une des composantes de l'image, sélectionnée par une des lettres rgba. |
ppm0 | exportation de l'image en Portable PixMap, en mode ascii. | |
pht | component | exportation vers le format PHT d'une des composantes de l'image, sélectionnée par une des lettres rgba. Ce format inconnu est décrit ici. |
Ici, quelques formats dont le code ne fonctionne pas très bien... | ||
pgmhf | Un truc en rapport avec les height-fields... |
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 :)
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.
Quand on le lance, il va lire dans le répertoire courant un fichier texte nommé a.scratch contenant trois champs séparés par des <blanks> : X.xxx Y.yyy N, c'est à dire deux coordonnées suivies d'un code couleur. À partir de ces valeurs, il va faire une mise à l'échelle des coordonnées afin que tout cela tienne dans une image de dimensions fixés (utsl) par dddd. Le nom du fichier produit est image.tga.
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.
Par contre, dans la catégorie bug, veuillez noter dans vos carnets que les codes d'erreurs retournés au shell appelant sont vraiment cahotiques.
Bon, je ne vais pas ré-expliquer ce qu'est un champ d'altitude, j'ai bien trop peur de dire des bétises. De mon point de vue actuel, c'est juste un tableau [x,y] contenant des valeurs entières non signées codées sur 15 bits, donc comprise entre 0 et 32767.
La forme générale d'une commande est simple : povhf_tools src.??? commande [arguments], avec src.??? qui est le nom du fichier sur lequel nous allons opérer, "commande" le nom de l'opération demandée, le tout suivi de divers arguments.
commande | arguments | action |
---|---|---|
minmax | aucun | Calcul et affichage des hauteurs minimum et maximum du hf. |
rescale | hmax | Réglage de la hauteur maximale, le résultat de l'opération écrase l'image d'origine, ce qui n'est pas forcément une bonne idée. |
lissage | dst.tga coef | Lissage du heigh-field. coef détermine l'intensité de l'action, mais son effet n'est pas vraiment documenté. |
sqrt | dst.tga | Calcul de la racine carré de la hauteur, après normalisation à 1.0 pour rester dans des limites raisonnables. |
pow | dst.tga expst | Exponentiation de l'altitude par l'exposant. Avec une normalisation à 1.0 qui n'est peut-être pas au point. |
sweep0 | coef | Cette fonction est complètement cassée... |
bruit | dst.tga k1 k1 | Rajout de bruit à un height-field. Les coefficients k1 et k2 ont une influence certaine. |
fromtga | dst.tga | Conversion d'une image RGB en un height-field par une savante combinaison linéaire des trois composantes de l'image d'origine. |
topgm | dst.pgm | Conversion d'un heigh-field encodé dans une TGA en une image avec 32768 niveaux de gris dans un format "portable pixmap", ce qui engendre des fichiers volumineux. |
truc | indéterminés $ povhf_tools list |
Cette commande est le point d'entrée de la nouvelle fonction en cours de mise au point. Le nombre et la nature des paramètres peut donc changer au fil du temps. ymmv. |
Tout cela est en cours de mise au point, les ordres et valeurs à donner sur la cli ne sont pas vraiment déterminées, mais l'idée est en place. Dans le tarball, il y a un script essai_povhf.sh qui déroule une suite de tests, dont l'interprétation des résultats est laissée aux bons soins du lecteur.
Ce logiciel rudimentaire prend comme arguments le nom d'un fichier contenant un HF au format TGA, puis le nom d'un fichier TGA qui contiendra (peut-être) un tracé (probablement) erroné de l'histogramme des altitudes.
Mmmpfpfpfpffeeemmmmff.
Mmmpfpfpfpffeeemmmmff.
Bon, maintenant, il faut faire tourner tous ces toolz dans une U5 sous OpenBSD.
De grands progrès sont à prévoir. Il existe une page de démonstration.