Compression des images hyperspectrales



These en pdf

Annexe B
Exemples pour EZW et SPIHT

LES algorithmes EZW et SPIHT sont populaires et utilisés dans beaucoup de travaux, néanmoins, pour en comprendre les subtilités il est utile d’appliquer à la main ces algorithmes sur des données simples. Pour permettre de mieux comprendre ces deux algorithmes (décrits dans le chapitre 3 ainsi que dans [Sha93] et [Sai96]) et mettre en évidence leurs différences, on applique ici la première passe de ces deux algorithmes sur un exemple concret.

L’exemple original de l’article [Sha93] est appliqué également à SPIHT [Sai99]. Ces deux exemples sont repris ici sur les mêmes données (Fig. B.1) pour faciliter la compréhension des algorithmes. Rappelons que le codage est fait par plans de bits successifs.












 63 -34 49 10 7 13 -12 7




 -31 23 14 -13 3 4 6 -1






 15 14 3 -12 5 -7 3 9
  -9 -7 -14 8 4 -2 3 2










  -5 9 -1 47 4 6 -2 2
  3 0 -3 2 3 -2 0 4
  2 -3 6 -4 3 6 3 6
  5 11 5 6 0 3 -4 4










 

Fig. B.1: Exemple de coefficients issus de la transformée en ondelettes.


B.1 Déroulement sur EZW

Pour EZW, rappelons également qu’un coefficient est déclaré significatif (symbole POS ou NEG suivant son signe) si sa valeur absolue est supérieure au seuil Tk du plan de bits. Sinon, soit il s’agit d’un zéro isolé (IZ) si au moins un de ses descendants est significatif, soit d’un arbre de zéros (ZTR) si aucun de ses descendants n’est significatif.

Le déroulement de l’algorithme EZW sur les données de la figure B.1 est décrit dans le tableau B.1. Quelques précisions sont données pour certaines étapes, les numéros correspondants sont données dans la dernière colonne du tableau B.1 :

  1. Le premier coefficient a la valeur 63, il est supérieur au seuil courant (32), le symbole POS est émis.
  2. -31 est non significatif, mais il possède un descendant qui est significatif (47) c’est un zéro isolé, IZ est émis.
  3. 23 est non significatif et tous ses descendants sont non significatifs, il s’agit donc d’un arbre de zéros, ZTR est émis.
  4. 7 est non significatif et comme la sous-bande HL1 n’a pas de descendant, les symboles IZ et ZTR peuvent être regroupés en un seul symbole Z.
  5. 47 est significatif, le symbole POS est émis. Comme ce symbole sera traité pendant la passe de raffinement, il pourra être considéré comme étant 0 pour les passes suivantes (le symbole 14 de la LH2 sera alors une racine d’un arbre de zéros).






Sous-bandeValeurs du coefficientSymbole




LL3 63 (0,0) POS (1)
HL3 -34 (1,0) NEG
LH3 -31 (0,1) IZ (2)
HH3 23 (1,1) ZTR (3)
HL2 49 (2,0) POS
HL2 10 (3,0) ZTR
HL2 14 (2,1) ZTR
HL2 -13 (3,1) ZTR
LH2 15 (0,2) ZTR
LH2 14 (1,2) IZ
LH2 -9 (0,3) ZTR
LH2 -7 (1,3) ZTR
HL1 7 (4,0) Z (4)
HL1 13 (5,0) Z
HL1 3 (4,1) Z
HL1 4 (5,1) Z
HL1 -1 (2,4) Z
HL1 47 (3,4) POS (5)
HL1 -3 (2,5) Z
HL1 -2 (3,5) Z





Tab. B.1: Déroulement de la première passe de l’algorithme EZW (seuil 32) sur les données de la figure B.1.

En supposant que EZW utilise 2 bits pour coder les symboles POS, NEG, ZTR et IZ et 1 bit pour coder le symbole Z, on obtient un débit de 26+7=33 bits.

B.2 Déroulement sur SPIHT

L’algorithme SPIHT maintient trois listes de coefficients : la liste des coefficients significatifs (List of Significant Pixels ou LSP), la liste des coefficients non significatifs (List of Insignificant Pixels ou LIP) et la liste des ensembles non significatifs (List of Insignificant Sets ou LIS). O(x,y,λ) est l’ensemble des enfants de (x,y,λ) (un seul niveau de descendance), D(x,y,λ) est l’ensemble de tous les descendants et L(x,y,λ) = D(x,y,λ) -O(x,y,λ) est l’ensemble des descendants à l’exception des enfants. La fonction Sk(x,y,λ) est égale à 0 si tous les descendants de (x,y,λ) sont en dessous du seuil Tk (arbre de zéros) et 1 dans le cas contraire. SPIHT considère deux types d’arbres de zéros : le type A où tous les descendants ne sont pas significatifs (arbre de degré 1) et le type B où tous les descendants, à l’exception d’au moins un des enfants, ne sont pas significatifs (arbre de degré 2).

Le déroulement de l’algorithme SPIHT sur les données de la figure B.1 est décrit dans le tableau B.2. Quelques précisions sont données pour certaines étapes :

  1. Initialisation des listes : la LSP est vide, la LIP contient les 4 coefficients de plus basse fréquence et la LIS contient la même chose que la LIP à part le coefficient (0,0) (valeur 63) qui n’a pas de descendants.
  2. (0,0) qui a la valeur 63 est significatif, il est mis dans la LSP. Le signe de cette valeur est également émis, et noté +.
  3. Un des descendants de (1,0) est significatif (49) on teste donc les 4 enfants de (1,0).
  4. Comme un des enfants de (1,0) était significatif, il est changé de type (B) et mis à la fin de la LIS.
  5. Tous les descendants de (1,1) sont en dessous du seuil, on ne fait donc rien de particulier, on passe à l’élément suivant dans la LIS.
  6. (1,0) est de type B, on regarde donc L(1,0) qui n’est pas significatif
  7. (0,1) est de type B, on regarde donc L(0,1) qui est significatif (présence de la valeur 47), on partage donc l’ensemble et on ajoute (0,2), (1,2), (0,3), (1,3) à la fin de la LIS comme élément de type A et on enlève (0,1) de la LIS.
  8. Comme (1,2) n’a pas de petits-enfants, au lieu de le passer en élément de type B comme on aurait du le faire, on le retire de la LIS.
  9. Ces listes constituent les listes d’entrées pour le passage suivant où le seuil sera de 16.







Coeff. ouSortie Action Liste
ens. testé





LIS = {(1,0)A,(0,1)A, (1,1)A}
LIP = {(0,0),(1,0),(0,1),(1,1)} (1)
LSP =





(0,0) 1+ (0,0) dans LSP LIP = {(1,0),(0,1),(1,1)} (2)
LSP = {(0,0)}





(1,0) 1- (1,0) dans LSP LIP = {(0,1),(1,1)}
LSP = {(0,0),(1,0)}





(0,1) 0 rien





(1,1) 0 rien





D(1,0) 1 tester les descendants (3)
(2,0) 1+ (2,0) dans LSP LSP = {(0,0),(1,0),(2,0)}
(3,0) 0 (3,0) dans LIP LIP = {(0,1),(1,1),(3,0)}
(2,1) 0 (2,1) dans LIP LIP = {(0,1),(1,1),(3,0),(2,1)}
(3,1) 0 (3,1) dans LIP LIP = {(0,1),(1,1),(3,0),(2,1),(3,1)}
chgt type LIS = {(0,1)A, (1,1)A, (1,0)B} (4)





D(0,1) 1 tester les descendants
(0,2) 0 (0,2) dans LIP LIP = {(0,1),(1,1),(3,0),(2,1),(3,1),(0,2)}
(1,2) 0 (1,2) dans LIP LIP = {(0,1),(1,1),(3,0),(2,1),(3,1),(0,2),(1,2)}
(0,3) 0 (0,3) dans LIP LIP = {(0,1),(1,1),(3,0),(2,1),(3,1),(0,2),(1,2),(0,3)}
(1,3) 0 (1,3) dans LIP LIP = {(0,1),(1,1),(3,0),(2,1),(3,1),(0,2),(1,2),(0,3),(1,3)}
chgt type LIS = {(1,1)A, (1,0)B, (0,1)B}





D(1,1) 0 rien (5)





L(1,0) 0 rien (6)





L(0,1) 1 ajouter des ensemblesLIS = {(1,1)A, (1,0)B, (0,2)A, (1,2)A, (0,3)A, (1,3)A} (7)





D(0,2) 0 rien





D(1,2) 1 tester les descendants
(2,4) 0 (2,4) dans LIP LIP = {(0,1),(1,1),(3,0),(2,1),(3,1),(0,2),(1,2),(0,3),
(1,3),(2,4)}
(3,4) 1+ (3,4) dans LSP LSP = {(0,0),(1,0),(2,0),(3,4)}
(2,5) 0 (2,5) dans LIP LIP = {(0,1),(1,1),(3,0),(2,1),(3,1),(0,2),(1,2),(0,3),
(1,3),(2,4),(2,5)}
(3,5) 0 (3,5) dans LIP LIP = {(0,1),(1,1),(3,0),(2,1),(3,1),(0,2),(1,2),(0,3),
(1,3),(2,4),(2,5),(3,5)}
L(1,2)= enlever (1,2) LIS = {(1,1)A, (1,0)B, (0,2)A, (0,3)A, (1,3)A} (8)





D(0,3) 0 rien
D(1,3) 0 rien





LIS = {(1,1)A, (1,0)B, (0,2)A, (0,3)A, (1,3)A}
LIP = {(0,1),(1,1),(3,0),(2,1),(3,1),(0,2),(1,2),(0,3),
(1,3),(2,4),(2,5),(3,5)} (9)
LSP = {(0,0),(1,0),(2,0),(3,4)}





Tab. B.2: Déroulement de la première passe de l’algorithme SPIHT (seuil 32) sur les données de la figure B.1.

La taille de la sortie de cette première passe est de 29 bits.


These en pdf

01-2007 - -