• Aucun résultat trouvé

III. Compression

5.3. Des algorithmes de contrôle de débit pour un standard de compression

5.3.1. TMN.8 (H.263)

L'algorithme de contrôle de débit le plus couramment utilisé pour les tests est celui intégré au sein du codeur expérimental TMN.8 pour H.263 [39]. Nous l'appellerons dans la suite algorithme du TMN.8, indépendamment du fait que ce codeur expérimental présentait d'autres avancées par rapport aux codeurs précédents. Cet algorithme agit à deux échelles distinctes : celui de l'allocation de débit pour chaque trame, et celui de l'allocation de débit au sein d'une trame.

5.3.1.1. Contrôle à l'échelle de la trame

La première étape de l'algorithme du TMN.8 est de déterminer le débit disponible pour l'image à coder.

Mémoire-tampon On suppose l'existence d'une petite mémoire de stockage, la mémoire- tampon, ou tampon, qui nous permet de ne pas réaliser le débit cible pour chaque image, mais de s'en écarter légèrement de temps à autre. Comme il est dicile de savoir à l'avance quel sera le type de matériel sur lequel fonctionnera le décodeur ou le codeur, l'encodeur expérimental simule cette mémoire-tampon. La taille théorique de celui-ci est généralement égale à l'espace moyen pris par une trame au débit cible. Cela permet de ne pas avoir trop de uctuations de fréquence au cours de la séquence. Il est possible que l'algorithme d'allocation de débit agisse de façon incorrecte. Dans ce cas, il est possible que le tampon déborde à un instant donné. Pour vider le tampon et pouvoir rependre le cours de la vidéo avec le temps de latence désiré, il faut abandonner (sauter) certaines trames, autant qu'il est besoin pour éliminer le débordement du tampon.

Notations Notons :

 Dle débit cible en bits par seconde

 H le nombre de bits utilisés lors de l'encodage de la trame précédente  R le budget de bits pour l'encodage de la prochaine trame

 Gle nombre d'image par seconde dans la séquence originale

 F le nombre d'image par seconde que l'on désire avoir dans la séquence une fois

codée

 M la taille virtuelle du tampon en bits, qui sera le sueil pour le saut d'une image

lors de l'encodage.

 A la fraction d'équilibre du tampon. L'objectif est que le tampon soit rempli en moyenne de AM bits. Il est possible de voir AM comme le retard de visualisation dû à l'utilisation du tampon

 W le nombre de bits actuellement dans le tampon

 ∆d la diérence entre le budget moyen R/F et le budget réel pour la prochaine trame B

Dans une situation idéale, nous avons :

R = D/F

d= 0

H = Rprec

W = AM

Algorithme Les images sont sautées si le nombre de bits accumulés dans le tampon

par le codage de l'image précédente est trop important. Plus précisément, si jamais le remplissage du tampon est supérieur à la taille de celui-ci (i.e. W > M), nous sautons une trame et vidons le tampon de l'objectif de taille d'une trame (D/F ), et ce, jusqu'à avoir éliminé le sur-remplissage du tampon.

M

AM W

0

∆b

(a) Niveau du tampon au- dessous du niveau cible

M

AM W

0

∆b

(b) Niveau du tampon au- dessus du niveau cible

M AM W 0 ∆b Saut de trame (c) Débordement du tampon

Fig. 5.1.: Schéma de la mémoire-tampon. Sa taille est M, et son niveau cible de rem- plissage est AM. Si W < AM, nous bénécions d'un surplus de budget pour revenir à niveau cible. Si W > AM, le budget est limité, avec un amortissement du contrecoup du dépassement sur quelques images. Enn, s'il y a déborde- ment du tampon, on saute des trames jusqu'à ce qu'enlever le budget de ces trames ait éliminé le débordement du tampon

Le budget pour l'image est alors déterminé de façon à se rapprocher du niveau cible du tampon. Si le tampon est moins rempli que la cible (W < AM), la diérence entre les deux niveaux (AM −W ) se reporte intégralement sur le nouveau budget. En revanche, au cas où le remplissage du tampon dépasse le niveau cible (W > AM), le manque n'est pas intégralement perdu, mais sa compensation, W/F , est répartie sur un certain nombre de trames suivantes, an d'eviter une variation trop brutale du budget et donc de la qualité des images codées1.

L'algorithme 3 récapitule avec les formules correspondantes le mécanisme mis en oeuvre. La sous-boucle prépare le saut d'image pour permettre au tampon de se vider de son dé- passement, comme nous l'avons mentionné précédemment.

Algorithme 3 Algorithme du TMN.8 pour l'allocation de débit inter-trame

répéter

W ← max(W + H − D/F, 0) skip ← 1

tant que W > M faire

W ← max(W − D/F, 0) skip ← skip + 1

n tant que

l'encodage des skip.G/F − 1 trames suivantes est sauté. si W > AM alorsd← W/F sinon ∆d← W − AM n si B ← D/F − ∆d

encodage de la trame courante avec un budget de bits R jusqu'à il ne reste plus de trames à encoder

5.3.1.2. Contrôle de débit à l'intérieur d'une trame

Dans le standard H.263, l'image est découpée en macroblocs (carrés de 16 pixels de côté) qui sont codés les uns après les autres. Il est possible d'indiquer au début du codage de chaque macrobloc si l'on désire faire évoluer le paramètre QP du pas de quantication, au sein d'un petit intervalle autour du paramètre du pas de quantication précédent

QPprec. Le paramètre du pas de quantication est un entier qui vaut la moitié du pas de quantication eectivement utilisé.

Une fois déterminé le nombre de bits disponible pour le codage de l'image, on utilise un système de contrôle au niveau des macroblocs an de choisir les valeurs optimales pour le paramètre de quantication au sein de chacun d'entre eux.

1W/F n'est pas homogène à un nombre de bits, mais il y a une multiplication implicite par une durée

d'une seconde qui correspond au temps visé d'amortissement du dépassement par rapport au niveau cible.

L'algorithme détermine dans l'image les valeurs de pas de quantication à utiliser macrobloc par macrobloc, dans l'ordre de codage des blocs (de gauche à droite et de haut en bas).

Nous notons ici :

 Npix le nombre de pixels au sein d'un macrobloc (256 pour un macrobloc de 16 pixels par 16).

 Ri le nombre de bits utilisés par le codage du i-ème macrobloc  σi l'écart-type du i-ème macrobloc de la trame d'erreur.

 ∆i est le pas de quantication pour le i-ème macrobloc.

 Nmb est le nombre de macroblocs dans l'image. Le nombre total de coecients est

donc N = NpixNmb.

 Cle débit d'en-tête par pixel. Ceci correspond à la répartition du coût des vecteurs de mouvement et des bits de syntaxe sur chacun des pixels.

 K un paramètre du modèle à déterminer selon la distribution des coecients dans la trame

L'algorithme du TMN.8 s'appuie sur le modèle de débit suivant :

Ri= Npix(Kσ 2 i ∆2 i + C).

Ce modèle dérive de l'approximation de l'entropie de ¯Xi, variable aléatoire issu de la

quantication avec un pas ∆i de la variable aléatoire X de distribution laplacienne. Cette approximation, dans le cas où σ2

∆2 i <

1

2e est donnée par [40] :

H( ¯Xi) = ln2e σ 2 i ∆2 i . (5.1)

La nécessité de prendre K diérent de e

ln2 vient du fait que les coecients ne possède pas exactement une distribution laplacienne d'une part, et d'autre part de la capacité des codeurs à exploiter la corrélation spatiale entre coecients.

Les valeurs de K et de C seront déterminées de façon empirique au fur et à mesure du codage des macroblocs, puisqu'il est possible de les calculer pour les macroblocs déjà codés. La valeur utilisée pour le i-ème macrobloc sera la moyenne constatée sur les i − 1 premiers macroblocs.

Dans la mesure où changer le pas de quantication pour un nouveau macrobloc à un coût, faible mais pas nécessairement négligeable, le modèle attribue à la distorsion potentielle de chaque macrobloc un poids αi déni par :

αi = (

2NR(1 − σi) + σi si R < 0.5N

1 sinon

 ri le budget restant pour coder les macroblocs de i à Nmb.

 ni le nombre de macroblocs restant à coder, y compris le i-ème :

ni= Nmb+ 1 − i.

 Li le nombre de bits potentiellement restant pour coder les coecients :

Li = ri− NpixniC.

 Si la somme pondérée des variances des macroblocs d'erreur restants :

Si = NXmb

j=i

αiσi.

Les pas de quantication pour chacun des macroblocs sont alors calculés successivement de la façon suivante :

 Les valeurs des σi sont calculées pour chacun des macroblocs.

 Si Li > 0, c'est-à-dire s'il reste un budget de bits pour les coecients, alors on

prend :

i = r

NpixKiσi

Liαi Si,

et l'on choisit le paramètre du pas de quantication dans l'intervalle de variation possible qui donne le pas de quantication le plus proche de ∆

i. Sinon, on ne fait qu'augmenter le pas de quantication.

 Comme indiqué précédemment, on met à jour les paramètres du modèle C et K à partir du résultat eectif du codage, avant de passer au macrobloc suivant. Ribas et Lei donnent dans [39] une description complète et détaillée de l'algorithme.