• Aucun résultat trouvé

Codage vidéo distribué sans voie de retour : PRISM

2.5 Codage vidéo distribué

2.5.1 Codage vidéo distribué sans voie de retour : PRISM

Le premier codeur vidéo distribué proposé dans la littérature est PRISM. PRISM est l’acronyme de Power-efficient, Robust, hIgh-compression, Syndrome-based Multimedia. Il a été présenté pour la première fois en 1999 par Puri et Ramchandran [98]. Ce codeur est caractérisé par le fait qu’il ne nécessite pas de voie de retour entre le décodeur et l’encodeur. Le codage s’effectue par bloc. Ainsi, chaque trame de la séquence vidéo est divisée en blocs de taille 8 × 8 disjoints (les blocs ne se chevauchent pas). Un classificateur choisit le mode d’encodage de chaque bloc : un bloc peut ne pas être codé (mode skip), être codé en Intra (mode intra) ou être codé en Wyner-Ziv (mode inter). La version la plus récente du codeur est celle décrite dans [100]. C’est cette dernière que nous allons présenter.

2.5.1.1 Architecture de l’encodeur

On commence par décrire l’architecture de l’encodeur (présentée sur la figure 2.17). Les étapes d’encodage sont les suivantes :

Information sur le canal

DCT Quantification Codage des syndromes Trames d’origine Classification CRC Estimation de la corr´elation Flux encod´e Calcul du

Figure 2.17 – Architecture de l’encodeur PRISM [100].

A. Transformée spatiale :On commence par appliquer une DTC sur le bloc source de façon à approximer une transformée de Karhunen-Loeve (KL) de l’innovation repré- sentée par le bruit de corrélation entre le vecteur source et son information adjacente. Les coefficients transformées X sont alors ordonnés sur un plan unidimensionnel (de 64 coefficients) en effectuant un balayage en zig-zag sur le bloc 2-D (de taille 8 × 8). B. Quantification : Les coefficients DCT sont quantifiés par un quantificateur scalaire.

Le pas de quantification est choisi en fonction de la qualité de la reconstruction désirée. C. Classification : Chaque bloc est décomposé en plans de bits comme le montre la figure 2.18 pour un bloc de 64 coefficients. Dans cette figure, les bits correspondants à des cases de couleur blanche peuvent être prédits à partir de l’information adjacente au décodeur, ils ne sont donc pas codés. Les bits restants (en gris et en noir sur la figure) ne peuvent pas être prédits au décodeur et nécessitent d’être encodés. Pour choisir quels bits seront codés, on utilise un classificateur pour estimer le bruit de quantification entre chaque bloc et son prédicteur temporel. Ce dernier est obtenu en mesurant le nombre de bits les plus significatifs qu’il est possible de prédire au décodeur pour chaque coefficient quantifié. Le choix du classificateur dépend du degré de complexité autorisé au décodeur et des conditions du canal de transmission :

– Si aucune estimation de mouvement n’est possible, l’encodeur utilise le résidu entre le bloc courant (dans le domaine pixel) et le bloc correspondant dans la trame pré- cédente pour évaluer le bruit de corrélation. La classe du bloc est déterminée par un seuillage de l’erreur quadratique entre le bloc courant et le bloc de la trame précédente. Selon la valeur du seuil, le bloc peut appartenir à 16 classes différentes numérotées de 0 à 15. A chaque classe est associée un bruit de corrélation dont la statistique a été obtenue préalablement par un entraînement de l’algorithme. Le bruit de corrélation détermine le nombre de plans de bits les moins significatifs pour chaque coefficient. Le bruit de corrélation étant sur-estimé (du fait de l’absence d’es- timation de mouvement), le nombre de plans de bits à transmettre l’est aussi. C’est pourquoi, les plans de bits les plus significatifs sont codés par un code de canal basé sur les cosets (les plans de bits de couleur grise sur la figure 2.18), tandis que les bits

restants sont codés par un codeur entropique sans prédicteur (les plans de bits de couleur noire sur la figure 2.18).

– Si au contraire, une estimation de mouvement complexe est permise à l’encodeur, le classificateur utilise le bruit de corrélation entre le bloc courant et son meilleur prédicteur temporel compensé en mouvement pour déterminer le nombre de bits les moins significatifs qu’il sera nécessaire de transmettre au décodeur. Ces plans de bits sont codés par un codeur entropique. En utilisant une estimation de mouvement complexe, on élimine toutes les incertitudes sur le nombre de bits qu’il sera possible de prédire au décodeur, c’est pourquoi aucun bit n’est codé par le code de canal (pas de plans de bits de couleur grise sur la figure 2.18).

C0 0 1 2 3 4 (max−2) (max−1) max C1 C2 C3 C4 C5 C62 C63

Figure 2.18 – Plans de bit d’un bloc de 64 coefficients. Le plan de bit 0 correspond au bit le moins significatif. Chaque couleur correspond à un codage différent : pas de codage (blanc), codage de Wyner-Ziv (gris), codage entropique (noir).

D. Codage de syndromes : Les bits les moins significatifs de chaque bloc, déterminés par le classificateur, sont codés suivant leur couleur : les blocs noirs dans la figure 2.18 sont codés par un codeur entropique, les blocs gris sont codés par un code de canal basé sur les cosets. Les deux types de codage sont les suivants :

– Codage entropique : La première étape est la construction d’un alphabet de codage entropique qui consiste en un quadruplet (run,depth, path, last). run indique le nombre de coefficients précédent le coefficient courant pour lesquels aucun plan de bits n’a été encodé, depth indique le nombre de plans de bits non significatifs encodés pour le coefficient courant, path indique le chemin dans l’arbre binaire qui spécifie le coset contenant le coefficient courant. Enfin, last indique si le coefficient non nul est le dernier dans le bloc. Une fois l’alphabet construit, on utilise un codeur arithmétique pour coder l’information de syndrome.

– Code de canal basé sur les cosets : Le syndrome est calculé à partir d’une matrice de parité d’un code correcteur d’erreur linéaire (n, ki) : si = Hibi où si et

Hi représentent le syndrome et la matrice de parité et bi représente les bits à coder.

Le taux d’encodage est n−ki

n bits par coefficient. Comme la taille des blocs est petite

(64 échantillons pour un bloc 8 × 8), plutôt que d’utiliser des codes LDPC ou des turbo codes, le code utilisé est un code BCH (Bose, Ray-Chaudhuri, Hocquenghem) [101]. Le paramètre kiassocié au i-ème code de canal dépend de la classe i à laquelle

E. Génération d’un CRC : Un contrôle de redondance cyclique (en anglais Cyclic Redundancy Check, CRC) est utilisé pour générer une signature, un CRC, pour chaque séquence de mots de code quantifiés. Ce CRC permet au décodeur de vérifier si la séquence a bien été décodée.

2.5.1.2 Architecture du décodeur

L’architecture du décodeur de PRISM est présentée sur la figure 2.19. Les différentes étapes de décodage sont les suivantes :

Estimation D´ecodage des syndromes DCT V´erification Estimation MMSE Trames d´ecod´ees CRC de mouvement OUI NON Flux encod´e inverse du CRC

Figure 2.19 – Architecture du décodeur de PRISM [100].

A. Génération de l’information adjacente : Le décodeur réalise une estimation de mouvement pour générer les prédicteurs candidats au décodage des mots de code quan- tifiés représentés par leur syndrome.

B. Décodage des syndromes : L’information adjacente Y est un prédicteur candidat obtenu par le générateur d’information adjacente. Le décodage du syndrome se fait en deux étapes. Dans une première étape, les bits codés entropiquement (les plans de bits de couleur noir dans la figure 2.18) sont décodés. Si aucun bit n’a été codé par le code de canal (les plans de bits de couleur grise dans la figure 2.18), alors les bits décodés entropiquement identifient de façon unique le coset dans lequel l’information adjacente Y doit être décodée. Si, au contraire, un plan de bit a été codé par le code de canal, c’est la combinaison du coset de ce plan de bit et des bits décodées entropiquement qui spécifie le coset dans lequel Y doit être décodée. Une fois l’identification du coset effectuée, la deuxième étape est le décodage qui consiste à trouver le mot de code le plus proche de Y dans un coset spécifique. Ce décodage souple est basée sur la méthode de [102].

C. Vérification du CRC : Une fois le décodage des syndromes effectué, un CRC est calculé sur le bloc décodé. Si le CRC calculé ne correspond pas à celui transmis par l’encodeur, l’algorithme revient à l’étape de génération de l’information adjacente et un nouveau prédicteur candidat est utilisé.

D. Estimation et reconstruction :Une fois la séquence de mots de code décodée, la sé- quence de coefficients transformés est reconstruite en choisissant l’estimé qui minimise l’erreur quadratique à partir du prédicteur et du mot de code quantifié.

E. Transformée inverse : Une fois tous les coefficients reconstruits, l’opération de ba- layage en zig-zag faite à l’encodeur est inversée pour obtenir un bloc 2-D de coefficients reconstruits. Les coefficients transformés sont ensuite inversés par la transformée DCT inverse pour obtenir les valeurs des pixels du bloc décodé.

Comme on a pu le voir, PRISM a la particularité de proposer une architecture flexible qui lui permet de contrôler le compromis entre la complexité de l’encodeur et celle du déco- deur. Cette flexibilité permet notamment d’envisager l’utilisation à l’encodeur de méthodes d’estimation de mouvement rapide telle que celle proposée dans [103].