• Aucun résultat trouvé

H.264/AVC

La norme H.264/AVC [H.264/AVC] est un codeur vid´eo en boucle ferm´ee, tout comme l’ensemble de ses pr´ed´ecesseurs. En effet, les informations d´ej`a d´ecod´ees sont utilis´ees pour le codage de la partie courante. Le sch´ema global de codage de cette norme est repr´esent´e dans la figure 1.1. La s´equence en entr´ee (en haut `a gauche dans le sch´ema), est une succession d’images (matrices de pixels). Chaque image est d´ecoup´ee en “slices”. Un slice est une partie de l’image ou l’image enti`ere en fonction des param`etres d’entr´ee. Ces slices sont d´ecoup´es en macroblocs (bloc de taille 16×16), le macrobloc ´etant l’unit´e de codage dans la norme. Chaque macrobloc est cod´e soit en Intra (boˆıte 1), soit en Inter (boˆıte 12). Chacun de ces codages engendre plusieurs r´esiduels de texture, qui sont compar´es avec un module de d´ecision (boˆıte 2). Le r´esiduel qui donne la meilleure possibilit´e de codage, en terme d’un crit`ere d´ebit-distorsion dans le logiciel de r´ef´erence [JM] de la norme, est alors s´electionn´e.

Ce r´esiduel est d´ecorr´el´e avec la transform´ee en cosinus discr`ete (DCT) (boˆıte 3). Puis, ce r´esiduel transform´e est quantifi´e (boˆıte 4) et les coefficients engendr´es sont envoy´es dans le codeur entropique sans perte (boˆıte 10) qui produit le train binaire (le flux).

Le standard H.264/AVC ´etant un codeur en boucle ferm´ee, il est n´ecessaire d’introduire une boucle de d´ecodage `a l’int´erieur de l’encodeur. Par cons´equent, les r´esiduels transform´es et quantifi´es sont d´equantifi´es (boˆıte 5) et d´etransform´es (boˆıte 6) `a l’int´erieur du codeur. Aux blocs ainsi g´en´er´es, on applique la pr´ediction inverse. Cette op´eration consiste `a ajouter le pr´edicteur s´electionn´e dans le module de d´ecision (boˆıte 2) (le meilleur pr´edicteur Intra ou Inter). Ensuite, un filtre de deblocking est appliqu´e sur l’image reconstruite, permettant d’´eliminer certaines d´egradations produites par le module de quantification (boˆıte 4) qui engendre des pertes d’information. Ce filtre lisse les images de r´ef´erence en bordure des blocs. Enfin, les macroblocs et slices d´ecod´es sont stock´es en m´emoire (boˆıte 9). Les blocs d´ecod´es de l’image courante, stock´es dans ce module, sont utilis´es pour le calcul des pr´edicteurs Intra. De mˆeme, les images pr´ec´edemment d´ecod´ees et d´ebloqu´ees (liss´ees) sont utilis´ees pour le codage Inter. En effet, le mouvement entre le bloc courant et ces images est estim´e (boˆıte 11), le pr´edicteur engendr´e par cette estimation de mouvement servira pour la pr´ediction Inter que l’on appelle g´en´eralement compensation de mouvement (boˆıte 12). Afin que le d´ecodeur soit capable de retrouver ce pr´edicteur Inter, un vecteur correspondant au mouvement entre le bloc courant et le pr´edicteur est transmis au d´ecodeur. Les vecteurs issus du codage Inter sont pr´edits (boˆıte 13) puis envoy´es dans le codeur entropique. Ces vecteurs pr´edits puis cod´es sont ensuite ins´er´es dans le train binaire.

Les diff´erentes ´etapes de ce sch´ema de codage peuvent ˆetre segment´ees en deux parties : le calcul du r´esiduel et le codage du r´esiduel. Nous d´ecrivons, alors, bri`evement ces deux parties dans la suite de ce chapitre.

1.1.1

Calcul du r´esiduel

Le r´esiduel du bloc courant, appel´e aussi erreur de pr´ediction, est la diff´erence entre un pr´edicteur et ce bloc courant. L’expression du r´esiduel e est donn´ee dans l’´equation (1.1) o`u p(x, y) est le pixel du bloc courant `a la position (x, y) et ˆp est le pr´edicteur :

e(x, y) = p(x, y) − ˆp(x, y) (1.1)

L’op´eration de pr´ediction inverse est donn´ee dans l’´equation (1.2). Le pr´edicteur ˆp est ajout´e au

r´esiduel pour retrouver les pixels p(x, y) du bloc courant. Le d´ecodeur calcule le pr´edicteur ˆp `a partir

des informations d´ej`a d´ecod´ees et extraites du train binaire :

p(x, y) = ˆp(x, y) + e(x, y) (1.2)

Les pr´edictions Intra et Inter permettent d’exploiter respectivement les corr´elations spatiales et temporelles des s´equences vid´eo. Les pr´edicteurs Intra sont calcul´es `a partir des informations d´ej`a d´ecod´ees de l’image courante et plus pr´ecis´ement des pixels voisins du bloc courant. Nous d´ecrirons plus en d´etail le codage Intra de la norme H.264/AVC dans la section 1.2.

Description du sch´ema global de codage de la norme H.264/AVC 11

Figure 1.1 – Sch´ema global d’un codeur H.264/AVC.

Dans le standard, on distingue trois types de slices : I, P, B. Les slices I dits Intra utilisent uniquement le codage Intra. Ils sont utilis´es pour le codage de la premi`ere image d’une s´equence, car aucune redondance temporelle ne peut ˆetre exploit´ee dans ce cas. Les images cod´ees uniquement en Intra sont ind´ependantes des autres images du flux. Par cons´equent, on les utilise aussi pour permettre un acc`es al´eatoire `a la s´equence cod´ee, ou pour r´einitialiser la pr´ediction temporelle, en cas de pertes de paquets par exemple. Les slices P, dits pr´edictifs, utilisent `a la fois le codage Inter et le codage Intra, car, pour chaque macrobloc, ces deux types de codage peuvent ˆetre en comp´etition. Les images P utilisent des images dans le pass´e pour la compensation de mouvement. Finalement les slices B, dits bidirectionnels, utilisent aussi ces deux modes de codages (Intra et Inter) mais la compensation de mouvement peut ˆetre effectu´ee `a la fois sur des images dans le pass´e et des images dans le futur. De plus, pour ces slices B, la pr´ediction temporelle d’un bloc peut ˆetre la diff´erence entre le bloc courant et un pr´edicteur r´esultant d’une moyenne entre deux blocs. Ces deux blocs peuvent provenir d’une image dans le pass´e et d’une image dans le futur, ou de deux images dans le pass´e ou de deux images dans le futur.

L’estimation de mouvement est le processus qui permet de r´ealiser une mise en correspondance entre des ´el´ements de deux trames diff´erentes, bas´ee sur le crit`ere de fid´elit´e. Pour le bloc courant, ce processus a pour but de rechercher dans les images pr´ec´edemment encod´ees un bloc de mˆeme taille repr´esentant le mˆeme objet ou une mˆeme partie de l’objet. Ce processus de recherche du meilleur pr´edicteur temporel est effectu´e uniquement `a l’encodeur, c’est donc un processus non- normatif. L’estimation de mouvement correspond `a un algorithme de mise en correspondance de blocs ou “Block Matching” (BMA), avec comme crit`ere de s´election la minimisation du crit`ere d´ebit-distorsion. Cependant, l’estimation de mouvement n’´etant pas normative, le choix du crit`ere

de s´election ou de l’algorithme d´epend de chaque impl´ementation. Le codage Inter de la norme H.264/AVC offre un partitionnement variable du macrobloc. Les tailles de bloc possibles sont 16×16, 16×8, 8×16, 8×8, et chaque bloc 8×8 peut avoir un partitionnement 8×8, 8×4, 4×8 ou 4×4. Ce partitionnement variable du macrobloc permet de segmenter le mouvement lorsque c’est n´ecessaire, notamment pour les bords des objets. De plus, l’estimation de mouvement et la compensation de mouvement sous-pixellique sont utilis´ees dans le standard jusqu’au 1

4 de pixel, ceci afin de palier au caract`ere discret des images num´eriques alors que la capture se fait dans le domaine continu. Cette m´ethode a un impact sur le coˆut des vecteurs mouvement par rapport `a une estimation de mouvement au pixel entier. En effet, si un vecteur indique une translation au pixel entier de (1, 1), ´etant donn´e que les vecteurs parcourent le pixel entier, le 1

2 pixel et le 14 de pixel, le vecteur a pour valeur (4, 4). Enfin, l’option des images de r´ef´erence multiple [WZG99] a ´et´e int´egr´ee au standard H.264/AVC. Dans cette m´ethode, deux blocs voisins peuvent avoir deux pr´edicteurs temporels dans deux images diff´erentes. Une partie de nos contributions est d´edi´ee `a l’am´elioration du codage des vecteurs mouvement. Nous proposons donc, dans la section 1.3, une description d´etaill´ee du codage de cette information.

Le filtre de deblocking (lissage des effets de bloc) [LJL+03] est un outil d’am´elioration de qualit´e visuelle des images d´ecod´ees, d´egrad´ees par les effets de bloc engendr´es par la quantification des coefficients des r´esiduels transform´es. Cependant, ce filtre est int´egr´e dans la boucle de d´ecodage `a l’int´erieur du codeur pour am´eliorer la qualit´e des images de r´ef´erence qui deviennent plus “lisses” (moins d’effets de bloc) et permettent ainsi d’am´eliorer l’estimation de mouvement.

1.1.2

Codage du r´esiduel

Le codage des r´esiduels permet `a la fois d’exploiter les redondances spatiales de notre signal et d’´eliminer une partie de l’information, afin de r´eduire la quantit´e d’information `a transmettre. Ces r´esiduels issus du codage Inter et Intra sont transform´es, puis les coefficients g´en´er´es sont quantifi´es avant d’ˆetre cod´es avec un codage entropique. Dans cette section nous pr´esentons ces trois ´etapes.

1.1.2.1 Transformation

L’´etape de transformation a pour objectif de d´ecorr´eler le signal et de r´eduire le nombre de coefficients significatifs dans le bloc. Pour cela, on utilise une transform´ee par bloc permettant de mettre en ´evidence les fr´equences spatiales du signal 2D. En effet, l’´energie des r´esiduels engendr´es par le codage Inter et le codage Intra est concentr´ee dans les basses fr´equences. Notons que dans la norme H.264/AVC on exploite, avec la transform´ee, des redondances spatiales contenues dans des r´esiduels de bloc et les redondances spatiales des blocs de l’image, comme dans le standard JPEG [JPEG].

Dans la majorit´e des standards de codage vid´eo et d’image, la transform´ee utilis´ee pour d´ecorr´eler le signal est la transform´ee DCT par bloc [ANR74]. Cette transform´ee est la transform´ee de Fourier sur la partie paire de l’image. La formule de la DCT pour un bloc de taille N×N est d´efinie par :

Description du sch´ema global de codage de la norme H.264/AVC 13 F (u, v) = 2 Nc(u)c(v) N −1X i=0 N −1X j=0 xijcos[π Nu(x + 1 2)] cos[ π Nv(y + 1 2)] (1.3) avec ( c(z) = 1 2 si z = 0 c(z) = 1 sinon

o`u xijest le pixel du bloc courant `a la position (i, j) et F (u, v) le coefficient de la matrice transform´ee

`a la position (u, v). Le standard H.264/AVC utilise une transform´ee enti`ere. Cette transform´ee a les mˆemes propri´et´es que la DCT classique. L’avantage est qu’elle permet de transmettre des coefficients entiers et non des coefficients en virgule flottante, ce qui permet `a la fois de r´eduire le d´ebit et d’´eviter les probl`emes d’impl´ementation li´es `a la pr´ecision, comme dans les standards pr´ec´edents [H.263], [MPEG2]. Cette transform´ee, pour des blocs de taille 4×4 est d´efinie par :

F = C.X.CT avec C =      1 1 1 1 2 1 −1 −2 1 −1 −1 1 1 −2 2 −1      (1.4)

Comme on peut le voir, l’impl´ementation de cette transform´ee ne n´ecessite que des d´ecalages et des additions, ce qui engendre une faible complexit´e [HK01] par rapport `a la DCT classique de l’´equation (1.3). Notons qu’une partie de la transform´ee est effectu´ee dans l’´etape de quantification, ce qui permet d’obtenir l’´equation (1.4) contenant uniquement des entiers compris entre -2 et 2. Enfin la norme H.264/AVC permet d’utiliser une transform´ee DCT de taille 8×8 d´efinie par :

F = C.X.CT avec C =                8 8 8 8 8 8 8 8 12 10 6 3 −3 −6 −10 −12 8 4 −4 −8 −8 −4 4 8 10 −3 −12 −6 6 12 3 −10 8 −8 −8 8 8 −8 −8 8 6 −12 3 10 10 −3 12 −6 4 −8 8 −4 −4 8 −8 4 3 −6 10 −12 12 −10 6 −3                (1.5)

Cette transform´ee est plus complexe que la DCT 4×4, n´eanmoins sa complexit´e reste inf´erieure `a celle de la DCT classique de l’´equation (1.3).

1.1.2.2 Quantification

La quantification scalaire a pour but de r´eduire l’espace des valeurs des coefficients des r´esiduels transform´es pour r´eduire l’entropie du signal. Cette op´eration Q consiste `a diviser chaque coefficient du r´esiduel du bloc transform´e par son coefficient de quantification provenant d’une matrice de quantification et `a ne garder que la partie enti`ere. Les matrices de quantification d´ependent en g´en´eral d’un pas de quantification (QP) relatif `a la d´egradation que l’on souhaite introduire sur les r´esiduels de bloc. Cette op´eration introduit naturellement des pertes d’information dans le signal. En

effet, l’op´eration de d´equantification Q−1ne permettra pas de retrouver le signal original. L’op´eration

conjointe de quantification et de d´equantification est donn´ee par la formule suivante :

Q−1Q(x) 7→ mq si x ∈ [mq −q

2; mq +

q

2[ (1.6)

o`u x est un coefficient du r´esiduel transform´e et q est le coefficient ayant la mˆeme position dans la matrice de quantification. Pour que la reconstruction du signal soit optimale, un “offset” de quantification est ajout´e `a chaque coefficient. Dans le logiciel de r´ef´erence de la norme H.264/AVC, cet offset de quantification est fix´e de mani`ere adaptative en fonction de statistiques obtenues sur les blocs pr´ec´edemment quantifi´es.

1.1.2.3 Codage entropique et arithm´etique

A la suite de la quantification, la matrice du r´esiduel transform´e contient beaucoup de valeurs ´egales `a z´ero. La matrice quantifi´ee va ˆetre parcourue par ordre croissant des fr´equences. Notons que les basses fr´equences se situent en haut `a gauche et les hautes fr´equences se situent en bas `a droite du bloc des coefficients, comme repr´esent´e dans la figure 1.2. A la suite de ce parcours dit en zigzag on obtient un vecteur unidimensionnel qui va ˆetre cod´e `a l’aide de l’algorithme de Run Lenght Coding (RLC). Cet algorithme remplace les coefficients ´egaux `a z´ero par la distance entre deux valeurs diff´erentes de z´ero. Le nouveau vecteur g´en´er´e par le RLC est cod´e soit `a l’aide du CAVLC (Context Adaptive Variable Length Coding), soit `a l’aide du CABAC (Context Adaptive Binary Arithmetic Coding) en fonction du profil de la norme utilis´e. Ces deux codages sont adapt´es au contexte, ce qui signifie que pour chaque composante (r´esiduel, mode, vecteur, etc.) le contexte utilis´e d´epend des informations pr´ec´edemment d´ecod´ees. Par exemple, pour le codage arithm´etique du module CABAC [MSW03], les probabilit´es utilis´ees pour le codage de la valeur courante d´ependent de la composante courante et des valeurs voisines de cette mˆeme composante d´ej`a d´ecod´ee. Les probabilit´es de chaque contexte sont fixes dans la norme. Le nombre et les valeurs de ces probabilit´es possibles d´ependent des composantes.

Dans cette section nous avons volontairement ´etudi´e uniquement le sch´ema du standard H.264/- AVC. Toutefois, pr´ecisons qu’il existe plusieurs codeurs normalis´es : les pr´ed´ecesseurs de cette norme, mais aussi les concurrents comme VC1 [VC106] ou AVS [FMW]. De mˆeme, le domaine de la recherche en compression vid´eo ´etant vaste, de nombreux codeurs vid´eo ont ´et´e d´evelopp´es. Ces codeurs ont parfois des sch´emas de codage diff´erents de celui de H.264/AVC, n´eanmoins l’exploitation des re- dondances spatiales et/ou temporelles reste l’objectif recherch´e.