INRIMAGE (1I)     version 4.6.8     December 2017

Prog Intro    Liste des commandes    Liste des manuels    Généralités
Table of Contents


NAME

inrimage - introduction aux commandes d'inrimage

GÉNÉRALITÉS

Les modules proposés permettent notamment : la génération d'images simples, la conversion d'un type de codage dans un autre, les opérations arithmétiques et logiques, les FFT réelle et complexe, des convolutions, l'égalisation d'histogramme, les extractions et mélanges de sous-images, le seuillage, l'affinage, le suivi de contours.

En dehors de 2 ou 3 commandes purement interactives, toutes les commandes Inrimage admettent 2 types d'arguments : des options (mots-clés précédés du caractère - et suivis de 0, 1 ou 2 paramètres), et des noms de fichiers images d'entrée ou de sortie.
L'ordre des arguments est indifférent. En contrepartie, on ne peut grouper les options (-x -y n'est pas équivalent à -xy), et les noms d'image ne doivent pas commencer par un chiffre (en cas de besoin on fera précéder le nom par ./, par exemple ./3d-image).

La plupart des commandes peuvent lire leurs données sur stdin et écrire sur stdout, et sont donc utilisables en filtre, dans un pipe. Par exemple :
so im1 im2 | ical pour vérifier l'égalité de 2 images.
sc im1 -n 2. | bi -n 1. >im2 pour faire im2=2*im1+1.

DÉFINITION D'UNE IMAGE

Une image est une structure de données organisée en un certain nombre de plans ayant tous le même nombre de lignes de longueur identique. Les lignes sont composées d'éléments appelés pixels qui sont des vecteurs de dimensions égales (un la plupart du temps). Toutes les valeurs (composantes de chaque pixel) sont codées de la même façon (par exemple en flottant, ou en virgule fixe sur 8 bits).
Les composantes des pixels sont consécutives. Les pixels sont rangés par lignes, et les lignes d'un même plan sont consécutives.
Le maillage peut être carré ou hexagonal (en pratique, aucun programme ne tient compte du type de maillage).
L'origine correspond au premier point de l'image, qui est repéré par les indices x=1, y=1, z=1. Cette origine peut être affectée d'une translation (rarement utilisée dans les programme).

Le codage des valeurs peut être de type flottant, virgule fixe signée ou virgule fixe non signée. En virgule fixe, toutes les données sont représentée sur le même nombre de bits (qui peut aller de 1 à 32) et ont le même exposant.

Un fichier image se compose d'un en-tête immédiatement suivi des données rangées comme décrit plus haut. : la composante v du pixel x de la ligne y du plan z occupe la position
(z-1)*(ndimv*ndimx*ndimy)+(y-1)*(ndimv*ndimx)+(x-1)*ndimv+(v-1)
Dans le fichier (mais pas dans les données transférées en mémoire) les lignes occupent toujours un nombre entier d'octets.

L'en-tête, dont la taille peut varier, mais reste multiple de 256 octets, contient diverses informations qui caractérisent l'image. En particulier, son format (dimensions, codage, maillage, origine) y figure toujours. Normalement on y trouve aussi l'histoire de l'image (c'est-à-dire la liste des dernières commandes qui l'ont modifiée). Ces informations sont inscrites automatiquement par les programmes d'accès aux fichiers image.
On peut ajouter dans l'en-tête un certain nombre d'autres indications, sous forme de texte ascii. Par exemple, certains programmes associent de cette façon des tables couleur à une image.

TYPES DE FICHIERS

Inrimage accepte plusieurs formats d'en-tête pour les fichiers images. Ces formats sont définis par les mots-clés suivants (la première lettre doit être en majuscule) :

Old :
ancien format (version antérieure à Juillet 1988).
Inr3 :
format Inrimage version 3. Format identique au précédent, dans lequel on a ajouté des paramètres supplémentaires ("magic number", type de flottant...).
Inrimage :
nouveau format, dans lequel l'en-tête est entièrement codé en ascii, et de taille variable (taille multiple de 256 octets, fixée à la création du fichier).
Visilog :
format compatible avec celui du logiciel Visilog de Noesis.

Les 4 formats sont acceptés en entrée, mais aucune image n'est créée avec le format Old (le format Inr3 est accepté par les anciens programmes).
Dans tous les cas, sauf Old, la taille de l'en-tête peut être choisie lors de la création de chaque fichier (en multiples de 256 octets). La fin de l'en-tête (à partir du 129e octet pour les formats Old et Inr3, et à partir du 77e octet pour le format Visilog) est utilisée pour ranger des informations ascii, exactement de la même façon que dans le format Inrimage.
L'historique des commandes qui ont modifié une image peut être inscrit dans son en-tête.

Il est possible de choisir le type de fichier, la taille de l'en-tête et la quantité d'éléments d'"histoire". Chaque paramètre est calculé en appliquant, dans l'ordre, et jusqu'à obtention d'une valeur, les règles suivantes:

1.
Le fichier de contrôle "$HOME/.inrimage/Inrimage4.conf" ou "/usr/local/inrimage/etc/Inrimage4.conf", s'il existe, soit impose la valeur du paramètre, soit donne sa valeur par défaut.
2.
Si l'option correspondante (au sens commande Unix) est donnée avec une valeur acceptable, le paramètre est défini.
3.
S'il existe la variable d'environnement correspondante, avec une valeur correcte, le paramètre est défini.
4.
Le paramètre prend la valeur par défaut (donnée par les programmes Inrimage en l'absence de fichier de "contrôle").

Il n'y a pas d'option pour l'historique mais une variable d'environnement IMAGE_HIST qui définit le nombre maximum des événements les plus récents à répertorier.

Les mots-clés de format, et les noms des variables d'environnement sont définis dans "inrlocal.h".

FICHIERS NON INRIMAGE

À partir de la version 4.4 de la bibliothèque libinrimage.a, il est possible de lire des fichiers Inrimage compressés ou des fichiers d'un autre format (GIF ou TIFF par exemple). Avant d'ouvrir un fichier en lecture (par exemple avec image_), on regarde si une conversion est nécessaire. Si tel est le cas, on lance la commande appropriée (par exemple zcat pour une image compressée), et les fonctions Inrimage récupèrent les données dans un pipe.
L'efficacité de la version GNU de zcat rend la lecture des images compressées peu pénalisante.
La décision de conversion est prise à partir de la terminaison du nom de fichier et, dans certains cas, après vérification de la présence d'une information de type "magic number".
La table de conversion comprend une partie fixe, définie dans le code source, et une partie construite à l'exécution à partir d'un fichier. Ce fichier est donné par $INR_EXTFILE, ou $HOME/.inrimage/inr_extfile, ou $INR_HOME/etc/inr_extfile, ou /usr/local/inrimage/etc/inr_extfile.
Chaque entrée dans ce fichier comprend une liste de terminaisons, éventuellement des magic numbers, le nom de la commande à exécuter suivi de 0 à 8 arguments. On peut y trouver aussi un chemin préféré pour la commande. Si le chemin préféré n'existe pas, on cherche dans les répertoires
La table interne contient des entrées pour les fichiers compressés (terminaisons .Z ou .gz, avec magic number; commande zcat, chemin préféré /usr/local/bin/zcat) et pour les images GIF (terminaison .gif , avec magic number; commande gif2inr).

Les conversions définies dans le fichier utilisateur sont prises en compte avant les conversions internes. Une ligne commençant par # est un commentaire. Chaque autre ligne se compose de 3 ou 4 parties séparées par le caractère ':'.
1e partie : liste des terminaisons séparées par des ','.
2e partie : liste des magic numbers séparés par des ','. Un magic number comporte plusieurs nombres séparés par des espaces. Le premier nombre (décimal) est un offset dans le fichier, les autres sont les valeurs en hexadécimal des octets magiques.
3e partie : nom de la commande, suivi éventuellement d'arguments (maximum 8).
4e partie (optionnelle) : chemin préféré pour la commande.

Exemple :
.gz, .Z : 0 1f 8b, 0 1f 9d:zcat: /usr/local/bin/zcat
.jpg, -jpg: :djpeg -inr8 -dither none

VARIABLES D'ENVIRONNEMENT

INR_HOME
Le répertoire d'installation de Inrimage (/usr/local/inrimage par défaut).

IMAGE_OUT
type d'en-tête (voir option -F=).

IMAGE_HDRL
taille d'en-tête (voir option -hdr=).

IMAGE_HIST
nombre maximum d'événements du mécanisme history.

TEK_NOM
nom de fichier pour les sorties graphiques (par défaut /dev/tek qui correspond historiquement à la ligne asynchrone sur laquelle on branche une console Tektronix). Cette variable doit être initialisée, soit avec un nom de fichier, soit avec > (stdout), soit avec % (stdout, format PoscScript), soit avec un nom de pseudo-tty (/dev/ttyp1) correspondant à la fenêtre ouverte en mode Tektro.

INR_EXTFILE
adresse du fichier de définition des conversions pour les fichiers non Inrimage. Voir exemple dans $INR_HOME/etc/inr_extfile.

INR_KBMEM
taille en K octets de la mémoire utilisée dans la plupart des commandes Inrimage pour les tableaux. Cette valeur n'est utilisée qu'en l'absence de l'option -k.

OPTIONS GLOBALES :

Ces options sont communes à toutes les commandes.

-vers
fait imprimer sur stderr le nom de la commande, sa version (si elle est définie), et la version de Inrimage avec laquelle elle a été fabriquée.
-k nn
indique la taille de mémoire en kilo octets allouée à la commande pour certains tableaux de travail (voir imexec(3i) . Par défaut cette taille est donnée par la variable d'environnement INR_KBMEM, sinon par une valeur définie dans la fonction kdopts_() (voir igetopt(3i) ).

-D
indique qu'on passe en mode debug, avec une trace sur stderr.

-F=file-type
donne le type d'en-tête pour les images créées par la commande. Si cette option est absente, le type sera donné par la variable d'environnement IMAGE_OUT (Inrimage par défaut). Le fichier de contrôle ($HOME/.inrimage/Inrimage4.conf ou /usr/local/inrimage/etc/Inrimage4.conf) peut interdire certains formats. (voir détail ci-dessous).

-hdr=nn :
donne la taille de l'en-tête, en nombre de blocs de 256 octets, pour les images créées. En l'absence d'option, la taille est donnée par la variable d'environnement IMAGE_HDRL (par défaut 1 pour Inr3 et Visilog, 4 pour Inrimage). Cependant, le programme peut forcer une taille minimale (voir image(3i) ).
Dans le cas de Visilog, une taille de 0 crée un en-tête minimum de 76 octets.

-.ext
Force le type pour les images luss par la commande. Il faudra que la terminaison .ext soit présente dans le fichier d'extensions (/usr/local/inrimage/etc/inr_extfile par défaut).
-Help :
provoque, pour toutes les commandes, l'impression d'un bref message donnant la liste des arguments.

-help :
provoque, pour toutes les commandes, l'impression d'un message d'information décrivant succinctement les arguments. La commande se termine alors avec code 100.

-khoros n :
passage en mode KHOROS. Le paramètre n vaut O ou 1. Si n vaut 1, les images résultats seront préalablement détruites.
Dans ce mode les options doivent être données selon la syntaxe KHOROS.
Cette option est générée automatiquement lorsqu'on utilise Inrimage dans cantata.

Note : les options -F= et -hdr= peuvent être silencieusement ignorées selon le contenu du fichier de contrôle $HOME/.inrimage/inr_extfile ou /usr/local/inrimage/etc/Inrimage4.conf.

OPTIONS DE FORMAT

Options principales

Il s'agit là des options permettant de décrire le format d'une image. Elles sont utilisées chaque fois qu'il faut créer une image.

-x nn
nombre de pixels par ligne.
-y nn
nombre de lignes.
-z nn
nombre de plans.
-v nn
nombre de composantes en chaque point.
-r, -rtype-de-flottant
codage réel. type-de-flottant correspond au type de représentation binaire des nombres flottants. Il est associé à -r lors des impressions de format d'image, mais il est ignoré en tant qu'option par la plupart des commandes (le type imposé est celui de la machine hôte).
-f
codage en virgule fixe non packée.
-p
codage en virgule fixe packée.
-s
image signée.
-o nn
nombre d'octets pour le codage d'un pixel.
-b nn
nombre de bits pour le codage d'un pixel. Incompatible avec -o et avec -r.
-e nn
exposant entre -100 et +100.

Ces différentes options subissent une vérification de cohérence et ont des valeurs par défaut qui sont :

1 pour les dimensions x,y,z,v.

f pour le type.

non signée.

1 pour -o si le type est -f, 4 si le type est -r.

1 pour -b si le type est p.

0 pour l'exposant.

Ces valeurs par défaut peuvent être modifiées par la commande utilisée si celle-ci est en mesure de déterminer certains paramètres du format.

L'ordre de précédence est :

1.
valeurs déterminées par la commande.
2.
valeurs fixées explicitement par l'utilisateur.
3.
valeurs par défaut.

Les 3 codages possibles sont : réel, fixe et packé.
Seul le codage réel a une réalité hardware, c'est le codage flottant de la machine hôte. La plupart des algorithmes sont écrits avec ce codage et effectuent donc une conversion en flottant si nécessaire. La conversion du flottant dans le type de la machine hôte est fait automatiquement lors de la lecture, pour toutes les images qui connaissent leur type de flottant, c'est-à-dire celles qui ne sont pas au format Old.
Les types de flottant reconnus sont :

gould
flottant base 16.
pe
flottant base 16, différent du précédent pour les nombres négatifs.
sun
format IEEE, poids forts en tête (notamment sur systèmes Sun).
dec
format IEEE poids faibles en tête (notamment sur systèmes Dec)..

Les deux autres codages sont surtout utilisés pour le stockage.
Le codage fixe non packé (option -f) occupe un nombre entier d'octets. Si le nombre de bits n'est pas multiple de 8 (option -b), les bits significatifs sont cadrés à droite. à gauche.
Le codage fixe packé occupe exactement le nombre de bits indiqué. Dans le fichier (uniquement) chaque ligne est complétée pour occuper un nombre entier d'octets.
Ces deux derniers codages sont de type virgule fixe, avec un point binaire à gauche du premier bit significatif et donnent donc des valeurs sur l'intervalle [0.,1.] (si l'exposant est nul).
L'exposant ne s'applique qu'aux codages virgule fixe, et indique la puissance de 2 à utiliser en constante multiplicative sur chaque pixel.
La notion d'image signée ne s'applique elle aussi qu'a ces deux codages et indique que les valeurs sont en complément à 2 (le premier bit significatif détermine le signe). L'intervalle est alors [-1,+1] .

options complémentaires de format

Elles permettent de définir des paramètres qui peuvent être utiles dans certains cas, mais ne sont pas toujours pris en compte par les programmes.

-x0 nn
décalage en X du premier pixel de l'image.
-y0 nn
décalage en Y.
-z0 nn
décalage en Z.
-m=maille
type de maillage h pour maille hexagonale, r pour maille rectangulaire.
-imbi nn
biais (en flottant), c'est-à-dire constante à rajouter à chaque pixel (ne concerne pas les images en flottant).
-imsc nn
facteur d'échelle (en flottant), c'est-à-dire constante par laquelle il faut multiplier chaque pixel (ne concerne pas les images en flottant). Si ce paramètre est non nul, l'exposant (défini ci-dessus) est forcément 1. L'exposant est considéré comme un cas particulier du facteur d'échelle.

La plupart des commandes non interactives peuvent être utilisées en filtre, elles lisent une image sur le standard input et produisent éventuellement une image sur le standard output.
Par ailleurs, lorsque la commande produit une image sur le standard output, cette image n'ayant pas d'existence physique, il faudra toujours fournir les options de format ne pouvant être déterminées par la commande.

Dans la description des commandes, les paramètres entre [ ] peuvent être omis, les paramètres en lettres grasses sont des mots clefs, les paramètres en italiques sont des noms génériques.
L'ordre des paramètres d'une commande est indifférent.

UTILISATION AVEC KHOROS

KHOROS est un logiciel de traitement d'images développé par l'Université de New Mexico. La plupart des commandes Inrimage sont utilisables avec l'interface graphique de cantata.
La commande (shell script) khinr permet de lancer cantata avec l'extension Inrimage. Cette extension consiste en un certain nombre de menus supplémentaires, dont le nom commence par INR.
Les fichiers de description de l'interface graphique de ces commandes sont dans le répertoire Khoros/repos. Ils ont été générés automatiquement à partir de l'option -Help des commandes, à l'aide d'un ensemble de scripts perl que l'on trouvera dans Khoros/scripts.
Le fichier de HELP de chaque commande est fabriqué à partir du manuel, dans le répertoire man/kh_man1.
L'interface graphique de toutes les commandes susceptibles d'écrire dans une image comporte un bouton overwriting qui doit être mis On si on veut que le programme ré-initialise les images existantes.

CARACTÈRES PARTICULIERS DE LA version 4.6.8 4

BUGS

L'ordre des options étant indifférent, tous les arguments commençant par un chiffre sont considérés comme des nombres (associés à une option). Les noms de fichiers commençant par un chiffre ne sont donc pas pris en compte. On peut facilement tourner la difficulté en préfixant ces noms par "./". Par exemple :
raz ./3Dimage -x 32 -y 32 -z 4

SEE ALSO

Intro(3i)
par(1i) , ifmt(1i)