Une inter-trame ou inter frame ou image inter désigne dans la compression vidéo une image ou une trame appartenant à un flux qui a été codé à partir d'un algorithme de prédiction inter-trame. Elle dépend des images précédemment codées afin de prédire la position des macroblocs d'origine. L'objectif de cet algorithme est de définir un vecteur de mouvement qui traduit le déplacement d'un bloc dans une image déjà codée dite de référence et sa position dans l'image courante. Cette prédiction est aussi appelée prédiction temporelle. Elle a pour but de profiter des redondances temporelles entre les images ou trames voisines et ainsi obtenir un meilleur taux de compression. Elle se différencie de l'intra-trame qui est codée à partir d'un algorithme de prédiction spatiale. L'avantage de la prédiction inter est que pour coder un objet en mouvement, il suffit de trouver un bloc existant dans une image déjà codée qui ressemble au bloc courant et de coder la différence des valeurs des composantes entre ces deux blocs ainsi que son vecteur alors que pour la prédiction intra, chaque macrobloc de l'image courante doit être codée à partir de la texture de leurs voisins qui peut varier assez facilement.
Prédiction Inter-trame Pour être codée, une image est divisée en macroblocs (blocs de taille 16x16 pixels). Afin d'éviter de coder directement la valeur des pixels en brut, chaque macrobloc est prédit à partir soit de leur voisinage comme c'est le cas des prédictions intra-trames, soit à partir des images de référence (cas de l'inter-trame). Le codage en inter consiste à trouver un bloc similaire au bloc courant sur une image de référence. Ce processus est réalisé par un algorithme de block-matching. Si le codeur réussit à trouver un tel bloc, le vecteur reliant les deux blocs que l'on appelle vecteur de mouvement (motion vector) sera enregistré et la différence entre ce vecteur et le vecteur prédit sera codée. Ce vecteur prédit est défini par la norme et est fonction des vecteurs des macroblocs voisins déjà codés. Le processus calcule ensuite l'erreur de prédiction c'est-à-dire la différence de valeur des composantes de luminance et de chrominance entre le bloc prédit dans l'image de référence et le bloc d'origine, aussi appelée bloc résiduel. Ce dernier sera codé dans le flux binaire après des étapes de transformée et de quantification. En codage vidéo, cette étape de recherche de vecteur est appelée estimation de mouvement et celle du calcul des différences est la compensation de mouvement.
D'une façon schématique :
Vecteur de mouvement - Vecteur prédit ⇒ Vecteur différentiel qui sera codé.
Bloc ciblé - Bloc courant ⇒ Bloc résiduel qui sera transformé, quantifié et codé.
L'image suivante permet d'illustrer le processus de prédiction inter :
Du point de vue du décodeur, le processus n'a besoin que du bloc résiduel et du vecteur afin de rétablir les valeurs du macrobloc. En effet, les images de référence sont également décodées antérieurement et le vecteur prédit est connu puisque sa définition est connue par la norme. Le bloc décodé obtenu est différent du bloc d'origine étant donné qu'il s'agit d'une compression avec perte due à la quantification.
D'une façon schématique :
Vecteur prédit + Vecteur différentiel ⇒ Vecteur de mouvement à appliquer dans l'image de référence.
Bloc ciblé + Bloc résiduel ⇒ Bloc décodé.
Ce type de prédiction a des avantages et des inconvénients. Si l'algorithme est capable de trouver un bloc avec des valeurs de composantes très proches du bloc courant, l'erreur de prédiction sera petite et donc une fois transformé et compressé, la taille de l'ensemble "vecteur de mouvement et bloc résiduel" sera plus faible que celle du bloc courant non compressé. À l'inverse, si l'estimation de mouvement ne trouve pas de bloc convenable, l'erreur de prédiction sera importante et le flux codé prendra une taille plus significative que celle du bloc courant non compressé. Dans ce dernier cas, l'encodeur choisit un codage brut de ce bloc. Pour résumer, plus la prédiction est bonne, plus la différence est minimale et donc meilleure sera la compression.
Cette technique de prédiction est limitée car elle ne peut pas servir à compresser toute une vidéo à elle seule. Si le bloc pointé par le vecteur de mouvement dans une trame de référence a été aussi codé à partir d'un mode de prédiction inter-trame, les erreurs faites concernant son codage seront également propagées sur le prochain bloc. En d'autres termes, si toutes les images étaient codées avec seulement cette technique, il n'y aurait aucun moyen pour le décodeur de synchroniser le flux vidéo car il serait impossible d'obtenir les images de référence. C'est pourquoi, il est nécessaire de coder certaines images indépendamment du temps comme c'est le cas des images I appelées aussi intra frames ou I-trames qui ne sont codées qu'à partir de leur contenu avec un algorithme de prédiction spatiale et qui n'ont pas besoin de données complémentaires pour être décodées. À partir de ces images fiables, il sera alors possible de décoder les images de référence.
Structure d'un Group Of Pictures (GOP)
Dans plusieurs codecs, il est défini deux types de trame inter : images P (P-frames) et images B (B-frames). Avec les I-frames, ces trois types d'images composent un groupe d'image, alias GOP ( Group Of Pictures), qui est répété périodiquement lors d'un codage. Un GOP est composé d'une image I et contient généralement plusieurs images P et B, ce qui signifie qu'une seule image I permet de décoder tout un GOP. La synchronisation du décodage est réalisée grâce à la périodicité des images I dans le flux.
Une des structures typiques d'un GOP est IBBPBBP... L'image I est utilisée pour prédire la première image P puis à partir de ces deux images, le processus prédit les deux premières images B. La seconde image P est prédite à partir de la première image P et les deux images B comprises entre ces deux images seront les suivantes. L'image suivante illustre ce type de GOP :
Afin de pouvoir prédire les images, il est nécessaire de changer l'ordre des images à coder. C'est pourquoi durant un codage, un séquenceur établit à l'avance le type des images en connaissant la structure du GOP et change l'ordre des images à coder afin d'obtenir toutes les images de référence. Dans cet exemple, l'ordre de visualisation est I B1 B2 B3 B4 mais l'ordre de codage est I B1 B2 B3 B4. Étant donné que le GOP a besoin d'être totalement décodé pour être visible, il est nécessaire de prévoir un temps de retard entre le décodage et la sortie d'une image à l'écran.
Types de trames inter Les trames inter sont des types d'images ou de trame qui sont dépendantes d'images dites de référence pour être décodées. La différence entre les P-frames et les B-frames peuvent se résumer aux images de référence utilisées par l'algorithme de prédiction composé de l'estimation de mouvement et de la compensation de mouvement.
P-frame (image P) Les P-frames sont des images prédites en avant (forward), à partir d'une image passée. La prédiction est réalisée à partir d'une image située plus tôt dans le temps, principalement une image I, et qui nécessite moins d'informations de codage (environ 50 % de gain comparé à la taille d'une image I). Les informations à coder concernent les vecteurs de mouvement et la correction de prédiction traduite par les coefficients transformés du bloc résiduel.
B-frame (image B) Les B-frames sont définies comme des images prédites de façon bidirectionnelles, c'est-à-dire qu'elles sont prédites à partir d'une image future et d'une image passée. Ce type de prédiction nécessite également moins d'informations de codage que les P-frames car elles peuvent être prédites et interpolées à partir de deux images de référence qui l'encadrent temporellement. Tout comme les P-frames, les B-frames ont besoin des informations du vecteur de mouvement et du bloc résiduel ainsi que des images de référence pour être décodées. Afin d'éviter une trop grande propagation d'erreur, les images B ne sont généralement pas utilisées en tant qu'image de référence.
Améliorations de prédiction dans la norme H.264 L'une des améliorations majeures de la norme H.264 concerne la prédiction inter-trame. Elle permet : Un partitionnement de bloc plus flexible pour l'estimation de mouvement. Une compensation de mouvement avec une résolution jusqu'au quart de pixel Un plus grand nombre d'images de référence (Multiple references) L'amélioration du mode de codage Direct/Skip pour macrobloc.
Partitionnement de bloc de H.264 Pour réaliser une compensation de mouvement précise et efficace, chaque macrobloc de luminance peut être divisé en sous-blocs (voir figure ci-dessous). Dans la norme MPEG-2, les partitionnements sont au nombre de 4 : 1 bloc de 16x16 pixels, 2 blocs de 16x8 pixels, 2 blocs de 8x16 pixels ou 4 blocs de 8x8 pixels. Chaque partitionnement est associé à un mode de codage inter. Pour chaque mode, l'estimation de mouvement trouve le meilleur vecteur de mouvement pour le sous-bloc qui pointe sur un bloc de même taille dans l'image de référence et la compensation calcule une approximation du coût de codage du macrobloc pour le mode donné. Une fois tous les modes réalisés, l'algorithme choisit le mode de partitionnement qui a donné le coût le plus faible et effectue le codage définitif du macrobloc.
Dans la norme H.264, le nombre de modes de partitionnement augmente avec la possibilité de diviser un bloc 8x8 en sous-blocs de dimension 4x8 pixels, 8x4 pixels ou 4x4 pixels.
Précision au quart de pixel Afin d'être plus précis dans la recherche du vecteur de mouvement, l'image de référence est agrandie pour avoir une résolution plus importante. Au lieu de travailler avec une résolution au pixel près, les coordonnées du vecteur peuvent être définies à un nombre décimal de pixel. La probabilité d'obtenir un bloc similaire au bloc courant est plus grande et donc la recherche est beaucoup plus efficace. Dans la norme MPEG-2, la précision du vecteur peut atteindre le demi-pixel. En H.264, la précision au quart de pixel peut être choisie pour chaque mode de prédiction inter. Pour utiliser des valeurs de sous-pixels qui n'existent pas, des techniques d'interpolation sont utilisées. L'interpolation pour obtenir des demi-pixels consiste à appliquer un filtre de longueur 6 sur le voisinage du pixel courant. Cette première opération permet le calcul des valeurs au quart de pixel qui est réalisé par interpolation bilinéaire dans la norme H.264. La figure ci-dessous montre les différents pixels qui doivent calculés afin d'avoir une précision au quart de pixel.
Les références multiples