• Aucun résultat trouvé

Mode par plage

Dans le document Le multimédia (Page 51-54)

Chapitre 2. GIF, PNG, LossLess-JPEG et JPEG-LS

2.4. JPEG-LS

2.4.6. Mode par plage

0,

log2

E(X

¯

e)

2

oùXe¯est la VA de l’erreur de prédiction.

L’espérance E(Xe¯) n’est évidemment pas connue et doit donc être ajustée à

chaque nouveau pixelpcodé. L’algorithme de Golomb (voir chapitre 3 volume 1)

opère cet ajustement en utilisant un compteur N et une variable de cumul A. Ce

principe est modifié pour prendre en compte le contexteδpet les valeurs transformées

des erreurs¯ep. Quatre variables sont alors utilisées :A[Qp],N[Qp],B[Qp]etC[Qp].

Leurs indices expriment la dépendance contextuelle.

Ces variables servent au calcul :

– du rapport B[Q

p

]

N[Q

p

] qui est l’estimation couranteE(Xe|Qp)de l’espérance des

erreurs de prédictionepconnaissant le contexteQp=⇒il est utilisé pour le calcul de

la transforméeep7→e¯p;

– du rapport A[Q

p

]

N[Q

p

] qui est l’estimationE(X¯e|Qp)des valeurs transformées des

erreurse¯p connaissant le contexteQp =⇒il est utilisé pour estimer la valeurkde

l’algorithme de Golomb (voir chapitre 3 volume 1).

La variableC[Qp]enregistre la valeur du biais introduit dans les erreurs de

pré-diction ep =⇒ elle est utilisée pour la correction du biais. Initialement, A[Qp] =

max (2,⌊(α+ 32)/64⌋)[WEI 99].

Toujours dans un soucis d’éviter l’opération de division, l’estimation du paramètre

kpeut également être réécrite :

k= max

0,⌈log2 A[Qp]

N[Qp]

= argmin

k∈

N +

2kN[Qp]> A[Qp]

2.4.6. Mode par plage

Le codage de Golomb souffre du même inconvénient que l’algorithme de

Huff-man. Lorsque l’entropie est faible, l’algorithme ne pouvant descendre en deçà d’un

bit par symbole, le codage n’est pas optimal.

Typiquement, les régions uniformes en intensité de l’image à coder ont une faible

entropie. Aussi, une extension de l’alphabet de la source est envisagée pour ses zones

particulières. Ce procédé est similaire à celui utilisé par le codeur de Huffman : il

s’agit de construire des hypersymboles regroupant plusieurs échantillons. Le

pas-sage du mode normal ou mode par plage est effectué grâce au test d’uniformité du

contexte :[g1, g2, g3] = [0,0,0]. Autrement dit,˜a= ˜b= ˜c= ˜d.

Une fois en mode par plage, le processus suppose qu’il existe une séquence

de valeurs identiques àa˜. Cette séquence s’arrête quand la fin de la ligne est atteinte

ou lorsqu’une valeur diffère dea˜. La longueur de la séquence est alors codée. Le

décodeur n’a pas besoin de connaître la valeur a˜ puisqu’il se trouvera, au même

instant, dans le même contexte et effectuera, donc, le même changement de mode.

Lorsque la séquence s’arrête avec une fin de ligne, le codeur revient directement en

mode régulier. En revanche, quand une valeurx 6= ˜avient arrêter la séquence, le

codeur entre en étatend-of-run.

La longueur r, de la séquence est codée à l’aide du paramètre m – détaillé

ci-après – et d’un codage unaire inversé : le bit1indique le codage d’une portion –

de taille6 m– d’une séquence tandis que le bit0tient lieu de séparateur entre les

séquences. L’alphabet utilisé par ce codage est fini : {0,10,110,· · ·,1m−10,1m

}.

Mais les longueursr, des séquences ne sont pas forcément des multiples dem. Aussi,

un bit0est suivi par le code binaire de la longueur de la fin de la séquence. Ainsi,

l’algorithme de Golomb d’ordre m = 2k est optimal pour ce codage. Toutefois,

lors du codage d’une séquence, l’ordrekest ajusté grâce à une tableT et un indice

Irun. L’indice référence l’entrée dans la table qui permet de mettre à jour la valeur

dek. Initialement, l’indice Irun = 0. Il est incrémenté (resp. décrémenté) à chaque

émisssion d’un bit1(resp. d’un bit0). Le procédé est décrit par l’algorithme qui suit :

CODEUR PAR PLAGE()

1 k←T[Irun] // retrouver la valeur de k dans la table T

2 m←2ktant quer>m

3 faire Emettre1// la sous-séquence de taille m est codée

4 r←r−m // mise à jour de la longueur à coder

5 Irun←min(Imax, Irun+ 1) // l’indice est incrémenté

6 k←T[Irun]

7 m←2k // mise à jour en cours de codage de la séquence

8 siEN D_OF_RU N

9 alors // la séquence s’arrête avant la fin de ligne

10 Emettre0// fin de la séquence

11 Emettre k bits// pour coder la fin de la séquence

12 Irun←max(0, Irun−1)

13 sinon // fin de ligne rencontré

14 sir >0

La tableTvaut :

0 0 0 0 1 1 1 1 2 2 2 2 3 3 3 3

4 4 5 5 6 6 7 7 8 9 10 11 12 13 14 15

Lorsque la séquence se termine par une valeurxdifférente de la valeur de référence

˜

a, la différence de cet échantillon avec son voisin direct,˜bx, est codée. L’algorithme

de Golomb est utilisé comme en mode régulier [PNG 03].

2.4.7. Quasi sans perte

Le standard JPEG-LS autorise un codage quasi sans perte grâce à un paramètre de

contrôle NEAR que l’utilisateur peut ajuster. SiNEAR = 0, le codage est sans perte.

Sinon(NEAR>0), le calcul de l’erreurepet la reconstructionx˜sont à adapter :

ep ← sign(ep)abs(ep) + NEAR

2 NEAR +1

˜

x ← x+spep(2 NEAR +1)

La substitution ne change pas le comportement de l’algorithme puisque le codage

sans perte correspond au cas oùNEAR = 0. Certains autres changements mineurs

sont également nécessaires. Par exemple, le choix du mode par plage se fera quand le

test suivant est vérifié :

abs(g1)<NEAR et abs(g2)<NEAR et abs(g3)<NEAR

2.4.8. Synthèse du format JPEG-LS

Ce standard propose une adaptation contextuelle forte pour obtenir des taux de

compression élevés. Le contexte est défini par le voisinage du pixel observé. Il

inter-vient dans le choix du mode de compression : régulier ou par plages.

Si le voisinage est contrasté, le codeur entre en mode régulier. Ce voisinage est

utilisé à la fois pour estimer la prédiction et pour modéliser le contexte associé au

pixel à coder.

La prise en compte du voisinage par la prédiction permet de diminuer l’entropie

de la source à coder. La distribution de la prédiction est alors de type laplacienne,

c’est-à-dire symétrique et centrée en 0. En repliant cette courbe en son centre, cette

distribution devient géométrique. Pour effectuer ce repliement, JPEG-LS s’assure que

le centre est bien en 0 par une étape de traitement de la source appeléecorrection du

biais.

L’algorithme de Golomb étant optimal pour des distributions géométriques, il est

utilisé avec, en complément, une modélisation contextuelle. Celle-ci opère une

quan-tification des données qui permet de réduire l’alphabet à coder à 365 entrées.

Lorsque le voisinage est uniforme (ou presque en mode quasi sans perte) un codage

par plages est effectué afin de regrouper toutes les valeurs identiques en un unique

symbole (la longueur de la plage). A nouveau, l’algorithme de Golomb est utilisé.

Ainsi, il existe deux modes comportant des prétraitements différents mais utilisant

le même codeur entropique en fin de chaîne.

Dans le document Le multimédia (Page 51-54)

Documents relatifs