Band Interleaved by Line (BIL),Band Interleaved by Pixel (BIP) et Band Sequential (BSQ) sont trois méthodes utilisées couramment pour l’organisation des données d’images multicanaux. BIL, BIP et BSQ ne sont pas à proprement parler des formats d’image, mais plutôt des structures utilisées pour stocker les valeurs de pixel réelles d’une image dans un fichier. Ces fichiers prennent en charge l’affichage d’images monocanal et multicanaux. Ils gèrent, en outre, les données d’image en couleurs vraies, multispectrales, en pseudo-couleurs, en nuances de gris et en noir et blanc.
Les fichiers BIL, BIP et BSQ sont des fichiers binaires auxquels doit être associé un en-tête de fichier ASCII pour être interprétés correctement. Cet en-tête contient des données auxiliaires sur l’image, telles que le nombre de lignes et de colonnes, si une palette de couleurs est présente, ou encore la latitude et la longitude.
Les données BIL (Band Interleaved by Line) stockent des informations de pixel canal par canal, et ce, pour chaque ligne (ou rangée) de l’image. Ainsi, dans le cas d’une image à trois canaux, tous les canaux de données sont écrits pour la ligne 1, pour la ligne 2 et ainsi de suite, jusqu’à ce que le nombre total de lignes de l’image soit atteint. Le diagramme suivant illustre les données BIL pour un jeu de données à trois canaux :
Les données BIP (Band Interleaved by Pixel) sont identiques aux données BIL, si ce n’est que les données de chaque pixel sont écrites canal par canal. Ainsi, si l’on prend la même image à trois canaux, les données des canaux 1, 2 et 3 sont écrites pour le premier pixel de la colonne 1, les données des canaux 1, 2 et 3 sont écrites pour le premier pixel de la colonne 2, etc.
Le format BSQ (Band SeQuential) stocke des informations sur l’image à raison d’un canal à la fois. En d’autres termes, les données de tous les pixels du canal 1 sont stockées en premier, suivies des données de tous les pixels du canal 2, etc.
Fichiers de description d’image
Trois fichiers de description peuvent être utilisés avec les fichiers BIL, BIP ou BSQ : un fichier d’en-tête (.hdr) obligatoire décrivant l’organisation des données de pixel des images, un fichier couleur (.clr) décrivant la palette de couleurs de l’image et un fichier de statistiques (.stx) décrivant les statistiques d’image de chaque canal de l’image. Ces fichiers texte ASCII peuvent être générés dans un éditeur de texte à l’aide des informations dont vous disposez au sujet de l’image.
Le fichier d’en-tête
Le fichier d’en-tête décrit les données d’image. Vous devez générer un fichier de ce type pour chaque image. Ce fichier doit porter le même nom que l’image, accompagné de l’extension .hdr. Par exemple : <image>.hdr.
Le fichier d’en-tête contient un ensemble d’entrées, chacune d’elles décrivant un attribut particulier de l’image. Une entrée peut, par exemple, décrire le nombre de lignes ou de colonnes de l’image. Le format de chaque entrée est le suivant : <keyword> <value> où <keyword> indique l’attribut particulier en cours de définition et <value> est la valeur pour laquelle l’attribut est défini. L’ordre des entrées n’a pas d’importance, mais chacune d’elles doit se trouver sur une ligne du fichier. Toute ligne du fichier qui ne commence pas par un mot-clé est traitée comme un commentaire et est ignorée.
Vous trouverez, ci-dessous, la liste des mots-clés valides, ainsi que l’attribut d’image qu’ils définissent. Des valeurs par défaut sont attribuées à plusieurs mots-clés. Vous pouvez omettre le mot-clé lorsque la valeur par défaut représente avec précision les données d’image.
Le mot-clé nrows indique le nombre de lignes dans l’image. Les lignes sont parallèles à l’axe x du système de coordonnées cartographiques. Aucune valeur par défaut n'est définie.
Le mot-clé ncols indique le nombre de colonnes dans l’image. Les colonnes sont parallèles à l’axe y du système de coordonnées cartographiques. Aucune valeur par défaut n'est définie.
Le mot-clé nbands indique le nombre de canaux spectraux dans l’image. La valeur par défaut est 1.
Le mot-clé nbits indique le nombre de bits par pixel et par canal. Les valeurs acceptables sont 1, 4, 8, 16 et 32. La valeur par défaut est 8 bits par pixel et par canal. Dans le cas d’une image en couleurs vraies à trois canaux (RVB) stockée à l’aide de 8 bits par pixel et par canal, nbits est égal à 8 et nbands est égal à 3, soit un total de 24 bits par pixel. Si la valeur nbits de l’image est égale à 1, nbands doit aussi être égal à 1.
Le mot-clé pixeltype indique que le type de pixel est un nombre entier signé. Par principe, vos données utilisent des entiers non signés, à moins que vous n’employiez le mot-clé pixeltype avec la valeur SIGNEDINT.
Le mot-clé byteorder indique l’ordre des octets dans lequel sont stockées les valeurs de pixel de l’image. L’ordre des octets est particulièrement important pour les images 16 bits avec 2 octets par pixel. Les valeurs admises sont les suivantes :
- I— ordre des octets Intel (Silicon Graphics, DEC Alpha, PC), connu également sous le nom de petit boutiste
- M— ordre des octets Motorola (Sun, HP et autres), connu également sous le nom de gros boutiste
L’ordre des octets par défaut est le même que celui de la machine hôte qui exécute le logiciel.
Le mot-clé layout indique l’organisation de canaux spectraux dans l’image fichier. Les valeurs admises sont les suivantes :
- bil - Band Interleaved by Line. Il s’agit de l’option par défaut.
- bip - Band Interleaved by Pixel.
- bsq - Band Sequential.
Le mot-clé skipbytes indique le nombre d’octets de données à ignorer dans le fichier image pour atteindre le début des données d’image. Ce mot-clé vous permet d’ignorer toute information d’en-tête d’image existante dans le fichier. La valeur par défaut est 0 octet.
Le mot-clé ulxmap indique la coordonnée cartographique sur l’axe x du centre du pixel supérieur gauche. Si vous spécifiez ce paramètre, définissez également ulymap, sans quoi une valeur par défaut sera utilisée.
Le mot-clé ulymap indique la coordonnée cartographique sur l’axe y du centre du pixel supérieur gauche. Si vous spécifiez ce paramètre, définissez également ulxmap, sans quoi une valeur par défaut sera utilisée.
Le mot-clé xdim indique la dimension x d’un pixel exprimée en unités de carte. Si vous spécifiez ce paramètre, définissez également ydim, ulxmap et ulymap, sans quoi une valeur par défaut sera utilisée.
Le mot-clé ydim indique la dimension y d’un pixel exprimée en unités de carte. Si vous spécifiez ce paramètre, définissez également xdim, ulxmap et ulymap, sans quoi une valeur par défaut sera utilisée.
La figure ci-dessous illustre les valeurs par défaut ulxmap, ulymap, xdim et ydim. Les coordonnées cartographiques du centre du pixel supérieur gauche sont (ulxmap, ulymap) = (0, (nrows - 1)) tandis que le centre du pixel inférieur gauche se trouve aux coordonnées (0, 0). Dans la figure ci-dessous, la valeur de coordonnée pour ulxmap et ulymap est (0, 3). Les dimensions des pixels x et y sont définis par défaut sur xdim = 1 et ydim = 1.
Le mot-clé bandrowbytes indique le nombre d’octets par canal et par ligne. Il doit s’agir d’un nombre entier. Ce mot-clé est utilisé uniquement avec des fichiers BIL lorsque des bits supplémentaires se trouvent à la fin de chaque canal dans une ligne qui doit être ignorée. Le mot-clé peut être considéré comme un index vers le point de départ du canal de données suivant. Si vous commencez au début de n’importe quel canal d’une ligne et déplacez bandrowbytes le long de cette ligne, vous arrivez au début du canal suivant.
La figure ci-dessous illustre une ligne de données pour une image à trois bandes. bandrowbytes représente la somme des octets utilisés pour stocker les données d’image et des bits supplémentaires qui doivent être ignorés pour atteindre le canal suivant.
bandrowbytes = image data + extra bits
Pour définir le mot-clé bandrowbytes, vous devez connaître la disposition des données d’image ou, plus précisément, le nombre d’octets utilisés pour stocker des valeurs de pixel pour chaque canal d’une ligne. Si bandrowbytes n’est pas défini, une valeur par défaut est calculée selon l’équation suivante :
bandrowbytes = the smallest integer(ncols x nbits) / 8
La valeur par défaut convient en l’absence de bits supplémentaires à la fin de chaque canal d’une ligne et lorsque le nombre d’octets par canal et par ligne correspond au plus petit nombre entier d’octets capable de stocker, de manière adéquate, les données pour le canal. À titre d’exemple, si les données nécessitent 2,5 octets, le plus petit nombre entier capable de stocker les données est 3 octets. Dans ces deux cas, il est inutile de définir le mot-clé bandrowbytes. Cependant, si le nombre d’octets par canal et par ligne est supérieur à la valeur par défaut, définissez bandrowbytes en conséquence.
Les deux exemples ci-après illustrent le comportement par défaut du mot-clé bandrowbytes. Le premier exemple illustre l’absence de bits à la fin d’un canal dans une ligne, tandis que le second décrit une situation où ces bits sont présents.
- En l’absence de bits supplémentaires à la fin d’un canal, bandrowbytes est égal au nombre d’octets utilisés pour stocker les données d’image.
Par exemple, dans le cas d’une image de 6 sur 6 avec trois canaux et 8 bits (1 octet) par pixel, les données d’image nécessitent 6 octets par canal et par ligne.bandrowbytes = image data
Par défaut, bandrowbytes est défini sur 6 octets, comme le montre l’équation suivante :bytes per band per row = ncols x nbits = 6 x 8 = 48 bits or 6 bytes
Étant donné que le nombre d’octets par canal et par ligne est égal à bandrowbytes, la valeur par défaut constitue le réglage approprié. Le mot-clé bandrowbytes ne doit donc pas être spécifié de manière explicite.bandrowbytes = (ncols x nbits) / 8 = (6 x 8) / 8 = 48 / 8 bandrowbytes = 6 bytes
- Si des bits supplémentaires sont présents à la fin d’un canal dans une ligne, bandrowbytes n’est pas égal au nombre d’octets de données par canal et par ligne.
Supposons que vous ayez une image à trois canaux de 5 lignes et de 5 colonnes avec 4 bits par pixel. Par défaut, bandrowbytes est défini sur le plus petit nombre (entier) d’octets capable de contenir les données de manière adéquate. Dans ce cas, la valeur par défaut est 3. Elle est calculée comme suit :
Cependant, les données d’image nécessitent uniquement 2,5 octets ; on obtient cette valeur en multipliant ncols par nbits. Le nombre d’octets à ignorer est donc de 0,5 (4 bits), soit la différence entre 3 octets (bandrowbytes) et 2,5 octets (octets de données d’image). La figure ci-dessous illustre un canal de données pour une ligne de l’image.bandrowbytes = (ncols x nbits) / 8 = (5 x 4) / 8 = 20 / 8 = 2.5 = 3 (when rounded up to the nearest integer)
Le mot-clé totalrowbytes indique le total nombre d’octets de données par ligne. Utilisez le mot-clé totalrowbytes en présence de bits supplémentaires à la fin de chaque ligne.
Dans le cas d’un fichier BIL, la valeur par défaut de totalrowbytes est calculée selon l’équation suivante :
totalrowbytes = nbands x bandrowbytes
La valeur par défaut suppose l’absence de bits supplémentaires à la fin de chaque ligne. Si des bits sont présents, définissez totalrowbytes en conséquence. Par exemple, dans le cas d’une image à trois canaux dont la valeur bandrowbytes est égale à 3, totalrowbytes prend, par défaut, la valeur 9. Si un octet de données supplémentaire est présent à la fin de la ligne, définissez totalrowbytes sur 10.
Dans le cas d’un fichier BIL, la valeur par défaut est calculée selon une équation différente :
totalrowbytes = (ncols x nbands x nbits) / 8
La valeur totalrowbytes est arrondie au nombre (entier) d’octets le plus proche capable de stocker, de manière adéquate, les données de pixel pour la ligne. Par exemple, dans le cas d’une image BIP de 5 (lignes) sur 5 (colonnes) avec 3 canaux et 4 bits par pixel, la valeur par défaut de totalrowbytes est :
totalrowbytes = (ncols x nbands x nbits) / 8
= (5 x 3 x 4) / 8
= 60 / 8
= 7.5
= 8 (when rounded up to the nearest integer)
Cette figure illustre le paramètre par défaut de totalrowbytes pour une image BIP.
Si la valeur par défaut de totalrowbytes ne représente pas précisément l’organisation des données, totalrowbytes doit être défini sur le nombre approprié d’octets dans chaque ligne.
Le mot-clé bandgapbytes indique le nombre d’octets entre les canaux dans une image au format BSQ. La valeur par défaut est 0.
Vous trouverez, ci-dessous, un exemple type de fichier d’en-tête pouvant être généré pour une image satellite BIL dans laquelle les données d’image sont précédées d’un en-tête de 128 octets.
Sample BIL header file
Lines that don't begin with a keyword are treated as comments.
nrows 1024 Comments can be placed here as well.
ncols 1024
nbands 3
nbits 8
layout bil
skipbytes 128
Le tableau suivant présente un récapitulatif des mots-clés utilisables dans le fichier .hdr :
Mot-clé | Valeur acceptable | Par défaut |
---|---|---|
nrows | Tout entier > 0 | Aucun |
ncols | Tout entier > 0 | Aucun |
nbands | Tout entier > 0 | 1 |
nbits | 1, 4, 8, 16, 32 | 8 |
pixeltype | SIGNEDINT | Entier non signé |
byteorder | I = Intel ; M = Motorola | Même valeur que la machine hôte |
layout | bil, bip, bsq | bil |
skipbytes | Tout entier ≥ 0 | 0 |
ulxmap | Tout nombre réel | 0 |
ulymap | Tout nombre réel | nrows - 1 |
xdim | Tout nombre réel | 1 |
ydim | Tout nombre réel | 1 |
bandrowbytes | Tout entier > 0 | Entier le plus petit ≥ (ncols x nbits) / 8 |
totalrowbytes | Tout entier > 0 | Pour bil : nbands x bandrowbytes ; pour bip : entier le plus petit ≥ (ncols x nbands x nbits) / 8 |
bandgapbytes | Tout entier ≥ 0 | 0 |
Le fichier couleur
Le fichier couleur (.clr) est un fichier facultatif qui décrit la palette de couleurs pour des images en pseudo-couleurs monocanal. Si ce fichier n’existe pas, l’image s’affiche en nuances de gris.
Le fichier couleur enregistre les couleurs à associer aux valeurs de pixel dans l’image. Les couleurs sont définies à l’aide du modèle de couleur RVB décrivant la quantité de rouge, de vert et de bleu. Le fichier se compose d’un ensemble d’entrées, chacune sur une ligne séparée, qui décrit la couleur correspondant à une valeur de pixel dans l’image.
Le format de chaque entrée est le suivant : <value> <red> <green> <blue> où <value> désigne une valeur de pixel donnée et <red>, <green> et <blue> sont les composantes de couleur du pixel. Classez toutes les entrées par ordre croissant et par valeur de pixel. Si le premier caractère non vierge de la ligne n’est pas un chiffre, la ligne est considérée comme un commentaire et est ignorée. Tout caractère non vierge au-delà du quatrième paramètre (blue) est ignoré et peut également être utilisé comme un commentaire.
Les composantes rouge, verte et bleue sont décrites à l’aide d’une échelle dont les valeurs sont comprises entre 0 et 255. L’intensité d’une composante de couleur s’élève parallèlement à l’augmentation des valeurs de couleur. La couleur par défaut d’une valeur de pixel sans aucune entrée est le noir. Vous trouverez, ci-dessous, un exemple de fichier couleur pour une carte des sols raster avec les valeurs de pixel 11, 16, 18, 19, 21, 98 et 99 :
Color file for Soils map
Entries are sorted in ascending order by pixel value.
11 255 0 0 (red)
16 255 165 0 (orange)
18 255 255 0 (yellow)
19 0 255 0 (green)
21 0 0 255 (blue)
98 0 255 255 (cyan)
99 160 32 240 (purple)
Les fichiers couleur sont utilisés uniquement avec des images monocanal. Toute image monocanal pourvue d’un fichier couleur est interprétée comme une image en pseudo-couleurs. Les fichiers couleur qui accompagnent des images multicanaux sont ignorés.
Le fichier de statistiques
Le fichier de statistiques (.stx) est un fichier facultatif qui décrit les statistiques d’images pour chaque canal spectral d’une image en nuances de gris ou multicanaux. Le fichier se compose d’une série d’entrées, une par canal, qui enregistre les valeurs de pixel minimale et maximale, la moyenne, l’écart type, ainsi que deux paramètres d’étirement de contraste linéaire.
Le format de chaque entrée est le suivant (toutes les valeurs apparaissent sur la même ligne du fichier pour chaque canal) :
<band> <minimum> <maximum> {mean} {std_deviation}
{linear_stretch_min} {linear_stretch_max}
Chaque composant du fichier est décrit ci-dessous :
- <band> est le numéro de canal.
- <minimum> est la valeur de pixel minimale dans le canal.
- <maximum> est la valeur de pixel maximale dans le canal.
- {mean} est la valeur de pixel moyenne.
- {std_deviation} est l’écart type.
- {linear_stretch_min} est la valeur de pixel minimale pour un étirement de contraste linéaire.
- {linear_stretch_max} est la valeur de pixel maximale pour un étirement de contraste linéaire.
Les valeurs de chaque paramètre sont saisies sur une ligne. Toute entrée dans laquelle le premier caractère non vierge n’est pas un chiffre est considérée comme un commentaire et est ignorée. Le numéro de canal et les valeurs de pixel minimale et maximale sont des paramètres obligatoires ; la moyenne, l’écart type, ainsi que les valeurs d’étirement linéaire minimale et maximale sont des paramètres facultatifs. Utilisez le symbole dièse (#) pour ignorer les paramètres facultatifs.
Les numéros de canaux sont compris entre 1 et nbands. Les paramètres linear_stretch_min et linear_stretch_max permettent d’accentuer le contraste de l’image affichée. Les valeurs de pixel inférieures à linear_stretch_min sont affichées en noir, tandis que les valeurs supérieures à linear_stretch_max apparaissent en blanc. Les valeurs de pixel comprises entre les paramètres d’étirement minimal et maximal sont affichées en nuances de gris, les nuances plus foncées étant utilisées pour afficher les valeurs inférieures.
Les valeurs de pixel comprises entre les paramètres d’étirement linéaire sont affichées en utilisant le nombre maximum de nuances de gris disponibles sur le périphérique d’affichage.
Si les valeurs linear_stretch_min et linear_stretch_max ne sont pas spécifiées, elles sont définies, par défaut, sur la moyenne moins deux écarts type pour linear_stretch_min et la moyenne plus deux écarts type pour linear_stretch_max. Si l’écart type n’est pas donné, les valeurs de pixel minimale et maximale sont utilisées comme paramètres d’étirement de contraste.
Dans le cas des images multicanaux, chaque canal est étiré avant l’affichage de l’image composite. La présence d’un fichier couleur (.clr) annule l’étirement de contraste linéaire d’une image monocanal en nuances de gris et affiche, à la place, l’image sous la forme d’une image en pseudo-couleurs.
Vous trouverez, ci-dessous, un exemple de fichier de statistiques pour une image satellite à quatre canaux avec 8 bits par pixel et par canal :
Image statistics file
1 2 118 67 10
Band 2 has linear contrast stretch parameters:
2 23 251 112 23 80 90
3 68 91 73 4
Band 4 does not contain values for mean and standard deviation:
4 126 198 # # 135 167