Compression des images hyperspectrales



These en pdf

Annexe C
Utilisation de JPEG2000

UILISER JPEG 2000 n’est pas évident au premier abord. Cette annexe décrit donc les lignes de commandes utilisées pour les comparaisons des chapitres 3 et 4. Le Verification Model qui constitue une implémentation de référence pour la norme contient de nombreuses options dont une grande partie est détaillée dans [JBI01]. Kakadu possède des options semblables, mais utilise souvent une syntaxe différente.

C.1 Correction préliminaire

La version initialement obtenue pour le vérification model ne fonctionnait pas dans le cas multicomposantes, renvoyant une erreur systématique lors de la décompression :
Uniform quantization  
ERROR  
      Attempting to access data from a non-existent marker element! The  
      requested element has the description string, "Type of quantization  
      (DZQ,MASK,TCQ,...)".

Il semble que le décompresseur cherche un marqueur QCD pour chaque composante, alors que d’après la norme, il ne doit pas y avoir plus d’un marqueur QCD par tuile [ISO02]. Dans le fichier info/std_reverse_info.c en remplaçant à la ligne 1131 dans la fonction retrieve_nz_info_from_stream :
type = stream->get_marker_val(stream,tnum,MARKER_QCD_WHICH,instance,0);

par
if (instance == 0){  
    type = stream->get_marker_val(stream,tnum,MARKER_QCD_WHICH,instance,0);  
}

On peut alors bien décoder le fichier multicomposantes obtenu.

C.2 Décorrélation interbandes par DWT

La quantité d’options disponibles pour les programmes ne rend pas forcement son usage très facile. Durant les simulations, les lignes de commande et les options utilisées étaient :
vm9_compress_32 -i input.img -o out.bits -rcb 256 256 224 -do bip -dt short  
     -rate 224 -Flra -Mtdt -low_rate_tol 0.01 -hi_rate_tol 0.01

Le format d’entrée utilisé est une image brute sans indication d’en-tête, c’est pour cela que le format de l’image doit être précisé. L’option -rcb indique la taille de l’image : 256 pixels par 256 pixels sur 224 composantes, -do indique l’ordre des données, ici en bit interleave by pixel, -dt indique que les données sont codées sur 16 bits signés (short).

Les autres paramètres servent à donner les options de compression : -rate précise le débit voulu (à noter que c’est le débit par pixel spatial et non pas le débit par valeur numérique, une valeur de 224 correspond donc à un bpp de 1), -Mtdt demande au codeur de faire d’abord une décorrélation des bandes par une transformation en ondelettes, -Flra demande une adaptation du débit par lagrangien (sans cette option, le débit visé pour les images hyperspectrales n’est pas souvent atteint) et enfin -low_rate_tol -hi_rate_tol précisent la tolérance accordé pour le débit demandé.

Et pour la décompression :
vm9_expand_32 -i out.bits -o tmp.raw -do bip

Si les images sont codées en big endian et traitées sur un PC ou en little endian et traitées sur un système Unix, l’option -swap est à rajouter lors de la compression et la décompression.

C.3 Décorrélation interbandes par KLT

Pour effectuer une décorrélation par KLT, il faut créer des fichiers annexes :

Trois autres fichiers sont nécessaires et référencés par ces premiers :

Les données sont enregistrées en binaire au format float (32 bits). Ces matrices de passage doivent être calculées par ailleurs.

La ligne de commande à utiliser pour la compression est alors :
vm9_compress_32 -i input.img -o out.bits -rcb 256 256 224 -do bip -dt short  
     -rate 224 -Flra -Mlin klt  -Fguard_bits 5 -low_rate_tol 0.01 -hi_rate_tol 0.01

La commande pour la décompression ne change pas.

C.4 Utilisation de Kakadu

Une autre implémentation populaire, également écrite en grande partie par Taubman est Kakadu [Tau06]. Kakadu ne correspond plus à une version de développement, il est donc particulièrement optimisé au niveau de l’utilisation de la mémoire et de la vitesse d’exécution. Les dernières versions commencent à inclure les spécifications de la partie 2 du standard et donc permettent l’utilisation d’une transformée intercomposantes.

L’image doit être enregistrée au format BSQ (cf. annexe D). La ligne de commande utilisée pour effectuer la compression d’une image hyperspectrale à un débit de 1.0 bpppb est :
kdu_compress -i moffett512.rawl*224@524288 -o out.jpx -jpx_layers \* -jpx_space sLUM  
     Creversible=no Sdims=\{512,512\} Mcomponents=224 Msigned=yes Mprecision=16  
     Mstage_inputs:I25=\{0,223\} Mstage_outputs:I25=\{0,223\} Mstage_collections:I25=\{224,224\}  
     Mstage_xforms:I25=\{DWT,0,4,5,0\} Mvector_size:I4=224  Mvector_coeffs:I4=0 Mnum_stages=1  
     Mstages=25 Sprecision=16 Ssigned=yes Qstep=0.00001 -rate 224.0

Pour attendre le débit visé, il est obligatoire de donner explicitement la valeur du Qstep, la valeur par défaut ne correspondant pas.

Le décodage ne peut pas encore se faire en une seule ligne de commande, on est donc obligé dans ce cas d’écrire un script pour décoder les bandes une à une. Le temps d’exécution est alors beaucoup plus long. Ce dernier point risque probablement d’évoluer dans les versions ultérieures.
#!/bin/bash  
rm out.rawl  
touch out.rawl  
for i in  ‘seq 0 223‘; do  
        echo component: $i  
  kdu_expand -i out.jpx -o tmp.rawl -jpx_layer $i  
cat tmp.rawl >> out.rawl  
done  
rm tmp.rawl


These en pdf

01-2007 - -