Académique Documents
Professionnel Documents
Culture Documents
CCITT T.81
COMITÉ CONSULTATIF (09/92)
INTERNATIONAL
TÉLÉGRAPHIQUE ET TÉLÉPHONIQUE
TECHNOLOGIE DE L'INFORMATION –
COMPRESSION NUMÉRIQUE
ET CODAGE DES IMAGES FIXES
DE NATURE PHOTOGRAPHIQUE –
PRESCRIPTIONS ET LIGNES DIRECTRICES
Recommandation T.81
Avant-propos
L'UIT (Union internationale des télécommunications) est une Institution spécialisée des Nations Unies dans le domaine
des Télécommunications. Le CCITT (Comité consultatif international télégraphique et téléphonique) est un organe
permanent de l'UIT. Au sein du CCITT, qui est l'entité qui établit les normes mondiales (Recommandations) sur les
télécommunications, participent quelque 166 pays membres, 68 exploitations privées reconnues, 163 organisations
scientifiques et industrielles et 39 organisations internationales.
L'approbation des Recommandations par les membres du CCITT s'effectue selon la procédure définie dans la Réso-
lution n° 2 du CCITT (Melbourne, 1988). De plus, l'Assemblée plénière du CCITT, qui se réunit tous les quatre ans,
approuve les Recommandations qui lui sont soumises et établit le programme d'études pour la période suivante.
Dans certains secteurs de la technologie de l'information qui correspondent à la sphère de compétence du CCITT,
les normes nécessaires se préparent en collaboration avec l'ISO et la CEI. Le texte de la Recommandation T.81 du
CCITT a été approuvé le 18 septembre 1992. Son texte est publié, sous forme identique, comme Norme interna-
tionale ISO/CEI 10918-1.
Ce fichier électronique a été republié en mars 2004 sans modification du contenu technique pour des questions liées au
format retraitable, le texte d'origine ayant été composé en Winword 2.0 et les équations étant souvent devenues illisibles.
De plus, des tableaux ont été centrés et la lisibilité des légendes de la figure B.17 a été améliorée.
___________________
NOTE DU CCITT
Dans cette Recommandation, l'expression «Administration» est utilisée pour désigner de façon abrégée aussi bien une
administration de télécommunications qu'une exploitation privée reconnue.
UIT 2004
Droits de reproduction réservés. Aucune partie de cette publication ne peut être reproduite ni utilisée sous quelque forme
que ce soit et par aucun procédé, électronique ou mécanique, y compris la photocopie et les microfilms, sans l'accord
écrit de l'UIT.
Table des matières
Page
Introduction ............................................................................................................................................................... iii
1 Domaine d'application.................................................................................................................................... 1
2 Références normatives ................................................................................................................................... 1
3 Définitions, abréviations et symboles ............................................................................................................ 1
4 Considérations générales................................................................................................................................ 15
5 Spécifications du format de transfert.............................................................................................................. 24
6 Spécifications du codeur ................................................................................................................................ 25
7 Spécifications du décodeur............................................................................................................................. 26
Annexe A – Définitions mathématiques.................................................................................................................. 27
Annexe B – Formats de données comprimées......................................................................................................... 34
Annexe C – Spécification des tables de Huffman ................................................................................................... 54
Annexe D – Codage arithmétique ........................................................................................................................... 58
Annexe E – Procédures de contrôle du codeur et du décodeur ............................................................................... 81
Annexe F – Mode de fonctionnement basé DCT séquentiel .................................................................................. 91
Annexe G – Mode de fonctionnement basé DCT progressif.................................................................................. 121
Annexe H – Mode de fonctionnement sans perte................................................................................................... 134
Annexe J – Mode de fonctionnement hiérarchique ................................................................................................ 139
Annexe K – Exemples et directives........................................................................................................................ 145
Annexe L – Brevets ................................................................................................................................................ 181
Annexe M – Bibliographie ..................................................................................................................................... 183
NORME INTERNATIONALE
ISO/CEI 10918-1 : 1993(F)
Rec. T.81 du CCITT (1992 F)
RECOMMANDATION DU CCITT
1 Domaine d'application
La présente Recommandation | Norme internationale est applicable aux données d'images fixes numériques de nature
photographique, en niveaux de gris ou en couleurs. Elle est applicable à une large gamme d'applications nécessitant
l'utilisation d'images comprimées. Elle ne s'applique pas aux données d'images en deux tons.
La présente Spécification
– spécifie les processus de conversion de données d'image source en données d'image comprimées;
– spécifie les processus de conversion de données d'image comprimées en données d'image reconstruite;
– donne des directives de réalisation pratique de ces processus;
– spécifie des représentations codées de données d'image comprimées.
NOTE – La présente Spécification ne définit pas une représentation complète des images codées – qui devrait inclure des
paramètres dépendant de l'application, tels que le facteur d'aspect, la disposition des échantillons de chaque composante et la
définition de l'espace des couleurs.
2 Références normatives
Les Recommandations du CCITT et Normes internationales suivantes contiennent des dispositions qui, par suite de la
référence qui y est faite, constituent des dispositions variables pour la présente Recommandation du CCITT | Norme
internationale. Au moment de la publication, les éditions indiquées étaient en vigueur. Toute Recommandation et Norme
sont sujettes à révision et les parties prenantes aux accords fondés sur la présente Recommandation du CCITT | Norme
internationale sont invitées à rechercher la possibilité d'appliquer les éditions les plus récentes des Recommandations et
Normes indiquées ci-après. Les membres de la CEI et de l'ISO possèdent le registre des Normes internationales en
vigueur. Le Secrétariat du CCITT tient à jour une liste des Recommandations du CCITT en vigueur.
– Recommandation T.80 du CCITT (1992), Composantes communes pour la compression et la communica-
tion d'images – Principes de base.
3.1.1 format abrégé (abbreviated format): Représentation de données d'image comprimées dans laquelle manquent
certaines ou toutes les spécifications de tables nécessaires pour le décodage, ou représentation de données de
spécification de tables sans en-tête de trame, en-tête de balayage ni segment à codage entropique.
3.1.2 coefficient AC (AC coefficient): Tout coefficient DCT de fréquence non nulle dans au moins une dimension.
3.1.3 décodage arithmétique (adaptatif) (binaire) ((adaptive) (binary) arithmetic decoding): Procédure de
décodage entropique, rétablissant la séquence de symboles à partir de la séquence binaire produite par le codeur
arithmétique.
3.1.4 codage arithmétique (adaptatif) (binaire) ((adaptive) (binary) arithmetic encoding): Procédure de codage
entropique, opérant par subdivision récursive de la probabilité de la séquence de symboles déjà codée.
3.1.7 codeur arithmétique (arithmetic encoder): Dispositif réalisant une procédure de codage arithmétique.
3.1.8 (séquentiel) de base (baseline (sequential)): Processus déterminé de codage et de décodage séquentiel basé
DCT, spécifié dans la présente Spécification et requis pour tous les processus de décodage basés DCT.
3.1.11 bloc (block): Tableau 8 × 8 d'échantillons ou tableau 8 × 8 de valeurs des coefficients DCT, d'une
composante.
3.1.12 rangée de blocs (block-row): Suite de huit lignes d'une composante, divisée en blocs 8 × 8.
3.1.13 octet (byte): Groupe de 8 bits.
3.1.14 bourrage d'octets (byte stuffing): Procédure par laquelle le codeur de Huffman ou le codeur arithmétique
insère un octet zéro dans le segment à codage entropique, après avoir généré un octet à codage hexadécimal X’FF’.
3.1.15 bit de retenue (carry bit): Bit du registre de code du codeur arithmétique, positionné si une retenue indique le
dépassement des 8 bits réservés, dans ce registre, à l'octet de sortie.
3.1.16 fonction plafond (ceiling function): Procédure mathématique consistant à remplacer un nombre réel par le
plus proche entier supérieur ou égal.
3.1.17 classe (de processus de codage) (class (of coding process)): Processus de codage avec perte ou sans perte.
3.1.18 registre de code (code register): Registre du codeur arithmétique contenant les bits de plus faible poids d'un
segment dont le codage entropique a été partiellement réalisé. Ou bien, registre du décodeur arithmétique contenant les
bits de plus fort poids d'un segment dont le décodage entropique a été partiellement réalisé.
3.1.19 codeur (coder): Réalisation d'un processus de codage.
3.1.20 codage (coding): Codage ou décodage.
3.1.21 modèle de codage (coding model): Procédure de conversion des données d'entrée en symboles à coder.
3.1.22 processus (de codage) ((coding) process): Terme général désignant un processus de codage, un processus de
décodage, ou les deux.
3.1.23 image en couleurs (colour image): Image de nature photographique, à plusieurs composantes.
3.1.24 colonnes (columns): Echantillons d'une composante, disposés par lignes.
3.1.25 composante (component): Un des tableaux bidimensionnels constituant une image.
3.1.26 données comprimées (compressed data): Données d'image comprimées ou données de spécification de tables
comprimées, ou les deux.
3.1.27 données d'image comprimées (compressed image data): Représentation codée d'une image, telle que
spécifiée dans la présente Spécification.
3.1.28 compression (compression): Réduction du nombre de bits utilisés pour représenter des données d'image
source.
3.1.29 permutation conditionnelle (conditional exchange): Permutation des intervalles de probabilité du MPS et du
LPS chaque fois que la taille de l'intervalle du LPS est supérieure à la taille de l'intervalle du MPS (en codage
arithmétique).
3.1.30 estimation de probabilité (conditionnelle) ((conditional) probability estimate): Valeur de probabilité
affectée au LPS par la machine à états d'estimation de probabilité (en codage arithmétique).
3.1.31 table décisionnelle (conditioning table): Ensemble de paramètres déterminant la sélection d'une des relations
définies entre des décisions de codage antérieures et les estimations de probabilité conditionnelles utilisées en codage
arithmétique.
3.1.32 contexte (context): Ensemble des décisions binaires codées auparavant, utilisé pour créer l'indice de la
machine à états d'estimation de probabilité (en codage arithmétique).
3.1.33 image de nature photographique (continuous-tone image): Image dont les composantes ont plus d'un bit par
échantillon.
3.1.34 unité de données (data unit): Un bloc 8 × 8 d'échantillons d'une composante, dans les processus basés DCT;
un échantillon, dans les processus sans perte.
3.1.35 coefficient DC (DC coefficient): Coefficient DCT de fréquence nulle dans les deux dimensions.
3.1.36 prédiction DC (DC prediction): Procédure utilisée par les codeurs basés DCT, par laquelle le coefficient DC
quantifié du bloc 8 × 8 précédemment codé dans la même composante est soustrait du coefficient DC quantifié courant.
3.1.37 coefficient (DCT) ((DCT) coefficient): Amplitude d'une fonction spécifique à base cosinus – peut se référer à
un coefficient DCT d'origine, à un coefficient DCT quantifié ou à un coefficient DCT déquantifié.
3.1.38 décodeur (decoder): Dispositif réalisant un processus de décodage.
3.1.39 processus de décodage (decoding process): Processus qui génère une image de nature photographique, à
partir de données d'image comprimées d'entrée.
3.1.40 valeurs décisionnelles par défaut (default conditioning): Valeurs définies pour les tables décisionnelles de
codage arithmétique, au début du codage d'une image.
3.1.41 déquantification (dequantization): Procédure inverse de la quantification, par laquelle le décodeur rétablit
une représentation des coefficients DCT.
3.1.42 composante différentielle (differential component): Différence entre une composante d'entrée dérivée de
l'image source, et la composante de référence correspondante dérivée de la trame précédente dans cette composante (en
mode de codage hiérarchique).
3.1.43 trame différentielle (differential frame): Trame, dans un processus hiérarchique, dont les composantes
différentielles sont codées ou décodées.
3.1.44 (données) (numériques) d'image reconstruite ((digital) reconstructed image (data)): Image de nature
photographique, en sortie d'un décodeur défini dans la présente Spécification.
3.1.45 (données) (numériques) d'image source ((digital) source image (data)): Image de nature photographique, en
entrée d'un codeur défini dans la présente Spécification.
3.1.46 image (fixe) (numérique) ((digital) (still) image): Ensemble de tableaux bidimensionnels de données
entières.
3.1.47 transformation en cosinus discrète (DCT) (discrete cosine transform): Transformation en cosinus discrète
directe ou transformation en cosinus discrète inverse.
3.1.48 (filtre de) sous-échantillonnage (downsampling (filter)): Procédure de réduction de la résolution spatiale
d'une image (en mode de codage hiérarchique).
3.1.49 codeur (encoder): Dispositif réalisant un processus de codage.
3.1.50 processus de codage (encoding process): Processus produisant à partir d'une image de nature
photographique, des données d'image comprimées.
3.1.51 segment (de données) à codage entropique (entropy-coded (data) segment): Séquence indépendamment
décodable d'octets de données d'image comprimées, à codage entropique.
3.1.52 pointeur (de segment à codage entropique) ((entropy-coded segment) pointer): Variable pointant vers le
dernier octet mis en place (ou appelé) dans le segment à codage entropique.
3.1.53 décodeur entropique (entropy decoder): Dispositif réalisant une procédure de décodage entropique.
3.1.54 décodage entropique (entropy decoding): Procédure sans perte rétablissant la séquence de symboles à partir
de la séquence binaire produite par le codeur entropique.
3.1.55 codeur entropique (entropy encoder): Dispositif réalisant une procédure de codage entropique.
3.1.56 codage entropique (entropy encoding): Procédure sans perte convertissant une séquence de symboles
d'entrée en une séquence binaire telle que le nombre moyen de bits par symbole tende vers l'entropie des symboles
d'entrée.
3.1.57 processus (basé DCT) étendu (extended (DCT-based) process): Terme désignant des processus de codage et
de décodage basés DCT, dans lesquels des capacités additionnelles sont ajoutées au processus séquentiel de base.
3.1.58 transformation en cosinus discrète directe (FDCT) (forward discrete cosine transform): Transformation
mathématique utilisant des fonctions à base cosinus, qui convertit un bloc d'échantillons en un bloc correspondant de
coefficients DCT d'origine.
3.1.59 trame (frame): Groupe d'un ou plusieurs balayages (utilisant tous le même processus basé DCT ou sans perte)
au travers des données d'une ou plusieurs composantes d'une image.
3.1.60 en-tête de trame (frame header): Segment marqueur contenant un marqueur de début de trame et les
paramètres de trame associés, codés au début d'une trame.
3.1.61 fréquence (frequency): Indice dans le tableau bidimensionnel des coefficients DCT.
3.1.62 bande (de fréquences) ((frequency) band): Suite de coefficients de la séquence en zigzag (en mode de codage
progressif).
3.1.63 pleine progression (full progression): Processus utilisant la sélection spectrale et les approximations
successives (en mode de codage progressif).
3.1.64 image en niveaux de gris (grayscale image): Image de nature photographique à une seule composante.
3.1.65 hiérarchique (hierarchical): Mode de fonctionnement pour le codage d'une image, dans lequel la première
trame d'une composante donnée est suivie de trames qui codent les différences entre les données source et les données
reconstruites à partir de la trame précédente dans cette composante. Des changements de résolution sont autorisés entre
trames.
3.1.66 décodeur hiérarchique (hierarchical decoder): Séquence de processus de décodage dans laquelle la première
trame dans chaque composante est suivie de trames qui décodent un tableau de différences dans chaque composante et
l'ajoutent aux données reconstruites à partir de la trame précédente dans cette composante.
3.1.67 codeur hiérarchique (hierarchical encoder): Mode de fonctionnement dans lequel la première trame dans
chaque composante est suivie de trames qui codent le tableau des différences entre les données source et les données
reconstruites à partir de la trame précédente dans cette composante.
3.1.68 facteur d'échantillonnage horizontal (horizontal sampling factor): Nombre relatif d'unités de données
horizontales dans une composante particulière, exprimé par rapport au nombre d'unités de données horizontales dans les
autres composantes.
3.1.69 décodeur de Huffman (Huffman decoder): Dispositif réalisant une procédure de décodage de Huffman.
3.1.70 décodage de Huffman (Huffman decoding): Procédure de décodage entropique, rétablissant le symbole à
partir de chaque code de longueur variable produit par le codeur de Huffman.
3.1.71 codeur de Huffman (Huffman encoder): Dispositif réalisant une procédure de codage de Huffman.
3.1.72 codage de Huffman (Huffman encoding): Procédure de codage entropique affectant un code de longueur
variable à chaque symbole d'entrée.
3.1.73 table de Huffman (Huffman table): Ensemble des codes de longueur variable requis dans un codeur de
Huffman et dans un décodeur de Huffman.
3.1.74 données d'image (image data): Données d'image source ou données d'image reconstruite.
3.1.75 format de transfert (interchange format): Représentation de données d'image comprimées pour transfert
entre environnements d'application.
3.1.76 entrelacé (interleaved): Terme qualifiant le multiplexage répétitif de petits groupes d'unités de données de
chacune des composantes d'un balayage, dans un ordre spécifique.
3.1.77 transformation en cosinus discrète inverse (IDCT) (inverse discrete cosine transform): Transformation
mathématique utilisant des fonctions à base cosinus, convertissant un bloc de coefficients DCT déquantifiés en un bloc
correspondant d'échantillons.
3.1.78 groupe commun d'experts sur la compression des images de nature photographique (JPEG) (joint
photographic experts group): Nom informel du goupe qui a élaboré la présente Spécification, résultant de la
collaboration entre le CCITT et l'ISO/CEI.
3.1.79 sortie latente (latent output): Sortie du décodeur arithmétique, conservée en attente de résolution de retenue
(en codage arithmétique).
3.1.80 symbole le moins probable (LPS) (less probable symbol): Valeur la moins probable d'une décision binaire.
3.1.81 décalage de niveau (level shift): Procédure utilisée par les codeurs et décodeurs basés DCT, et où chaque
échantillon d'entrée est converti soit d'une représentation non signée en une représentation en complément à deux, soit
d'une représentation en complément à deux en une représentation non signée.
3.1.82 sans perte (lossless): Terme qualifiant des processus et procédures de codage et de décodage, dont la sortie du
décodage est identique à l'entrée du codage.
3.1.83 codage sans perte (lossless coding): Mode de fonctionnement se référant à un des processus de codage
définis dans la présente Spécification, et dont toutes les procédures sont «sans perte» (voir l'Annexe H).
3.1.84 avec perte (lossy): Terme qualifiant les processus de codage et de décodage qui ne sont pas «sans perte».
3.1.85 marqueur (marker): Code de deux octets dont le premier octet est l'hexadécimal FF (X’FF’) et le second
octet une valeur entre 1 et l'hexadécimal FE (X’FE’).
3.1.86 segment marqueur (marker segment): Marqueur suivi de l'ensemble de paramètres associés.
3.1.87 rangée de MCU (MCU-row): Plus petite séquence de MCU (unités codées minimales) contenant au moins
une ligne d'échantillons ou une rangée de blocs de chaque composante du balayage.
3.1.88 unité codée minimale (MCU) (minimum coded unit): Plus petit groupe d'unités de données codées.
3.1.89 modes (de fonctionnement) (modes (of operation)): Les quatre grandes catégories de processus de codage
d'image définies dans la présente Spécification.
3.1.90 symbole le plus probable (MPS) (more probable symbol): Valeur la plus probable d'une décision binaire.
3.1.91 trame non différentielle (non-differential frame): Dans un codeur ou un décodeur hiérarchique, première
trame de toute composante, dans laquelle les composantes sont codées ou décodées sans soustraction d'une composante
de référence. Dans les modes autres que hiérarchiques, toute trame.
3.1.92 non entrelacé (non-interleaved): Terme qualifiant la séquence de traitement des unités de données lorsque le
balayage n'a qu'une seule composante.
3.1.93 paramètres (parameters): Entiers de longueur fixe 4 bits, 8 bits ou 16 bits, utilisés dans les formats de
données comprimées.
3.1.94 transformation point (point transform): Changement d'échelle d'un échantillon ou d'un coefficient DCT.
3.1.96 prédicteur (predictor): Combinaison linéaire de valeurs reconstruites antérieurement (en mode de codage
sans perte).
3.1.97 machine à états d'estimation de probabilité (probability estimation state machine): Table chaînée de
valeurs de probabilités et d'indices, utilisée pour l'estimation de la probabilité du LPS (en codage arithmétique).
3.1.98 intervalle de probabilité (probability interval): Probabilité d'une suite particulière de décisions binaires, dans
l'ensemble ordonné de toutes les suites possibles (en codage arithmétique).
3.1.99 sous-intervalle (de probabilité) ((probability) sub-interval): Partie d'un intervalle de probabilité affecté à
l'une des deux valeurs de décision binaire possibles (en codage arithmétique).
3.1.100 procédure (procedure): Ensemble d'étapes de traitement, accomplissant une des tâches d'un processus de
codage ou de décodage.
3.1.126 transcodeur (transcoder): Procédure de conversion des données d'image comprimées d'un processus de
codage en données d'image comprimées d'un autre processus de codage.
3.1.127 quantification (uniforme) ((uniform) quantization): Procédure d'application d'une loi linéaire aux
coefficients DCT pour réaliser la compression.
3.1.128 (filtre de) suréchantillonnage (upsampling (filter)): Procédure d'augmentation de la résolution spatiale d'une
image.
3.1.129 facteur d'échantillonnage vertical (vertical sampling factor): Nombre relatif d'unités de données verticales
d'une composante, exprimé par rapport au nombre d'unités de données verticales des autres composantes.
3.1.130 octet nul (zero byte): Octet X’00’.
3.1.131 séquence en zigzag (zig-zag sequence): Ordre séquentiel spécifique des coefficients DCT, allant
(approximativement) des fréquences spatiales les plus basses aux plus élevées.
3.1.132 prédicteur à 3 échantillons (3-sample predictor): Combinaison linéaire des 3 échantillons reconstruits les
plus proches, situés à gauche et au-dessus (en mode de codage sans perte).
3.2 Symboles
Les symboles utilisés dans la présente Spécification sont donnés ci-après.
A Intervalle de probabilité (probability interval)
AC Coefficient DCT AC (AC DCT coefficient)
ACji Coefficient AC prédit à partir de valeurs DC (AC coefficient predicted from DC values)
Ah Paramètre de position binaire en approximations successives (haut) (successive
approximation bit position, high)
Al Paramètre de position binaire en approximations successives (bas) ou de transformation point
(successive approximation bit position, low)
Api ième paramètre de 8 bits du segment APPn (ith 8-bit parameter in APPn segment)
APPn Marqueur réservé aux segments d'application (marker reserved for application segments)
B Octet courant dans les données comprimées (current byte in compressed data)
B2 Octet suivant dans les données comprimées lorsque B = X’FF’ (next byte in compressed data
when B = X’FF’)
BE Compteur des bits de correction en mémoire tampon, en vue du codage de Huffman, dans le
processus par approximations successives (counter for buffered correction bits for Huffman
coding in the successive approximation process)
BITS Liste de 16 octets contenant le nombre de codes de Huffman de chaque longueur (16-byte list
containing number of Huffman codes of each length)
BP Pointeur vers les données comprimées (pointer to compressed data)
BPST Pointeur vers l'octet précédant le début du segment à codage entropique (pointer to byte
before start of entropy-coded segment)
BR Compteur des bits de correction en mémoire tampon, en vue du codage de Huffman, dans le
processus par approximations successives (counter for buffered correction bits for Huffman
coding in the successive approximation process)
Bx Bit modifié par une retenue (byte modified by a carry-over)
C Valeur instantanée du train binaire contenu dans le registre de code (value of bit stream in
code register)
Ci Identificateur de composante de trame (component identifier for frame)
Cu Facteur d'échelle de la DCT, dépendant de la fréquence horizontale (horizontal frequency
dependent scaling factor in DCT)
C-low 16 bits de plus faible poids du registre de code du décodeur arithmétique (low order 16 bits of
the arithmetic decoder code register)
Cmi ième paramètre de 8 bits du segment COM (ith 8-bit parameter in COM segment)
Cx 16 bits de plus fort poids du registre de code du décodeur arithmétique (high order 16 bits of
arithmetic decoder code register)
dji Unité de données de position horizontale i et de position verticale j (data unit from horizontal
position i, vertical position j)
Da En codage DC, différence codée pour le précédent bloc de la même composante; en codage
sans perte, différence codée pour l'échantillon se trouvant immédiatement à gauche (in DC
coding, the DC difference coded for the previous block from the same component; in lossless
coding, the difference coded for the sample immediately to the left)
Db Différence codée pour l'échantillon immédiatement supérieur (the difference coded for the
sample immediately above)
DCi Coefficient DC du ième bloc d'une composante (DC coefficient for ith block in component)
DCk kième valeur DC utilisée dans la prédiction des coefficients alternatifs (kth DC value used in
prediction of AC coefficients)
EHUFCO Table de codage Huffman du codeur (Huffman code table for encoder)
EHUFSI Table du codeur, contenant les tailles des codes de Huffman (encoder table of Huffman code
sizes)
EOB Fin de bloc en codage séquentiel; fin de bande en codage progressif (end-of-block for
sequential; end-of-band for progressive)
EOBn Catégorie de longueur des plages d'EOB (run length category for EOB runs)
EOB0, EOB1, ... EOB14 Catégories de longueur des plages d'EOB (run length categories for EOB runs)
EXP Marqueur d'expansion des composantes de référence (expand reference components marker)
Hmax Plus grand facteur d'échantillonnage horizontal (largest horizontal sampling factor)
HUFFCODE Liste des codes de Huffman correspondant aux longueurs dans HUFFSIZE (list of Huffman
codes corresponding to lengths in HUFFSIZE)
HUFFVAL Liste des valeurs affectées à chaque code de Huffman (list of values assigned to each
Huffman code)
Index(S) Entrée de la machine à états d'estimation de probabilité, pour l'indice de contexte S (index to
probability estimation state machine table for context index S)
JPG Marqueur réservé aux extensions JPEG (marker reserved for JPEG extensions)
JPGn Marqueur réservé aux extensions JPEG (marker reserved for JPEG extensions)
Kmin Indice du premier coefficient AC d'une bande (1 en DCT séquentiel) (index of 1st AC
coefficient in band (1 for sequential DCT))
Li Elément de la liste BITS du segment DHT (element in BITS list in DHT segment)
Li(t) Elément de la liste BITS du segment DHT pour la table de Huffman t (element in BITS list in
the DHT segment for Huffman table t)
LPS Symbole le moins probable (less probable symbol (in arithmetic coding))
m Compteur modulo 8 associé au marqueur RSTm (modulo 8 counter for RSTm marker)
mt Nombre de paramètres Vi,j dans la table de Huffman t (number of Vi,j parameters for Huffman
table t)
M Masque binaire utilisé pour le codage de la valeur absolue de V (bit mask used in coding
magnitude of V)
MAXCODE Table contenant la valeur maximale du code de Huffman correspondant à chaque longueur
de code (table with maximum value of Huffman code for each code length)
MCUR Nombre de MCU nécessaires pour constituer une rangée de MCU (number of MCU required
to make up one MCU-row)
MINCODE Table contenant la valeur minimale du code de Huffman correspondant à chaque longueur de
code (table with minimum value of Huffman code for each code length)
MPS Symbole le plus probable (en codage arithmétique) (more probable symbol (in arithmetic
coding))
MPS(S) Symbole le plus probable pour l'indice de contexte S (more probable symbol for context-
index S)
M2, M3, M4, ... M15 Désignation des indices de contexte, pour le codage des bits de valeur absolue dans les
modèles de codage arithmétique (designation of context-indices for coding of magnitude bits
in the arithmetic coding models)
N Compteur d'unités de données pour le codage des MCU (data unit counter for MCU coding)
Nb Nombre d'unités de données dans une MCU (number of data units in MCU)
Next_Index_LPS Nouvelle valeur d'Index(S) après renormalisation du LPS (new value of Index(S) after a LPS
renormalization)
Next_Index_MPS Nouvelle valeur d'Index(S) après renormalisation du MPS (new value of Index(S) after a MPS
renormalization)
NL Nombre de lignes défini dans un segment DNL (number of lines defined in DNL segment)
Qji Valeur de quantification du coefficient ACji (quantizer value for coefficient ACji)
Qvu Valeur de quantification du coefficient DCT Svu (quantization value for DCT coefficient Svu)
QACji Coefficient AC quantifié prédit d'après les valeurs DC (quantized AC coefficient predicted
from DC values)
QDCk kième valeur DC quantifiée utilisée dans la prédiction des coefficients AC (kth quantized DC
value used in prediction of AC coefficients)
Qe(S) Estimation de probabilité du LPS pour l'indice de contexte S (LPS probability estimate for
context index S)
R Longueur d'une plage de coefficients AC d'amplitude nulle (length of run of zero amplitude
AC coefficients)
RRRR Valeur sur 4 bits de la longueur d'une plage de coefficients AC nuls (4-bit value of run length
of zero AC coefficients)
RS Valeur composite utilisée dans le codage de Huffman des coefficients AC (composite value
used in Huffman coding of AC coefficients)
Se Fin de la bande de sélection spectrale de la séquence en zigzag (end of spectral selection band
in zig-zag sequence)
SE Indice de contexte de codage de fin de bloc ou de fin de bande (context-index for coding of
end-of-block or end-of-band)
SIGN 1 si le signe décodé est négatif; 0 si le signe décodé est positif (1 if decoded sense of sign is
negative and 0 if decoded sense of sign is positive)
SN Indice de contexte pour le codage de la première catégorie de valeur absolue lorsque V est
négatif (context-index for coding of first magnitude category when V is negative)
SOF0 Marqueur de trame en processus DCT de base (baseline DCT process frame marker)
SOF1 Marqueur de trame en DCT séquentiel étendu, codage de Huffman (extended sequential DCT
frame marker, Huffman coding)
SOF2 Marqueur de trame en DCT progressif, codage de Huffman (progressive DCT frame marker,
Huffman coding)
SOF3 Marqueur de trame en processus sans perte, codage de Huffman (lossless process frame
marker, Huffman coding)
SOF7 Marqueur de trame en processus sans perte différentiel, codage de Huffman (differential
lossless process frame marker, Huffman coding)
SOF9 Marqueur de trame en DCT séquentiel, codage arithmétique (sequential DCT frame marker,
arithmetic coding)
SOF10 Marqueur de trame en DCT progressif, codage arithmétique (progressive DCT frame marker,
arithmetic coding)
SOF11 Marqueur de trame en processus sans perte, codage arithmétique (lossless process frame
marker, arithmetic coding)
SOF15 Marqueur de trame en processus sans perte différentiel, codage arithmétique (differential
lossless process frame marker, arithmetic coding)
SP Indice de contexte de codage de la première catégorie de valeur absolue lorsque V est positif
(context-index for coding of first magnitude category when V is positive)
Ss Début de la bande de sélection spectrale d'une séquence en zigzag (start of spectral selection
band in zig-zag sequence)
SS Indice de contexte pour le codage de la décision de signe (context-index for coding of sign
decision)
Switch_MPS Paramètre contrôlant la permutation des valeurs du MPS (parameter controlling inversion of
sense of MPS)
t Indice de sommation pour le calcul des limites d'un paramètre (summation index for
parameter limits computation)
Taj Sélecteur de destination de table de coefficients entropiques AC pour la jème composante d'un
balayage (AC entropy table destination selector for jth component in scan)
Tdj Sélecteur de destination de table de coefficients entropiques DC pour la jème composante d'un
balayage (DC entropy table destination selector for jth component in scan)
Tqi Sélecteur de destination de table de quantification pour la ième composante d'une trame
(quantization table destination selector for ith component in frame)
V Symbole ou valeur en cours de codage ou de décodage (symbol or value being either encoded
or decoded)
Vi,j jème valeur pour la longueur i dans HUFFVAL (jth value for length i in HUFFVAL)
Vmax Plus grand facteur d'échantillonnage vertical (largest vertical sampling factor)
VALPTR Liste des indices de la première valeur dans HUFFVAL pour chaque longueur de code
(list of indices for first value in HUFFVAL for each code length)
Xi ième registre statistique de codage de catégorie de valeur absolue (ith statistics bin for coding
magnitude category decision)
X1, X2, X3,... X15 Désignation des indices de contexte de codage des catégories de valeur absolue dans les
modèles à codage arithmétique (designation of context-indices for coding of magnitude
categories in the arithmetic coding models)
XHUFSI Table des tailles des codes de Huffman étendue (table of sizes of extended Huffman codes)
X’valeurs’ Les valeurs entre guillemets simples sont en hexadécimal (values within the quotes are
hexadecimal)
ZRL Valeur affectée dans HUFFVAL, à une plage de 16 coefficients nuls (value in HUFFVAL
assigned to run of 16 zero coefficients)
ZZ(k) kième élément d'une séquence en zigzag de coefficients DCT quantifiés (kth element in zig-zag
sequence of quantized DCT coefficients)
4 Considérations générales
Le présent article donne une présentation générale informative des éléments définis dans la présente Spécification. Sont
introduits de nombreux termes définis à l'article 3. Ces termes sont en italiques lorsqu'ils apparaissent pour la première
fois.
a) Un codeur est un dispositif réalisant un processus de codage. Comme représenté à la Figure 1, un codeur
reçoit en entrée des données numériques d'image source et des spécifications de tables, et génère en
sortie, au moyen d'un ensemble spécifié de procédures, des données d'image comprimées.
c) Le format de transfert représenté à la Figure 3 est une représentation de données d'image comprimées qui
inclut toutes les spécifications de tables utilisées dans le processus de codage. Le format de transfert
concerne des transferts entre des environnements d'application.
Codeur
TISO0650-93/d001
Figure 1 – Codeur
Décodeur
TISO0660-93/d002
Figure 2 – Décodeur
Les Figures 1 et 2 illustrent le cas général dans lequel les données des images source et reconstruite, de nature
photographique, ont plusieurs composantes. (Une image en couleurs a plusieurs composantes, une image en niveaux de
gris une seule composante.) Une partie significative de la présente Spécification concerne la façon de manipuler des
images à plusieurs composantes d'une façon souple et indépendante de l'application.
Environnement d'application
A
Environnement d'application
B
TISO0670-93/d003
Ces figures sont également destinées à montrer que les tables spécifiées pour la compression par un codeur d'une image
déterminée, et pour la reconstruction de cette image par un décodeur, sont les mêmes. Toutefois, la présente
Spécification ne spécifie pas comment des applications doivent associer des tables à des données d'images comprimées,
ni comment elles doivent représenter des données d'image source, généralement dans leurs environnements spécifiques.
La présente Spécification spécifie également le format d'échange représenté à la Figure 3, dans lequel les spécifications
de table sont incluses dans les données de l'image comprimée. Une image comprimée par un processus de codage
spécifié, dans un environnement d'application déterminé A, est communiquée à un environnement différent B, selon le
format de transfert. Le format de transfert ne spécifie pas une représentation complète de l'image codée. Les éléments
dépendant de l'application, par exemple l'espace des couleurs, ne sont pas concernés par la présente Spécification.
La présente Spécification définit deux classes de processus de codage et de décodage, les processus avec perte et sans
perte. Les processus basés sur la transformation en cosinus discrète (DCT) (discrete cosine transform) sont avec perte,
permettant ainsi de réaliser une compression substantielle, tout en produisant une image reconstruite d'une haute fidélité
visuelle par rapport à l'image source du codeur.
Le processus de codage basé DCT le plus simple est le processus de codage séquentiel de base. Il offre une capacité
suffisante pour beaucoup d'applications, en termes d'échantillonnage de l'image source et de nombre de tables possible.
D'autres processus basés DCT étendent le processus séquentiel de base à une plus large gamme d'applications. Tout
décodeur utilisant des processus de décodage basés DCT étendus, doit comporter le processus de décodage de base, afin
d'assurer une capacité de décodage par défaut.
La seconde classe de processus de codage n'est pas basée DCT. Elle est destinée aux applications nécessitant une
compression sans perte. Les processus de codage et de décodage sans perte sont utilisés indépendamment de tout
processus basé DCT.
Un tableau résumant les relations entre les processus de codage avec perte et sans perte figure en 4.11.
Le taux de compression réalisé par chacun des processus dépend des caractéristiques de l'image traitée, de la qualité
d'image désirée pour l'application, ainsi que des vitesses de compression et de décompression désirées.
La Figure 4 présente les principales procédures de tous les processus de codage basés DCT. Elle représente le cas d'une
image à une seule composante: cette simplification convient à une vue d'ensemble, car tous les processus définis dans la
présente Spécification opèrent indépendamment sur chaque composante de l'image.
FDCT Codeur
Quantificateur entropique
TISO0680-93/d004
Dans le processus de codage, les échantillons de la composante d'entrée sont groupés en blocs 8 × 8, chaque bloc étant
transformé par la DCT directe (FDCT) (forward DCT) en un ensemble de 64 valeurs appelées coefficients DCT. Une de
ces valeurs est le coefficient DC, les 63 autres sont les coefficients AC.
Chacun des 64 coefficients est alors quantifié à l'aide d'une des 64 valeurs correspondantes d'une table de quantification
(déterminée par une des spécifications de table indiquées à la Figure 4). La présente Spécification ne définit aucune
valeur par défaut pour les tables de quantification; ces valeurs peuvent être spécifiées pour des applications, en sorte
d'adapter la qualité d'image à leurs caractéristiques d'image, dispositifs d'affichage et conditions de visualisations
particuliers.
Après quantification, le coefficient DC et les 63 coefficients AC sont préparés pour le codage entropique, comme
représenté à la Figure 5. Le coefficient DC quantifié précédent est utilisé comme prédiction du coefficient DC quantifié
courant, la différence étant codée. Les 63 coefficients AC quantifiés ne donnent pas lieu à un tel codage différentiel,
mais sont convertis en une séquence en zigzag unidimensionnelle, représentée à la Figure 5.
Les coefficients quantifiés sont alors communiqués à une procédure de codage entropique qui continue la compression
des données. Une des deux procédures de codage entropique est décrite en 4.6. En codage de Huffman, les spécifications
de la table de Huffman doivent être fournies au codeur. En codage arithmétique, les spécifications de la table
décisionnelle de codage arithmétique peuvent lui être fournies, ou en d'autres cas, les spécifications de la table
décisionnelle par défaut seront utilisées.
La Figure 6 indique les principales procédures mises en oeuvre dans tous les processus de décodage basés DCT. Chaque
étape représentée réalise essentiellement une fonction inverse de la procédure principale correspondante du codeur. Le
décodeur entropique décode la séquence en zigzag des coefficients DCT quantifiés. Après déquantification, les
coefficients DCT sont transformés en un bloc 8 × 8 d'échantillons par la DCT inverse (IDCT) (inverse DCT).
La Figure 7 indique les principales procédures des processus de codage sans perte. Un prédicteur combine les valeurs
reconstruites jusqu'à trois échantillons voisins de positions a, b et c, pour former une prédiction de l'échantillon de
position x, comme représenté à la Figure 8. Cette prédiction est ensuite soustraite de la valeur effective de l'échantillon
de position x, la différence faisant l'objet d'un codage entropique sans perte, de type Huffman ou arithmétique.
Ce processus de codage peut également être utilisé sous une forme légèrement modifiée dans laquelle la précision des
échantillons d'entrée est réduite d'un ou plusieurs bits avant le codage. Ce processus modifié réalise une compression
plus forte que le processus sans perte (mais plus faible, à fidélité visuelle équivalente, que les processus basés DCT) et
limite, pour l'image reconstruite, l'erreur d'échantillonnage pire cas à la réduction de la précision d'entrée.
DC AC 01 AC 07
DC i - 1 DC i
Bloc i - 1 Bloc i
DIFF = DC i - DC i-1
TISO0690-93/d005
AC 70 AC 77
Codage DC différentiel Ordre en zigzag
Décodeur Déquan-
IDCT
entropique tificateur
TISO0700-93/d006
Codeur
Prédicteur
entropique
TISO0710-93/d007
c b
a x
TISO0720-93/d008
Quatre modes de fonctionnement distincts sont définis pour les divers processus de codage: basé DCT séquentiel, basé
DCT progressif, sans perte et hiérarchique. (Il n'est pas imposé aux réalisations de réaliser ces quatre modes.) Le mode
de fonctionnement sans perte a été décrit en 4.4. Les autres modes de fonctionnement sont comparés ci-après.
Dans le mode basé DCT séquentiel, les blocs 8 × 8 d'échantillons sont généralement entrés bloc par bloc, de gauche à
droite, et rangée de blocs par rangée de blocs, de haut en bas. Quand un bloc a été transformé par la DCT directe,
quantifié et préparé pour le codage entropique, l'ensemble de ses 64 coefficients DCT quantifiés peut être immédia-
tement soumis au codage entropique et sorti comme partie des données d'image comprimées (comme décrit en 4.3),
réduisant ainsi au minimum les besoins en matière de stockage des coefficients.
Dans le mode basé DCT progressif, des blocs 8 × 8 sont normalement codés dans le même ordre, mais en plusieurs
balayages de l'image, ce qui est réalisé en ajoutant une mémoire tampon de coefficients, de la taille de l'image (non
représentée à la Figure 4), entre le quantificateur et le codeur entropique. Dès qu'un bloc a été transformé par la DCT
directe et quantifié, ses coefficients sont stockés dans la mémoire tampon. Les coefficients DCT ainsi stockés sont
ensuite partiellement codés à chaque balayage. Dans chacun des deux modes, séquentiel et progressif, la séquence des
images se présente généralement comme indiqué à la Figure 9.
Deux procédures peuvent être utilisées pour coder partiellement les coefficients quantifiés en mémoire tampon. Dans la
première, seule une bande spécifiée de coefficients de la séquence en zigzag a besoin d'être codée: cette procédure est
appelée sélection spectrale, car chaque bande contient normalement des coefficients qui occupent la partie haute ou
basse d'un spectre de fréquence pour ce bloc 8 × 8. Dans la seconde procédure, les coefficients de la bande courante
n'ont pas besoin d'être codés à pleine précision (quantifiée) à chaque balayage. Un nombre spécifié des bits de plus fort
poids est d'abord traité lors d'un premier codage des coefficients, les bits de plus faible poids étant codés aux balayages
suivants. C'est la procédure par approximations successives. Ces deux procédures peuvent être utilisées séparément ou
dans toutes sortes de combinaisons.
En mode hiérarchique, une image est codée comme une séquence de trames. Ces trames donnent des composantes
reconstruites de référence, en général nécessaires pour la prédiction des trames suivantes. Sauf dans le cas de la
première trame d'une composante donnée, les trames différentielles codent la différence entre les composantes source et
les composantes reconstruites de référence. Le codage des différences peut être effectué dans des processus basés DCT,
dans des processus sans perte ou dans des processus basés DCT comportant un processus final sans perte pour chaque
composante. Des filtres de sous-échantillonnage et de suréchantillonnage peuvent être utilisés pour créer une pyramide
de résolutions spatiales, comme représenté à la Figure 10. Il est également possible d'utiliser le mode hiérarchique pour
améliorer la qualité des composantes reconstruites, à résolution spatiale donnée.
Avec une présentation progressive similaire à celle du mode basé DCT, le mode hiérarchique est utile dans les
environnements soumis à des impératifs de multirésolution. Le mode hiérarchique offre en outre une capacité de codage
progressif, jusqu'à un stade final sans perte.
Le processus séquentiel de base utilise le codage de Huffman, alors que les processus étendus basés DCT sans perte
peuvent utiliser le codage de Huffman ou le codage arithmétique.
Progressif
TISO0730-93/d009
Séquentiel
TISO0740-93/d010
Pour les processus basés DCT, deux précisions d'échantillon peuvent être spécifiées: 8 bits ou 12 bits. Les applications
qui travaillent avec d'autres précisions d'échantillon, peuvent utiliser la précision 8 bits ou 12 bits, en décalant de façon
appropriée leurs échantillons d'image source. Le processus de base utilise uniquement la précision 8 bits. Les réalisations
basées DCT utilisant des échantillons d'image source de 12 bits, devraient impliquer de plus importantes ressources de
calcul que celles utilisant uniquement des échantillons d'image source 8 bits. En conséquence, dans la présente
Spécification, des spécifications normatives séparées sont définies pour les processus basés DCT 8 bits et 12 bits.
Pour les processus sans perte, la précision d'échantillon est spécifiée devoir être de 2 bits à 16 bits.
Les paragraphes 4.3 et 4.4 donnent une vue d'ensemble d'une partie essentielle des processus de codage et de décodage:
la compression des valeurs des échantillons. Autre partie importante de ces processus: les procédures de contrôle de
l'ordre dans lequel les données d'image de plusieurs composantes sont traitées pour créer des données comprimées, qui
garantissent que l'ensemble approprié de données de table est appliqué aux unités de données appropriées de l'image
(une unité de données est un échantillon pour les processus sans perte, un bloc 8 × 8 échantillons pour les processus
basés DCT).
La Figure 11 donne un exemple de la façon dont un processus de codage choisit entre plusieurs composantes d'image
source et plusieurs ensembles de données de table, lors de l'exécution des procédures de codage. Dans cet exemple,
l'image source comprend les trois composantes A, B et C et il existe deux ensembles de spécifications de tables. (Cette
présentation simplifiée ne fait pas la distinction entre les tables de quantification et les tables de codage entropique.)
B Processus
de codage
En mode séquentiel, le codage est non entrelacé si le codeur comprime toutes les unités de données d'image d'une
composante A avant de commencer le codage de la composante B, puis code toutes les unités de B avant celles de C.
Le codage est entrelacé si le codeur comprime une unité de données de A, une unité de données de B, une unité de
données de C, puis revient à A, etc. Ces différents modes sont représentés à la Figure 12, qui montre un cas dans lequel
les trois composantes d'image ont des dimensions identiques: X colonnes par Y lignes, soit un total de n unités de
données chacune.
X X X
A1 A2 B1 B2 C1 C2
Y Y Y
An Bn Cn
TISO0760-93/d012
A 1, B1 , C1 , A 2 , B 2, C 2, ....A n, B n, C n
Balayage 1
Ordre de codage des unités de données, entrelacé
Ces procédures de contrôle sont également capables de traiter des cas dans lesquels les composantes de l'image source
ont des dimensions différentes. La Figure 13 présente un cas dans lequel deux des composantes B et C ont un nombre
d'échantillons horizontaux qui est la moitié de celui de la composante A. Dans ce cas, deux unités de données de A sont
entrelacées avec une unité de données de B puis de C. Peuvent également être traités des cas dans lesquels les
composantes d'une image ont des relations plus complexes, par exemple quand des dimensions horizontales et verticales
sont différentes. (Voir l'Annexe A.)
X X/2 X/2
A1 A2 B1 B2 C1 C2
Y Y Y
An Bn/2 Cn/2
TISO0770-93/d013
Balayage 1
Ordre de codage des unités de données, entrelacé
L'entrelacement de plusieurs composantes implique le concept d'unité codée minimale (MCU). Si les données d'image
comprimées ne sont pas entrelacées, la MCU est, par définition, une unité de données. Par exemple, sur la Figure 12,
la MCU du cas non entrelacé est une unité de données unique. Si les données comprimées sont entrelacées, la MCU
contient une ou plusieurs unités de données de chaque composante. Dans le cas entrelacé de la Figure 12, la (première)
MCU comprend les trois unités de données entrelacées, A1, B1, C1. Dans l'exemple de la Figure 13, la (première) MCU
comprend les quatre unités de données A1, A2, B1, C1.
Les Figures 1, 2 et 3 présentent des vues légèrement différentes des données d'image comprimées. La Figure 1 présente
ces données à la sortie du processus de codage, la Figure 2 les présente à l'entrée d'un processus de décodage et la
Figure 3 présente des données d'image comprimées dans le format de transfert, à l'interface entre des environnements
d'application.
Les données d'image comprimées sont décrites par une structure uniforme et un ensemble de paramètres pour les deux
classes de processus de codage (avec perte ou sans perte) et pour tous les modes de fonctionnement (séquentiel,
progressif, sans perte et hiérarchique). Les diverses parties des données d'image comprimées sont identifiées par des
codes spéciaux de deux octets appelés marqueurs. Certains marqueurs sont suivis de séquences déterminées de
paramètres, comme dans le cas des spécifications de tables, de l'en-tête de trame ou de l'en-tête de balayage. D'autres
sont utilisés sans paramètres pour des fonctions telles que le marquage de début d'image et le marquage de fin d'image.
Quand un marqueur est associé à une séquence particulière de paramètres, il constitue avec ses paramètres un segment
marqueur.
Les données créées par un codeur entropique sont également segmentées, un marqueur particulier, le marqueur de
reprise, étant utilisé pour isoler les segments de données à codage entropique. Le codeur pose les marqueurs de reprise
intercalés entre les données à codage entropique, à des intervalles de reprise réguliers dans les données d'image source.
Les marqueurs de reprise peuvent être identifiés et localisés sans décoder les données comprimées. Comme ils peuvent
être décodés indépendamment, ils ont des utilisations spécifiques à l'application, telles que le codage ou le décodage
parallèle, l'isolation de données altérées et l'accès semi-aléatoire à des segments à codage entropique.
a) le format de transfert;
En plus de certains segments marqueurs obligatoires et des segments à codage entropique, le format de transfert doit
inclure les segments marqueurs de toutes les spécifications de tables de quantification et de codage entropique
nécessaires pour les processus de décodage. On a ainsi l'assurance qu'une image comprimée pourra traverser des
frontières entre environnements d'application, sans avoir à se préoccuper de la façon dont chaque environnement associe,
en interne, des tables aux données d'image comprimées.
Le format abrégé de données d'image comprimées est identique au format de transfert, sauf qu'il n'inclut pas toutes les
tables nécessaires pour le décodage (mais il peut en inclure certaines). Ce format est destiné aux applications où d'autres
mécanismes sont disponibles pour fournir certaines ou toutes les données de spécification de tables nécessaires pour le
décodage.
Le format abrégé contient uniquement des données de spécification de tables. Il permet à l'application de charger dans le
décodeur les tables requises pour la reconstruction ultérieure d'une ou plusieurs images.
Les données d'image comprimées comprennent une seule image. Une image contient une seule trame dans le cas des
processus de codage séquentiels et progressifs; elle contient plusieurs trames en mode hiérarchique.
Une trame contient un ou plusieurs balayages. Dans les processus séquentiels, un balayage contient un codage complet
d'une ou plusieurs composantes d'image. Aux Figures 12 et 13, la trame consiste en trois balayages dans le cas non
entrelacé et en un seul balayage dans le cas où les trois composantes sont entrelacées. La trame peut également
comprendre deux balayages: l'un avec une seule composante non entrelacée, l'autre avec deux composantes entrelacées.
Dans le cas des processus progressifs, un balayage contient un codage partiel de toutes les unités de données d'une ou
plusieurs composantes d'image. En mode progressif, les composantes ne doivent pas être entrelacées, sauf les
coefficients DC du premier balayage de chaque composante d'une trame progressive.
Le Tableau 1 donne un résumé des caractéristiques essentielles des divers processus de codage définis dans la présente
Spécification. La spécification complète de ces processus est donnée dans les Annexes F, G, H et J.
Le format de transfert est la représentation codée des données d'image comprimées, pour leur transfert entre
environnements d'application.
Les spécifications d'un format de transfert sont que toute donnée d'image comprimée représentée dans ce format de
transfert doit être conforme à la syntaxe et aux affectations appropriées au processus de décodage choisi, comme spécifié
dans l'Annexe B.
Les tests destinés à déterminer si les données d'image comprimées sont conformes aux présentes prescriptions sont
définis dans la Partie 2 de la présente Spécification.
Processus hiérarchiques
6 Spécifications du codeur
Un processus de codage convertit des données d'image source en données d'image comprimées. Chacune des Annexes F,
G, H et J spécifie plusieurs processus de codage différents, correspondant à son mode de fonctionnement particulier.
Un codeur est un dispositif qui réalise un (ou plusieurs) des processus de codage spécifiés dans les Annexes F, G, H et J.
Pour être conforme à la présente Spécification, un codeur doit satisfaire au moins une des deux conditions suivantes.
Un codeur doit
a) convertir les données d'image source, avec une précision appropriée, en données d'image comprimées,
conformes à la syntaxe de format de transfert spécifiée dans l'Annexe B pour le ou les processus de
codage mis en oeuvre par le codeur;
b) convertir les données d'image source, avec une précision appropriée, en données d'image comprimées
conformes à la syntaxe du format abrégé de données d'image comprimées, spécifiée dans l'Annexe B pour
le ou les processus de codage mis en oeuvre par le codeur.
Pour chacun des processus de codage spécifiés dans les Annexes F, G, H et J, les tests de conformité aux spécifications
ci-dessus sont spécifiés dans la Partie 2 de la présente Spécification.
NOTE – La présente Spécification n'impose aucune obligation quant à l'aptitude d'un codeur qui met en oeuvre l'un des
processus de codage spécifiés dans les Annexes F, G, H ou J, à fonctionner en utilisant toutes les gammes de paramètres autorisées
pour ce processus. Il est seulement requis qu'un décodeur satisfasse les tests de conformité spécifiés dans la Partie 2, et génère des
formats de données comprimées conformes à l'Annexe B, pour les valeurs de paramètres qu'il utilise effectivement.
7 Spécifications du décodeur
Un processus de décodage convertit des données d'image comprimées en données d'image reconstruite. Chacune des
Annexes F, G, H et J spécifie plusieurs processus de décodage distincts, pour ces modes de fonctionnement particuliers.
Un décodeur est un dispositif qui réalise un (ou plusieurs) des processus de décodage spécifiés dans les Annexes F, G, H
ou J. Pour être conforme à la présente Spécification, un décodeur doit satisfaire les trois conditions suivantes.
Un décodeur doit:
a) convertir en données d'image reconstruite, avec la précision appropriée, toutes données d'image
comprimées conformes à la syntaxe de format de transfert, spécifiée dans l'Annexe B pour le ou les
processus de codage mis en oeuvre par le décodeur;
b) accepter et stocker de façon appropriée toutes données de spécification de tables conformes à la syntaxe
abrégée de données de spécification de tables, spécifiée dans l'Annexe B pour le ou les processus de
décodage mis en oeuvre par le décodeur;
c) convertir en données d'image reconstruite, avec la précision appropriée, toutes données d'image
comprimées conformes à la syntaxe du format abrégé de données d'image comprimées, spécifiée dans
l'Annexe B pour le ou les processus de décodage mis en oeuvre par le décodeur, à condition que les
données de spécification de tables requises pour le décodage de l'image comprimée aient été auparavant
chargées dans le décodeur.
En outre, tout décodeur basé DCT doit, s'il réalise un processus de décodage basé DCT autre que le processus séquentiel
de base, réaliser également le processus de décodage séquentiel de base.
Pour chacun des processus de décodage spécifiés dans les Annexes F, G, H et J, les tests de conformité aux
spécifications ci-dessus sont spécifiés dans la Partie 2 de la présente Spécification.
Annexe A
Définitions mathématiques
(Cette annexe fait partie intégrante de la présente Recommandation | Norme internationale)
Cette annexe définit les images source auxquelles les processus de codage spécifiés dans la présente Spécification
peuvent être appliqués.
Comme représenté à la Figure A.1, une image source comprend, par définition, Nf composantes, dont chacune, d'iden-
tificateur unique Ci, consiste en un tableau rectangulaire d'échantillons, de xi colonnes par yi lignes. Les dimensions des
composantes sont données par deux paramètres, X et Y, X étant le maximum des valeurs de xi et Y le maximum des
valeurs de yi, pour toutes les composantes de la trame. Pour chaque composante, sont définis des facteurs
d'échantillonnage Hi et Vi, liés aux dimensions xi et yi des composantes et aux dimensions maximales X et Y, par les
expressions suivantes:
Hi Vi
xi = X × et yi Y × ,
H max Vmax
où Hmax et Vmax sont les valeurs maximales des facteurs d'échantillonage pour toutes les composantes de la trame, et
la fonction plafond.
Considérons, par exemple, une image ayant trois composantes de dimensions maximales 512 lignes et 512 échantillons
par ligne, avec les facteurs d'échantillonnage suivants:
Composante 0 H 0 = 4, V0 = 1
Composante 1 H 1 = 2, V1 = 2
Composante 2 H 2 = 1, V2 = 1
Alors: X = 512, Y = 512, Hmax = 4, Vmax = 2; et xi et yi sont donnés, pour chaque composante, par:
NOTE – Les paramètres X, Y, Hi et Vi sont contenus dans l'en-tête de trame du format de données d'image comprimées
(voir B.2.2), les dimensions xi et yi de chaque composante étant déterminées par le décodeur. Les images sources de dimensions xi
et yi ne satisfaisant pas les expressions ci-dessus ne peuvent pas être reconstruites correctement.
Un échantillon est un entier de précision P bits, de valeur appartenant à la plage 0 à 2P – 1. Tous les échantillons de toutes
les composantes d'une image doivent avoir la même précision P. Les restrictions portant sur les valeurs de P dépendent
du mode de fonctionnement, comme spécifié de B.2 à B.7.
Dans un processus sans perte, l'unité de données est l'échantillon; dans un processus basé DCT, l'unité de données est le
bloc de 8 × 8 échantillons. Les 8 échantillons de gauche de chacune des 8 rangées supérieures de la composante doivent
toujours constituer le bloc du coin supérieur gauche. En prenant ce bloc du coin supérieur gauche comme référence, la
composante est découpée en unités de données consécutives, de gauche à droite et de haut en bas (voir la Figure A.4).
A.1.4 Orientation
La Figure A.1 montre comment l'orientation d'une composante d'image est indiquée par les termes «haut», «bas»,
«gauche», «droite». L'ordre d'entrée des unités de données d'une composante d'image dans les procédures de codage est,
par définition, de gauche à droite et de haut en bas dans la composante. (Cet ordre est défini avec précision en A.2.) Les
applications déterminent les bords de l'image source définis comme haut, bas, gauche et droit.
Ci Haut
Echantillons Ligne
yi
Gauche Droite
CNf
C Nf-1 xi
C2
C1 Bas TISO0780-93/d014
L'ordre des unités de données et la construction des unités codées minimales (MCU) sont définis comme suit.
Dans le cas de données non entrelacées, la MCU est l'unité de données. Dans le cas de données entrelacées, la MCU est
la séquence d'unités de données définie par les facteurs d'échantillonnage des composantes du balayage.
Quand Ns = 1 (Ns étant le nombre de composantes d'un balayage), les unités de données d'un balayage doivent être
ordonnées de gauche à droite et de haut en bas, comme indiqué à la Figure A.2. Cet ordre s'applique chaque fois que
Ns = 1, quelles que soient les valeurs de H1 et de V1.
Haut
Gauche Droite
Bas TISO0790-93/d015
Quand Ns > 1, chaque composante de balayage Csi est subdivisée en sous-tableaux rectangulaires d'unités de données de
dimension horizontale Hk et de dimension verticale Vk. Les indices k indiquent que Hk et Vk correspondent à la position
de la spécification de composante de l'en-tête de trame pour laquelle Ck = Csi. A l'intérieur de chaque sous-tableau Hk
par Vk, les unités de données sont ordonnées de gauche à droite et de haut en bas. Les sous-tableaux sont eux-mêmes
disposés en ordre, de gauche à droite et de haut en bas, dans chaque composante.
Comme montré sur l'exemple de la Figure A.3, Ns = 4 et MCU1 comprend des unités de données prises d'abord dans
la région la plus à gauche et la plus haute de Cs1, suivies des unités de données de la zone correspondante de Cs2,
puis de Cs3 puis de Cs4. MCU2 suit le même ordre, pour des données prises dans la zone suivante à droite, pour les
quatre composantes.
Cs 1: H 1 = 2, V1 = 2 Cs2 : H 2 = 2, V 2 = 1 Cs 3: H 3 = 1, V 3 = 2 Cs 4 : H 4 = 1, V4 = 1
0 1 2 3 4 5 0 1 2 3 4 5 0 1 2 0 1 2
0 0 0 0
1 1 1 1
2 2
TISO0800-93/d016
3 3
MCU 1 = d 100 1
d 01 1
d 10 1
d 11 2
d 200 d 01 3
d 00 3
d 10 4
d 00 ,
MCU 2 = d 102 1
d 03 1
d 12 1
d 13 2
d 202 d 03 3
d 01 d 311 d 401 ,
MCU 3 = d 104 1
d 05 1
d 14 1
d 15 2
d 204 d 05 3
d 02 d 312 d 402 ,
MCU 4 = d 120 1
d 21 1
d 30 1
d 31 2 2
d 10 d 11 3
d 20 3
d 30 4 ,
d 10
Unités de données CS 1 Cs 2 Cs 3 Cs 4
Pour les processus basés DCT, l'unité de données est le bloc. Si xi n'est pas un multiple de 8, le processus de codage doit
étendre le nombre de colonnes pour compléter les blocs d'échantillons de droite. Si la composante doit être entrelacée, le
processus de codage doit également étendre le nombre d'échantillons d'un ou plusieurs blocs additionnels, si nécessaire,
en sorte que le nombre de blocs soit un entier multiple de Hi. De même, si yi n'est pas un multiple de 8, le processus de
codage doit étendre le nombre de lignes pour compléter la rangée de blocs du bas. Si la composante doit être entrelacée,
le processus de codage doit également étendre le nombre de lignes d'une ou plusieurs rangées additionnelles de blocs, si
nécessaire, en sorte que le nombre de rangées de blocs soit un entier multiple de Vi.
NOTE – Il est recommandé de compléter toutes les MCU incomplètes par répétition de la colonne de droite et de la ligne
du bas de chaque composante.
Pour les processus sans perte, l'unité de données est l'échantillon. Si la composante ne doit pas être entrelacée,
le processus de codage doit, si nécessaire, augmenter le nombre d'échantillons en sorte que ce nombre soit un multiple
de Hi. De même, le processus de codage doit, si nécessaire, augmenter le nombre de lignes en sorte que ce nombre soit
un multiple de Vi.
Tout échantillon ajouté par un processus de codage pour compléter des MCU partielles doit être supprimé par le
processus de décodage.
Avant le calcul, par un processus de codage non différentiel, de la FDCT d'un bloc d'échantillons d'image source, le
niveau de ces échantillons doit être décalé pour leur donner une représentation signée, en soustrayant 2P – 1, où P est le
paramètre de précision spécifié en B.2.2. Ainsi, lorsque P = 8, le décalage de niveau est 128; lorsque P = 12, le décalage
de niveau est de 2048.
Après le calcul, par un processus de décodage non différentiel, de l'IDCT, et la production d'un bloc d'échantillons
d'image reconstruite, un décalage de niveau inverse doit rétablir la représentation non signée des échantillons, en
ajoutant 2P – 1 et en limitant les valeurs des résultats à la plage 0 à 2P – 1.
La Figure A.4 représente une composante d'image subdivisée en blocs 8 × 8 pour le calcul de la FDCT. La Figure A.4
définit également l'orientation des échantillons dans un bloc, en indiquant les indices utilisés dans l'équation FDCT
de A.3.3.
Les définitions de la subdivision en blocs et de l'orientation des échantillons s'appliquent également à tout processus de
décodage DCT et à l'image reconstruite de sortie. Tout échantillon ajouté par le processus de codage afin de compléter
des unités codées minimales incomplètes devra être supprimé par le processus de décodage.
Ci Haut
s 00 s 01 s 07
s 10 s 11 s 17
Droite Gauche
s 70 s 71 s 77
TISO0810-93/d017
Bas
7 7
1 ( 2 x + 1) uπ ( 2 y + 1) vπ
FDCT: Svu = Cu Cv ∑ ∑ s yx cos cos
4 x =0 y=0 16 16
7 7
1 ( 2 x + 1 ) uπ ( 2 y + 1) vπ
IDCT: s yx = ∑ ∑ Cu Cv Svu cos cos
4 u=0 v =0 16 16
où
Cu , C v = 1 2 pour u , v = 0
Cu , Cv = 1 autrement.
Après le calcul de la FDCT pour un bloc, chacun des 64 coefficients DCT résultant donne lieu à une quantification
uniforme. La valeur du pas de quantification de chaque coefficient Svu est la valeur de l'élément correspondant Qvu de la
table de quantification spécifiée par le paramètre de trame Tqi (voir B.2.2).
La quantification uniforme est définie par l'équation suivante (l'arrondi est l'entier le plus proche):
S
Sqvu = arrondi vu
Qvu
Au niveau du décodeur, cette normalisation est supprimée par l'équation suivante, qui définit la déquantification:
Rvu = Sq vu × Qvu
NOTE – Selon l'arrondi utilisé lors de la quantification, il est possible que le coefficient déquantifié soit en dehors de la
gamme attendue.
La relation entre les échantillons, les coefficients DCT et la quantification est représentée à la Figure A.5.
Après quantification, et en préparation du codage entropique, le coefficient quantifié DC Sq00 est traité séparément des
63 autres coefficients AC quantifiés. La valeur à coder est la différence (DIFF) entre le coefficient DC quantifié du bloc
courant (DCi, également désigné Sq00) et celui du bloc précédent dans la même composante (PRED):
Après quantification, et en préparation du codage entropique, les coefficients AC quantifiés sont convertis en une
séquence en zigzag. Le coefficient DC quantifié (coefficient nul dans le tableau) est traité séparément, comme défini
en A.3.5. La séquence en zigzag est spécifiée à la Figure A.6.
Pour diverses procédures, les données peuvent être facultativement divisées par une puissance de 2, par une
transformation point appliquée avant codage. Trois processus de codage nécessitent une transformation point: le codage
sans perte, le codage de trame différentiel sans perte en mode hiérarchique, et le codage par approximations successives
en mode DCT progressif.
En mode de fonctionnement sans perte, la transformation point est appliquée aux échantillons d'entrée. Lors du codage
de la différence, en mode de fonctionnement hiérarchique, la transformation point est appliquée à la différence entre les
échantillons de la composante d'entrée et les échantillons de la composante de référence. Dans les deux cas, la
transformation point est une division entière par 2Pt, Pt étant la valeur du paramètre de transformation point (voir B.2.3).
En codage par approximations successives, la transformation point des coefficients AC est une division entière par 2Al,
Al étant le paramètre de position binaire en approximations successives et de transformation point (voir B.2.3).
La transformation point des coefficients DC est un décalage arithmétique à droite de Al bits – équivalant à une division
par 2Pt avant décalage de niveau (voir A.3.1).
La sortie du décodeur subit un décalage de niveau inverse 2Pt. Un exemple de transformation point est donné en K.10.
FDCT Quantification
Haut
s00 s01 s07 S 00 S 01 S 07 Sq 00 Sq 01 Sq 07
s10 s11 s17 S10 S 11 S 17 Sq 10 Sq 11 Sq 17
Svu
Gauche Droite arrondi ( )= Sq
Qvu vu
Q 00 Q 01 Q07
Q 10 Q 11 Q17
Transmission
Q 70 Q 71 Q77
Table de quantification
Haut
r 00 r 01 r 07 R 00 R 01 R 07 Sq 00 Sq 01 Sq 07
r 10 r 11 r 17 R 10 R 11 R 17 Sq 10 Sq 11 Sq 17
Rvu = Sq vu × Q vu
Gauche Droite
r 70 r 71 r 77 R 70 R 71 R 77 Sq 70 Sq 71 Sq 77
Bas TISO0820-93/d018
IDCT Déquantification
Echantillons d'image reconstruite Coefficients DCT Coefficients DCT quantifiés reçus
(avant décalage de niveau) déquantifiés
Figure A.5 – Relation entre les blocs 8 × 8 d'échantillons et les coefficients DTC
10 11 15 16 14 15 27 28
12 14 17 13 16 26 29 42
13 18 12 17 25 30 41 43
19 11 18 24 31 40 44 53
10 19 23 32 39 45 52 54
20 22 33 38 46 51 55 60
21 34 37 47 50 56 59 61
35 36 48 49 57 58 62 63
Les différences en complément à deux codées en mode de fonctionnement sans perte ou en codage de trame
différentielle en mode de fonctionnement hiérarchique, sont calculées modulo 65 536, ce qui restreint la précision de ces
différences à un maximum de 16 bits. Les valeurs modulo sont calculées par un ET logique de la différence en
complément à deux et de X’FFFF’. A des fins de codage, le résultat est encore interprété comme une différence en
complément à deux sur 16 bits. L'arithmétique modulo 65 536 est également utilisée dans le décodeur pour calculer la
sortie de la somme de la prédiction et de cette différence en complément à deux.
Annexe B
Le paragraphe B.1 décrit les constituants de ces formats. Les paragraphes B.1.3 et B.1.4 donnent les conventions
applicables aux symboles et figures utilisés dans les spécifications de format.
Structurellement, les formats de données comprimées sont constitués d'un ensemble ordonné de paramètres, de
marqueurs et de segments de données à codage entropique. Les paramètres et les marqueurs sont à leur tour souvent
organisés en segments marqueurs. Comme la représentation codée de tous ces constituants est un alignement d'octets,
chaque format de données comprimées comprend une séquence ordonnée d'octets de 8 bits. Un bit de plus fort poids
(MSB) et un bit de plus faible poids (LSB) sont définis pour chaque octet.
B.1.1 Constituants
Ce paragraphe donne une description générale de chacun des constituants du format de données comprimées.
B.1.1.1 Paramètres
Les paramètres sont entiers, avec des valeurs spécifiques aux processus de codage, aux caractéristiques de l'image source
et à d'autres caractéristiques relevant de l'application. Des codes de 4 bits, 1 octet ou 2 octets sont affectés aux
paramètres. Sauf pour certains groupes de paramètres optionnels, les paramètres codent des informations critiques sans
lesquelles le processus de décodage ne pourrait pas correctement reconstruire l'image.
Le code d'un paramètre doit être un entier non signé, de la longueur en bits spécifiée, et ayant la valeur affectée à ce
paramètre.
Pour les paramètres de longueur 2 octets (16 bits), l'octet de plus fort poids doit venir en premier dans la séquence
ordonnée d'octets du format de données comprimées. Les paramètres de 4 bits de longueur viennent toujours par paires,
chacune de ces paires devant toujours être codée comme un octet unique. Le premier paramètre de 4 bits de la paire doit
occuper les 4 bits de plus fort poids de l'octet. Dans tous les paramètres de 16, 8 ou 4 bits, le MSB doit venir en premier
et le LSB en dernier.
B.1.1.2 Marqueurs
Les marqueurs servent à identifier les différentes parties structurelles des formats de données comprimées. La plupart
des marqueurs sont le début de segments marqueurs, comprenant un groupe de paramètres en relation. Certains
marqueurs se présentent seuls. Des codes de deux octets sont affectés à tous les marqueurs: un octet X’FF’ suivi d'un
octet qui n'est égal ni à zéro ni à X’FF’ (voir Tableau B.1). Tout marqueur peut optionnellement être précédé de
n'importe quel nombre d'octets de remplissage, auxquels est affecté le code X’FF’.
NOTE – Cette structure spéciale d'affectation de codes aux marqueurs permet à un décodeur de faire l'analyse syntaxique
du format de données comprimées et d'en extraire les diverses parties, sans décomprimer d'autres segments de données d'image.
Des codes de deux octets doivent être affectés à tous les marqueurs: un octet X’FF’ suivi d'un second octet qui n'est égal
ni à zéro ni à X’FF’. Le second octet est spécifié dans le Tableau B.1 pour chaque marqueur défini. Un astérisque (*)
signale un marqueur isolé, c'est-à-dire qui n'est pas le début d'un segment marqueur.
Autres marqueurs
Marqueurs réservés
Un segment marqueur comprend un marqueur suivi d'une séquence de paramètres associés. Le premier paramètre d'un
segment marqueur est un paramètre «longueur», de deux octets. Ce paramètre longueur code le nombre d'octets du
segment marqueur, y compris le paramètre longueur et non compris le marqueur de deux octets. Deux des segments
marqueurs sont désignés comme en-têtes: l'en-tête de trame et l'en-tête de balayage.
Un segment de données à codage entropique contient la sortie d'une procédure à codage entropique. Il comprend un
nombre entier d'octets si la procédure à codage entropique utilisée est le codage de Huffman ou le codage arithmétique.
NOTES
1 La procédure d'extension des segments à codage entropique à un nombre entier d'octets est la suivante: en codage de
Huffman, des bits 1 sont bourrés, si nécessaire, à la fin des données comprimées, pour compléter le dernier octet du segment. En
codage arithmétique, le calage à l'octet est réalisé dans la procédure de terminaison du segment à codage entropique (voir D.1.8).
2 Pour garantir qu'aucun marqueur ne se présentera dans un segment à codage entropique, tout octet X’FF’ généré par
un codeur de Huffman ou arithmétique, ou généré par le bourrage de bits 1 décrit dans la NOTE 1 ci-dessus, est suivi d'un octet zéro,
également «bourré» (voir D.1.6 et F.1.2.3).
B.1.2 Syntaxe
La syntaxe du format de transfert est spécifiée en B.2 et B.3. Pour les applications de la présente Spécification, la
spécification de la syntaxe inclut:
L'ordre des constituants et leur caractère optionnel ou conditionnel, sont spécifiés sur les figures de présentation de
syntaxe de B.2 et B.3. Les noms, symboles, définitions, valeurs autorisées et restrictions sont spécifiés immédiatement
après la figure de présentation de syntaxe.
Les figures de présentation de syntaxe de B.2 et B.3 font partie de la spécification du format de transfert. Les
conventions suivantes, représentées Figure B.1, s'appliquent à ces figures:
– indicateur de segment: un rectangle entouré d'un trait épais contient un segment marqueur, un segment
de données à codage entropique, ou la combinaison des deux;
– indicateur de longueur de paramètre: la largeur d'un rectangle entouré d'un trait fin est proportionnelle
à la longueur du code (4, 8 ou 16 bits comme montré en E, B et D de la Figure B.1) du marqueur ou du
paramètre qu'il contient; la largeur d'un rectangle entouré d'un trait épais n'a pas de signification
particulière;
– ordre: dans le format de transfert, un paramètre ou un marqueur représenté sur une figure précède tous
ceux qui se trouvent à sa droite et suit tous ceux représentés à sa gauche;
– indicateur de données à codage entropique: les crochets anguleux indiquent que l'entité entre crochets
est à codage entropique.
Segment [ Segment [
[B] D E F
optionnel
TISO0830-93/d019
A la suite de chaque figure de présentation de syntaxe de B.2 et B.3, sont spécifiés le symbole, le nom et la définition de
chaque marqueur et paramètre présentés sur la figure. Pour chaque paramètre, la longueur de code et les valeurs
autorisées sont également spécifiées sous forme de tableau.
La Figure B.2 spécifie l'ordre des constituants de haut niveau du format de transfert, pour tous les processus de codage
non hiérarchique spécifiés dans la présente Spécification.
Trame
En-tête Segment
[ Tables/
divers
[
de trame
Balayage 1 [ DNL
[ [Balay2 ] [Balay der ]
Balayage
<MCU 1 >, <MCU 2>, ··· <MCU Ri > <MCU n>, <MCU n + 1 >, ··· <MCUder >
TISO0840-93/d020
Figure B.2 – Syntaxe du format de transfert s'appliquant à tous les processus de codage
basés DCT séquentiels, DCT progressifs et mode de fonctionnement sans perte
Le niveau supérieur de la Figure B.2 spécifie que le format de transfert non hiérarchique doit commencer par un
marqueur SOI, contenir exactement une trame et se terminer par un marqueur EOI.
Le second niveau de la Figure B.2 spécifie qu'une trame doit commencer par un en-tête de trame et contenir un ou
plusieurs balayages. Un en-tête de trame peut être précédé d'une ou plusieurs spécifications de tables ou segments
marqueurs divers, comme spécifié en B.2.4. Si un segment DNL figure (voir B.2.5), il doit suivre immédiatement le
premier balayage.
Pour les processus basés DCT séquentiels et les processus sans perte, chaque balayage doit contenir de une à quatre
composantes d'image. Si un balayage contient de deux à quatre composantes, elles doivent être entrelacées à l'intérieur
de ce balayage. Pour les processus basés DCT progressifs, chaque composante d'image n'est contenue que partiellement
dans un balayage. Seuls le ou les premiers balayages des composantes (qui ne contiennent que des données de
coefficients DC) peuvent être entrelacés.
Le troisième niveau de la Figure B.2 spécifie qu'un balayage doit commencer par un en-tête de balayage et contenir un
ou plusieurs segments de données à codage entropique. Chaque en-tête de balayage peut être précédé d'une ou plusieurs
spécifications de tables ou de divers segments marqueurs. Si la reprise n'est pas activée, un seul segment à codage
entropique doit figurer (celui libellé «dernier» ou «der») et aucun marqueur de reprise ne doit figurer. Si la reprise est
activée, le nombre de segments à codage entropique est défini par la taille de l'image et l'intervalle de reprise. Dans ce
cas, un marqueur de reprise doit suivre chaque segment à codage entropique, sauf le dernier.
Le quatrième niveau de la Figure B.2 spécifie que chaque segment à codage entropique comprend une séquence de
MCU à codage entropique. Si la reprise est activée et que l'intervalle de reprise est défini comme Ri, chaque segment à
codage entropique, sauf le dernier, doit contenir Ri MCU. Le dernier doit contenir le nombre de MCU (quel qu'il soit)
nécessaire pour compléter le balayage.
La Figure B.2 spécifie les emplacements où des segments de spécification de tables peuvent figurer. Toutefois, la
présente Spécification spécifie que le format de transfert doit contenir toutes les données de spécification de tables
nécessaires pour le décodage de l'image comprimée. En conséquence, les données de spécification de tables requises
doivent figurer à un ou plusieurs des emplacements autorisés.
La Figure B.3 spécifie que l'en-tête de trame doit figurer en début de trame. Cet en-tête spécifie les caractéristiques de
l'image source (voir A.1), les composantes de la trame et les facteurs d'échantillonnage de chaque composante, ainsi que
les destinations où seront retrouvées les tables de quantification à utiliser pour chaque composante.
En-tête de trame
Paramètres
SOFn Lf P Y X Nf
spécif.-composante
C1 H1 V1 Tq 1 C2 H 2 V2 Tq 2 CNf H Nf VNf Tq Nf
TISO0850-93/d021
Les marqueurs et les paramètres de la Figure B.3 sont définis ci-après. Les tailles et valeurs permises pour chaque
paramètre sont données dans le Tableau B.2. Dans le Tableau B.2 (et dans les tableaux similaires qui suivent), les choix
de valeurs sont séparés par des virgules (par exemple 8, 12) et les limites de plage sont séparées par un tiret (par
exemple 0-3).
SOFn: marqueur de début de trame – Marque le début des paramètres de trame. L'indice n identifie le
processus de codage: séquentiel de base, séquentiel étendu, progressif ou sans perte – ainsi que la procédure de
codage entropique utilisée.
Lf: longueur d'en-tête de trame – Spécifie la longueur de l'en-tête de trame indiqué Figure B.3 (voir B.1.1.4).
P: précision d'échantillon – Spécifie en bits, la précision des échantillons des composantes de la trame.
Y: nombre de lignes – Spécifie le nombre maximal de lignes de l'image source. Doit être égal au nombre de
lignes de la composante ayant verticalement le plus grand nombre d'échantillons (voir A.1.1). La valeur 0
indique que le nombre de lignes doit être défini par le marqueur DNL et des paramètres situés à la fin du
premier balayage (voir B.2.5).
X: nombre d'échantillons par ligne – Spécifie le nombre maximal d'échantillons par ligne de l'image source.
Doit être égal au nombre d'échantillons par ligne de la composante ayant horizontalement le plus grand nombre
d'échantillons (voir A.1.1).
Nf: nombre de composantes d'image de la trame – Spécifie le nombre de composantes d'image source de la
trame. La valeur de Nf doit être égale au nombre d'ensembles de paramètres de spécification de composantes
de trame figurant dans l'en-tête de la trame (Ci, Hi, Vi et Tqi).
Ci: identificateur de composante – Affecte un label unique à la ième composante de la séquence de paramètres
de spécification de composante de trame. Doit être utilisé dans les en-têtes de balayage pour identifier les
composantes de la trame. La valeur de Ci doit être différente des valeurs de C1 à Ci – 1.
Hi: facteur d'échantillonnage horizontal – Spécifie la relation entre la dimension de la composante horizontale
et la dimension maximale de l'image X (voir A.1.1); spécifie également le nombre d'unités de données
horizontales de la composante Ci de chaque MCU, quand plusieurs composantes sont codées dans un balayage.
Vi: facteur d'échantillonnage vertical – Spécifie la relation entre la dimension de la composante verticale et la
dimension maximale de l'image Y (voir A.1.1); spécifie également le nombre d'unités de données verticales de
la composante Ci dans chaque MCU quand plusieurs composantes sont codées dans un balayage.
Tqi: sélecteur de destination de table de quantification – Spécifie une des quatre destinations de table de
quantification possibles, où sera retrouvée la table à utiliser pour la déquantification des coefficients DCT de la
composante Ci. Si le processus de décodage utilise la procédure de déquantification, cette table devra avoir été
installée à cette destination lorsque le décodeur sera sur le point de décoder le ou les balayages contenant la
composante Ci. Cette destination ne doit pas être respécifiée, ni son contenu modifié, avant la fin de tous les
balayages contenant la composante Ci.
Valeurs
Lf 16 8 + 3 × Nf
P 18 8-255 8, 12 8, 12 2-165
Y 16 0-65 535
X 16 1-65 535
Ci 18 0-25535
Hi 14 1-43550
Vi 14 1-43550
La Figure B.4 spécifie l'en-tête de balayage, devant figurer au début d'un balayage. Cet en-tête spécifie la ou les
composantes contenues dans le balayage, les destinations auxquelles seront retrouvées les tables de codage entropique à
utiliser pour chaque composante du balayage et, en DCT progressif, la partie des données du coefficient quantifié DCT
contenue dans le balayage. Pour les processus sans perte, les paramètres de balayage spécifient le prédicteur et la
transformation point.
NOTE – Si une seule composante d'image figure dans un balayage, cette composante est, par définition, non entrelacée. Si
plusieurs composantes d'image figurent dans un balayage, elles sont, par définition, entrelacées.
En-tête de balayage
Cs 1 Td 1 Ta 1 Cs2 Td 2 Ta 2 CsNs
TISO0860-93/d022
Td Ns Ta Ns
Le marqueur et les paramètres représentés Figure B.4 sont définis comme suit. Les tailles et valeurs permises pour
chaque paramètre sont données dans le Tableau B.3.
Ls: longueur de l'en-tête de balayage – Spécifie la longueur de l'en-tête de balayage représenté Figure B.4
(voir B.1.1.4).
Ns: nombre de composantes d'image du balayage – Spécifie le nombre de composantes d'image source du
balayage. La valeur de Ns doit être égale au nombre d'ensembles de paramètres de spécification de
composantes de balayage (Csj, Tdj et Taj) figurant dans l'en-tête de balayage.
Csj: sélecteur de composante de balayage – Détermine la jème composante du balayage, parmi les
Nf composantes d'image spécifiées dans les paramètres de trame. Chaque Csj doit correspondre à une des
Ci valeurs spécifiées dans l'en-tête de trame, et l'ordre de l'en-tête de balayage doit suivre l'ordre de l'en-tête de
trame. Si Ns > 1, l'ordre des composantes entrelacées de la MCU est: première, Cs1; deuxième, Cs2; etc.
Si Ns > 1, les restrictions suivantes s'appliquent aux composantes d'image contenues dans le balayage:
Ns
∑ H j × V j ≤ 10,
j =1
Considérons, par exemple, une image ayant trois composantes, de dimensions maximales 512 lignes et
512 échantillons par ligne, avec les facteurs d'échantillonnage suivants:
Composante 0 H 0 = 4, V0 = 1
Composante 1 H1 = 1, V1 = 2
Composante 2 H 2 = 2, V2 = 2
Tdj: sélecteur de destination de table de codage entropique DC – Spécifie l'une des quatre destinations de
table de codage entropique DC possibles, à laquelle sera retrouvée la table de codage nécessaire pour le
décodage des coefficients DC de la composante Csj. La table de codage entropique DC doit avoir été installée
à cette destination (voir B.2.4.2 et B.2.4.3) lorsque le décodeur est prêt à décoder le balayage courant. Ce
paramètre spécifie la destination de table de codage entropique pour les processus sans perte.
Taj: sélecteur de destination de table de codage entropique AC – Spécifie l'une des quatre destinations de
table de codage entropique AC possibles, à laquelle sera retrouvée la table de codage nécessaire pour le
décodage des coefficients AC de la composante Csj. La table de codage entropique AC doit avoir été installée
à cette destination (voir B.2.4.2 et B.2.4.3) lorsque le décodeur est prêt à décoder le balayage courant. Ce
paramètre est nul pour les processus sans perte.
Ss: début de la sélection spectrale ou de sélection de prédicteur – Dans les modes de fonctionnement DCT, ce
paramètre spécifie le premier coefficient DCT de chaque bloc de la séquence en zigzag à coder dans le
balayage. Ce paramètre doit être mis à zéro pour les processus basés DCT séquentiels. Dans les modes de
fonctionnement sans perte, ce paramètre est utilisé pour choisir le prédicteur.
Se: fin de sélection spectrale – Spécifie le dernier coefficient de chaque bloc de la séquence en zigzag à coder
dans un balayage. Ce paramètre doit être mis à 63 pour les processus DCT séquentiels, il doit être nul pour les
processus sans perte.
Ah: paramètre de position binaire en approximations successives (haut) – Il spécifie la transformation point
utilisée dans le précédent balayage (c'est-à-dire le paramètre Al de position binaire de l'approximation dans le
précédent balayage) pour la bande de coefficients spécifiée par Ss et Se. Ce paramètre doit être mis à zéro pour
le premier balayage de chaque bande de coefficients. En mode de fonctionnement sans perte, ce paramètre est
dénué de signification, il doit être mis à zéro.
Al: paramètre de position binaire en approximations successives (bas) ou de transformation point – Dans les
modes de fonctionnement basés DCT, ce paramètre spécifie la transformation point, c'est-à-dire la position
binaire inférieure avant codage de la bande de coefficients spécifiés par Ss et Se. Ce paramètre doit être mis à
zéro pour les processus basés DCT séquentiels. En mode de fonctionnement sans perte, il spécifie la
transformation point Pt.
Les sélecteurs de destination de table de codage entropique Tdj et Taj spécifient soit les tables de Huffman (dans les
trames utilisant le codage de Huffman), soit les tables de codage arithmétique (dans les trames utilisant le codage
arithmétique). Dans le dernier cas, le sélecteur de destination de table de codage entropique spécifie une destination de
table décisionnelle de codage arithmétique et la zone statistique associée.
Valeurs
Ls 16 6 + 2 × Ns
Ns 18 1-4
Csj 18 0-255a)
La Figure B.5 spécifie qu'aux emplacements indiqués sur la Figure B.2, tous les segments de spécification de tables ou
les segments marqueurs divers spécifiés de B.2.4.1 à B.2.4.6 doivent figurer dans n'importe quel ordre, et sans limite
quant au nombre de segments.
Segment Segment
[ ] [ ] [ Segment ]
marqueur 1 marqueur 2 marqueur der
TISO0870-93/d023
Si une spécification de table se présente, pour une destination particulière, dans les données d'image comprimées, elle
doit remplacer toute spécification antérieure et doit être utilisée chaque fois que cette destination est spécifiée dans les
balayages restants de la trame. Si une spécification de table, pour une destination donnée, se présente plusieurs fois dans
les données d'image comprimées, chaque spécification doit remplacer la spécification précédente. Les spécifications de
tables de quantification ne doivent pas être altérées entre les balayages DCT progressifs d'une composante donnée.
La Figure B.6 spécifie le segment marqueur définissant une ou plusieurs tables de quantification.
DQT Lq Pq Tq Q0 Q1 Q63
TISO0880-93/d024
Multiple (t = 1, ..., n)
Les marqueurs et paramètres de la Figure B.6 sont définis comme suit. La taille et les valeurs permises pour chaque
paramètre sont données dans le Tableau B.4.
DQT: marqueur de définition de table de quantification – Marque le début des paramètres de spécification de
table de quantification.
Lq: longueur de définition de table de quantification – Spécifie la longueur de tous les paramètres de table de
quantification indiqués Figure B.6 (voir B.1.1.4).
Pq: précision des éléments de la table de quantification – Spécifie la précision des valeurs Qk. La valeur 0
indique la valeur 8 bits pour Qk; la valeur 1 indique des valeurs 16 bits pour Qk. Pq doit être nul pour la
précision d'échantillon 8 bits (voir B.2.2).
Tq: identificateur de destination de table de quantification – Spécifie une des quatre destinations possibles,
dans le décodeur où la table de quantification doit être installée.
Qk: élément de table de quantification – Spécifie le kième élément, parmi 64 éléments, où k est l'indice dans la
séquence en zigzag des coefficients DCT. Les éléments de quantification doivent être spécifiés dans l'ordre de
balayage en zigzag.
Valeurs
Lq 16 16 n Non défini
2 + ∑ (65 + 64 × Pq(t ) )
t =1
Pq 14 16 0 0, 1 0, 1 Non défini
La valeur n du Tableau B.4 est le nombre de tables de quantification spécifié dans le segment marqueur DQT.
Lorsqu'une table de quantification a été définie pour une destination particulière, elle remplace les tables précédemment
stockées pour cette destination et elle doit être utilisée, lorsqu'elle est référencée, dans les balayages restants de l'image
courante et dans les images suivantes représentées dans le format abrégé des données d'images comprimées. Si aucune
table n'a été définie pour une destination particulière, et que cette destination est spécifiée dans un en-tête de trame, les
résultats sont imprévisibles.
Un processus basé DCT 8 bits ne doit pas utiliser une table de quantification de précision 16 bits.
La Figure B.7 spécifie le segment marqueur définissant une ou plusieurs spécifications de table de Huffman.
Affect. longueurs
DHT Lh Tc Th L1 L2 L16
symboles
Multiple (t = 1, ..., n)
Paramètres d'affectation de longueurs des symboles
TISO0890-93/d025
Les marqueurs et paramètres de la Figure B.7 sont définis ci-après. Les tailles et valeurs permises pour chaque paramètre
sont données dans le Tableau B.5.
DHT: définition de marqueur de table de Huffman – Marque le début des paramètres de définition de tables
de Huffman.
Lh: longueur de la définition de tables de Huffman – Spécifie la longueur de tous les paramètres de tables de
Huffman de la Figure B.7 (voir B.1.1.4).
Tc: classe de table – 0 = table DC ou table sans perte; 1 = table AC.
Th: identificateur de destination de table de Huffman – Spécifie une des quatre destinations possibles, dans le
décodeur où la table de Huffman doit être installée.
Li: nombre de codes de Huffman de longueur i – Spécifie le nombre de codes de Huffman de chacune des
16 longueurs possibles autorisées par la présente Spécification. Les Li sont des éléments de la liste BITS.
Vij: valeur associée à chaque code de Huffman – Spécifie, pour chaque i, la valeur associée à chaque code de
Huffman de longueur i. La signification de chaque valeur est déterminée par le modèle de codage de Huffman.
Les Vij sont des éléments de la liste HUFFVAL.
La valeur n du Tableau B.5 est le nombre de tables de Huffman spécifié dans le segment marqueur DHT. La valeur mt,
nombre de paramètres qui suivent les 16 Li(t) paramètres pour la table de Huffman t, est donnée par:
16
m t = ∑ Li
i =1
Lorsqu'une table de Huffman a été définie pour une destination particulière, elle remplace les tables précédemment
stockées pour cette destination et elle doit être utilisée, lorsqu'elle est référencée, dans les balayages restants de l'image
courante et dans les images suivantes représentées dans le format abrégé des données d'images comprimées. Si aucune
table n'a été définie pour une destination particulière, et que cette destination est spécifiée dans un en-tête de balayage,
les résultats sont imprévisibles.
Valeurs
n
Lh 16 2 + ∑ (17 + mt )
t =1
Tc 14 0, 1 0
Th 14 0, 1 0-3
Li 18 0-255
Vi, j 18 0-255
La Figure B.8 spécifie le segment marqueur définissant une ou plusieurs spécifications de tables décisionnelles
arithmétiques. Elles remplacent les tables décisionnelles de codage arithmétique par défaut, instaurées par le marqueur
SOI pour les processus de codage arithmétique. (Voir F.1.4.4.1.4 et F.1.4.4.2.1.)
DAC La Tc Tb Cs
TISO0900-93/d026
Multiple (t = 1, ..., n)
Les marqueurs et paramètres de la Figure B.8 sont définis ci-après. Les tailles et valeurs permises pour chaque paramètre
sont données dans le Tableau B.6.
La: longueur de la définition des paramètres décisionnels de codage arithmétique – Spécifie la longueur de
tous les paramètres décisionnels de codage arithmétique de la Figure B.8 (voir B.1.1.4).
Tb: identificateur de destination de table décisionnelle de codage arithmétique – Spécifie une des quatre
destinations possibles dans le décodeur où la table décisionnelle de codage arithmétique doit être installée.
Cs: valeur de table décisionnelle – Table décisionnelle AC ou table décisionnelle DC (et sans perte). Une
valeur unique de Cs doit suivre chaque valeur de Tb. Pour les tables décisionnelles AC, Tc doit être égal à 1
et Cs doit contenir une valeur de Kx dans la plage 1 ≤ Kx ≤ 63. Pour les tables décisionnelles DC (et sans
perte), Tc doit être nul, et Cs contenir deux paramètres de 4 bits, L et U, tels que 0 ≤ L ≤ U ≤€15, avec
Cs = L + 16 × U.
La valeur n du Tableau B.6 est le nombre de tables décisionnelles spécifié dans le segment marqueur DAC. Les
paramètres L et U sont les limites inférieure et supérieure des valeurs décisionnelles, utilisées dans les procédures de
codage arithmétique définies pour le codage de coefficients DC et le codage sans perte. La plage séparée de valeurs 1
à 63, indiquée pour le codage DCT, concerne le paramètre décisionnel Kx utilisé dans le codage des coefficients AC.
Valeurs
DRI Lr Ri
TISO0910-93/d027
Les marqueurs et paramètres de la Figure B.9 sont définis ci-après. Les tailles et les valeurs permises pour chaque
paramètre sont données dans le Tableau B.7.
DRI: définition du marqueur d'intervalle de reprise – Marque le début des paramètres définissant l'intervalle
de reprise.
Lr: définition de la longueur du segment intervalle de reprise – Spécifie la longueur des paramètres du
segment DRI représenté Figure B.9 (voir B.1.1.4).
Dans le Tableau B.7, la valeur n est le nombre de rangées de MCU dans l'intervalle de reprise. Le paramètre MCUR est
le nombre de MCU requis pour constituer une rangée d'échantillons de chaque composante du balayage. Le marqueur
SOI désactive les intervalles de reprise. Un segment marqueur DRI avec Ri non nul doit figurer pour activer le
traitement des intervalles de reprise dans les balayages suivants. Un segment marqueur DRI où Ri est égal à zéro
désactive les intervalles de reprise dans les balayages suivants.
Tableau B.7 – Tailles et valeurs des paramètres de définition du segment intervalle de reprise
Valeurs
Lr 16 4
Segment commentaire
COM Lc Cm . . . Cm
1 Lc-2
TISO00920-93/d028
Les marqueurs et paramètres de la Figure B.10 sont définis ci-après. Les tailles et valeurs permises pour chaque
paramètre sont données dans le Tableau B.8.
COM: marqueur commentaire – Marque le début d'un commentaire.
Lc: longueur du segment commentaire – Spécifie la longueur du segment commentaire représenté Figure B.10
(voir B.1.1.4).
Cmi: octet de commentaire – Son interprétation est laissée à l'application.
Valeurs
Lc 16 2-65 535
Cmi 18 0-25522
APPn Lp Ap 1 . . . ApLp-2
TISO0930-93/d029
Le marqueur et les paramètres de la Figure B.11 sont définis ci-après. Les tailles et valeurs pour chaque paramètre sont
données dans le Tableau B.9.
APPn: marqueur de données d'application – Marque le début d'un segment de données d'application.
Lp: longueur d'un segment de données d'application – Spécifie la longueur du segment de données
d'application représenté Figure B.11 (voir B.1.1.4).
Les segments APPn (application) sont réservés pour utilisation par l'application. Comme ces segments peuvent être
définis différemment pour des applications différentes, ils doivent être supprimés lors des transferts de données entre des
environnements d'application différents.
Valeurs
Lp 16 2-65 535
Api 18 0-25522
La Figure B.12 spécifie le segment marqueur de définition du nombre de lignes. Le segment définition du nombre de
lignes (DNL) (define number of lines) fournit, à la fin du premier balayage, un mécanisme des définitions ou
redéfinitions du nombre de lignes de la trame (le paramètre Y de l'en-tête de trame). La valeur spécifiée doit être
cohérente avec le nombre de rangées de MCU codé dans le premier balayage. Ce segment, s'il est utilisé, ne peut se
présenter qu'à la fin du premier balayage, et seulement après le codage d'un nombre entier de rangées de MCU. Ce
segment marqueur est obligatoire si le nombre de lignes (Y) spécifié dans l'en-tête de trame a la valeur zéro.
DNL Ld NL
TISO0940-93/d030
Les marqueurs et paramètres de la Figure B.12 sont définis ci-après. Les tailles et valeurs permises pour chaque
paramètre sont données dans le Tableau B.10.
DNL: marqueur de définition du nombre de lignes – Marque le début du segment de définition du nombre de
lignes.
Ld: longueur du segment de définition du nombre de lignes – Spécifie la longueur du segment de définition
du nombre de lignes représenté Figure B.12 (voir B.1.1.4).
NL: nombre de lignes – Spécifie le nombre de lignes de la trame (voir définition de Y en B.2.2.).
Valeurs
Ld 16 4-65535a)
NL 16 1-65 535a)
a) La valeur spécifiée doit être cohérente avec le nombre de lignes codé à l'endroit où le segment DNL termine le
segment de données comprimées.
La Figure B.13 spécifie l'ordre des constituants du format de transfert pour les processus de codage hiérarchique.
TISO0950-93/d031
La syntaxe du mode hiérarchique exige qu'un segment marqueur DHP apparaisse avant la ou les trames non
différentielles. Elle peut inclure des segments marqueurs EXP et des trames différentielles, qui doivent suivre la trame
non différentielle initiale. La structure de trame en mode hiérarchique est identique à celle en mode non hiérarchique.
Les trames non différentielles de la séquence hiérarchique doivent utiliser un des processus de codage spécifiés pour les
marqueurs SOFn: SOF0, SOF1, SOF2, SOF3, SOF9, SOF10 et SOF11. Les trames différentielles doivent utiliser un des
processus spécifiés pour SOF5, SOF6, SOF7, SOF13, SOF14 et SOF15. Les combinaisons permises de marqueurs SOF
dans une même séquence hiérarchique sont spécifiées dans l'Annexe J.
La précision d'échantillon (P) doit être constante pour toutes les trames et avoir la même valeur que celle codée dans le
segment marqueur DHP. Le nombre d'échantillons par ligne (X), pour toutes les trames, ne doit pas dépasser la valeur
codée dans le segment marqueur DHP. Si le nombre de lignes (Y) est non nul dans le segment marqueur DHP, le
nombre de lignes, pour toutes les trames, ne doit pas dépasser la valeur codée dans le segment marqueur DHP.
Le segment DHP définit les composantes d'image, la taille et les facteurs d'échantillonnage de la séquence hiérarchique
complète de trames. Le segment DHP doit précéder la première trame; un seul segment DHP doit figurer dans les
données d'image comprimées.
La structure du segment marqueur DHP a une syntaxe identique à celle de l'en-tête de trame, sauf que le marqueur DHP
est utilisé à la place du marqueur SOFn. Les figures et la description en B.2.2 s'appliquent donc, sauf que le paramètre
sélecteur de destination de table de quantification doit être mis à zéro dans le segment DHP.
La Figure B.14 spécifie la structure du segment marqueur EXP. Le segment marqueur EXP doit figurer si (et seulement
si) l'expansion des composantes de référence est requise horizontalement ou verticalement. Les paramètres du segment
EXP s'appliquent uniquement à la trame suivante de l'image (qui doit être une trame différentielle). Si nécessaire, le
segment EXP peut être un des segments de spécification de tables/segments marqueurs divers précédant l'en-tête de
trame; le segment EXP ne doit pas être un des segments de spécification de tables/segments marqueurs divers, précédant
l'en-tête de balayage ou un segment marqueur DHP.
Segment d'expansion
EXP Le Eh Ev
TISO0960-93/d032
Les paramètres de la Figure B.14 sont définis ci-après. Les tailles et les valeurs permises pour chaque paramètre sont
données dans le Tableau B.11.
EXP: marqueur d'expansion des composantes de référence – Marque le début du segment d'expansion des
composantes de référence.
Le: longueur du segment d'expansion des composantes de référence – Spécifie la longueur du segment
d'expansion des composantes de référence (voir B.1.1.4).
Ev: expansion verticale – Valeur 1: expansion verticale de la composante de référence; valeur 0: expansion
verticale non requise.
Valeurs
Le 16 3,1
Eh 14 0, 1
Ev 14 0, 1
La Figure B.2 présente les constituants de haut niveau du format de transfert. Ce format inclut toutes les spécifications
de tables requises pour le décodage. Si un environnement d'application prevoit d'autres méthodes de spécification de
tables que celles fournies au moyen des données d'image comprimées, certaines ou toutes les spécifications de tables
peuvent être omises. Ont le format abrégé, les données d'image comprimées auxquelles manquent des données de
spécification de tables nécessaires pour le décodage.
La Figure B.2 présente les constituants de haut niveau du format de transfert. Si aucune trame ne figure dans les données
comprimées, la seule fonction des données d'image comprimées est de véhiculer des spécifications de tables ou segments
marqueurs divers définis en B.2.4.1, B.2.4.2, B.2.4.5 et B.2.4.6. Dans ce cas, les données d'image comprimées ont le
format abrégé de données de spécification de tables (voir la Figure B.15).
TISO0970-93/d033
B.6 Résumé
L'ordre des parties constitutives du format de transfert et de toutes les structures de segment marqueur est résumé
Figures B.16 et B.17. A noter que Figure B.16, les rectangles entourés d'un trait double contiennent des segments
marqueurs. Figures B.16 et B.17, les rectangles entourés d'un trait épais contiennent uniquement des marqueurs.
Le segment EXP peut être combiné avec les autres segments tables/marqueurs divers précédant l'en-tête de trame, mais
pas avec les segments tables/marqueurs divers précédant le segment DHP ou l'en-tête de balayage.
Tables/
divers EXP SOFn DNL
i=1 à Nf
(En-tête de trame)
SOFn Lf P Y X Nf Ci Hi Vi Tq i
i=1 à Ns
(En-tête de balayage)
SOS Ls Ns Cs i Td i Taii Ss Se Ah Al
i=1 à Nf
(Segment DHP)
DHP Lf P Y X Nf Ci Hi Vi Tq i
(=0)
(Segment DNL)
DNL Ld NL
(Segment EXP)
EXP Le Eh Ev
(Tables/divers)
DQT Lq Pq Tq Q0 Q1 Q 63
Table(s) de codage
de Huffman Multiple (n fois)
Commentaire
COM Lc Cm 1 . . . . Cm Lc-2
Application
APP n Lp Ap 1 . . . . Ap Lp-2
Format abrégé ou certaines tables situées ailleurs
TISO0990-93/d035
Annexe C
Une procédure de codage de Huffman peut être utilisée pour le codage entropique, dans tout processus de codage. Des
modèles de codage du codage de Huffman sont définis aux Annexes F, G et H. La présente annexe définit les
spécifications des tables de Huffman.
Les tables de Huffman sont spécifiées sous la forme d'une liste de 16 octets (BITS), donnant le nombre de codes pour
chaque longueur de code de 1 à 16. Cette liste est suivie d'une liste (HUFFVAL) de valeurs de symboles, sur 8 bits,
affectées à chaque code de Huffman. Ces valeurs sont placées dans la liste par longueurs croissantes. Les longueurs de
code supérieures à 16 bits ne sont pas permises. En outre, les codes doivent être générés en sorte que tous les mots dont
le code est composé de bits 1 soient réservés, quelle que soit leur longueur, comme préfixes de mots de code plus longs.
NOTE – L'ordre des valeurs de symbole dans HUFFVAL est déterminé uniquement par les longueurs de code. Pour une
longueur de code donnée, l'ordre des valeurs de symbole est arbitraire.
La présente annexe spécifie les procédures par lesquelles les tables de Huffman (ou les mots de code de Huffman et leurs
correspondants de 8 bits) sont dérivées des deux listes (BITS et HUFFVAL) du format de transfert. Toutefois, la façon
dont ces listes sont générées n'est pas spécifiée. Les listes doivent être générées d'une façon qui soit cohérente avec les
règles de codage de Huffman et doivent respecter les contraintes précisées dans le précédent paragraphe. L'Annexe K
contient un exemple de procédure de génération de listes de longueurs et de valeurs de codes de Huffman, qui sont
conformes à ces règles.
NOTE – Dans la présente Spécification, il n'est stipulé aucune obligation pour un codeur ou un décodeur quant à la mise
en œuvre des procédures exactement de la façon spécifiée par les organigrammes de cette annexe. Il est seulement nécessaire qu'un
codeur ou un décodeur mette en œuvre la fonction spécifiée dans la présente annexe. Le seul critère à considérer, pour un codeur ou
un décodeur, en matière de conformité à la présente Spécification, est qu'il satisfasse les conditions données à l'article 6 (pour les
codeurs) ou à l'article 7 (pour les décodeurs), telles que déterminées par les tests de conformité spécifiés dans la Partie 2.
Le marqueur DHT signale le début de définition de tables de Huffman dans les données d'image comprimées. Le
paragraphe B.2.4.2 prescrit la syntaxe de spécification des tables de Huffman.
C.2 Conversion des spécifications de tables de Huffman en tables de codes et longueurs de code
La conversion des tables de Huffman spécifiées dans le format de transfert en tables de codes et longueurs de code
utilise trois procédures: la première procédure (Figure C.1) génère une table de longueurs de codes de Huffman; la
deuxième procédure (Figure C.2) génère les codes de Huffman à partir de la table construite par l'organigramme de la
Figure C.1; la troisième procédure (Figure C.3) génère les codes de Huffman dans l'ordre des valeurs de symboles.
Etant données une liste BITS (1 à 16) contenant le nombre de codes de chaque taille et une liste HUFFVAL contenant
les valeurs à associer, comme décrit ci-dessus, à ces codes, deux tables sont générées. La table HUFFSIZE contient une
liste de longueurs de code; la table HUFFCODE contient les codes de Huffman correspondant à ces longueurs.
A noter que la variable LASTK est mise à l'indice de la dernière entrée de la table.
Une table de codes de Huffman, HUFFCODE, contenant un code pour chaque taille de HUFFSIZE, est générée par la
procédure de la Figure C.2. La notation «SLL CODE 1» de la Figure C.2 indique un décalage logique à gauche de
CODE, d'une position binaire.
Deux tables, HUFFCODE et HUFFSIZE, ont maintenant été générées. Les entrées des tables sont ordonnées par valeurs
numériques et longueurs de code croissantes.
Les tables de codes de la procédure de codage, EHUFCO et EHUFSI, sont créées en réordonnant les codes spécifiés par
HUFFCODE et HUFFSIZE selon les valeurs affectées à chaque code dans HUFFVAL.
La racine d'un code de Huffman est placée au MSB (bit de plus fort poids) de l'octet, les bits successifs étant placés du
MSB au LSB (bit de plus faible poids) de cet octet. Les éventuels bits restants vont dans l'octet suivant, selon les mêmes
règles.
Les entiers associés aux codes de Huffman sont accolés, leur MSB adjacent au LSB du code de Huffman précédent.
Generate_size_table
K=0
I=1
J=1
HUFFSIZE(K) = I Non
K=K+1 J > BITS(I)?
J=J+1
Oui
I=I+1
J=1
Non
I > 16?
Oui
HUFFSIZE(K) = 0
LASTK = K
Fait
TISO1000-93/d036
Generate_code_table
K=0
CODE = 0
SI = HUFFSIZE(0)
HUFFCODE(K) = CODE
CODE = CODE + 1
K=K+1
Oui
HUFFSIZE(K) = SI?
Non
Oui
HUFFSIZE(K) = 0?
Non
TISO1010-93/d037
Oui Non
HUFFSIZE(K) = SI?
Order_codes
K=0
I = HUFFVAL(K)
EHUFCO(I) = HUFFCODE(K)
EHUFSI(I) = HUFFSIZE(K)
K=K+1
Oui
K < LASTK?
Non
Fait
TISO1020-93/d038
Annexe D
Codage arithmétique
(Cette annexe fait partie intégrante de la présente Recommandation | Norme internationale)
Une procédure de codage arithmétique binaire adaptatif peut être utilisée pour le codage entropique, dans tout processus
de codage sauf le processus séquentiel de base. Des modèles de codage arithmétique binaire adaptatif sont définis aux
Annexes F, G et H. Les procédures de codage et de décodage arithmétiques utilisées dans ces modèles sont définies dans
la présente annexe.
L'exemple simple de test donné en K.4 pourra être utile pour déterminer si une réalisation donnée est correcte.
NOTE – Dans la présente Spécification, il n'est stipulé aucune obligation pour un codeur ou un décodeur quant à la mise
en œuvre des procédures exactement de la façon spécifiée par les organigrammes de cette annexe. Il est seulement nécessaire qu'un
codeur ou un décodeur mette en œuvre la fonction spécifiée dans la présente annexe. Le seul critère à considérer, pour un codeur ou
un décodeur, en matière de conformité à la présente Spécification, est qu'il satisfasse les conditions données à l'article 6 (pour les
codeurs) ou à l'article 7 (pour les décodeurs), telles que déterminées par les tests de conformité spécifiés dans la Partie 2.
Quatre procédures de codage arithmétique sont requises dans un système à codage arithmétique (voir le Tableau D.1).
Procédure Objet
Les procédures «Code_0(S)» et «Code_1(S)» codent respectivement la décision «0» et la décision «1». S est un indice
de contexte qui identifie une estimation de probabilité conditionnelle particulière utilisée dans le codage de la décision
binaire. La procédure «Initenc» initialise le codeur entropique à codage arithmétique. La procédure «Flush» termine le
segment à codage entropique en préparation du marqueur qui suit.
Le codeur arithmétique code une série de symboles binaires, «0» et «1», chacun représentant le résultat possible d'une
décision binaire.
Chaque «décision binaire» détermine un choix entre deux possibilités. Cette décision binaire peut concerner: un signe
(positif ou négatif), une valeur absolue (nulle ou non nulle) ou la valeur d'un bit déterminé dans une séquence binaire
(zéro ou un).
Le train binaire de sortie (segment de données à codage entropique) représente une fraction binaire dont la précision
augmente au fur et à mesure que des octets sont accolés par le processus de codage.
La subdivision récursive en intervalles de probabilité est la base des procédures de codage arithmétique binaire. A
chaque décision binaire, l'intervalle de probabilité courant est divisé en deux sous-intervalles, le train binaire étant
modifié (si nécessaire) en sorte qu'il pointe vers la base (la limite inférieure) du sous-intervalle de probabilité attribué au
symbole qui s'est présenté.
Lors de la partition de l'intervalle de probabilité courant en deux sous-intervalles, le sous-intervalle du symbole le moins
probable (LPS) et le sous-intervalle du symbole le plus probable (MPS) sont ordonnés en sorte que le sous-intervalle du
MPS soit le plus voisin de zéro. Lors du codage du LPS, la taille du sous-intervalle du MPS est ajoutée au train binaire
(contenu du registre de code). Cette convention de codage nécessite que les symboles soient reconnus comme MPS ou
LPS, plutôt que comme symboles 0 ou 1. En conséquence, le codage d'une décision n'est possible que si la taille du sous-
intervalle du LPS et la signification attribuée au MPS, pour cette décision, sont connues.
La subdivision de l'intervalle de probabilité courant nécessiterait idéalement une multiplication d'intervalle par
l'estimation de probabilité du LPS. Comme cette division est faite approximativement, le sous-intervalle du LPS peut
devenir plus grand que le sous-intervalle du MPS. Quand cela se produit, une «permutation conditionnelle» échange les
affectations des sous-intervalles, en sorte d'attribuer le plus grand sous-intervalle au MPS.
Comme la procédure de codage implique l'addition de fractions binaires, au lieu de la concaténation de mots de code
entiers, les décisions binaires les plus probables peuvent parfois être codées à un coût bien inférieur à un bit par décision.
Un codeur arithmétique binaire adaptatif nécessite un modèle statistique – un modèle de sélection des estimations de
probabilité conditionnelle à utiliser pour le codage de chaque décision binaire. Lorsqu'une estimation de probabilité de
décision binaire donnée dépend d'un ou plusieurs éléments (le contexte) déjà codés, elle est «conditionnée» par ce ou ces
éléments. Le conditionnement d'une estimation de probabilité par des décisions codées antérieurement doit être identique
dans le codeur et dans le décodeur, et ne peut donc utiliser que des informations connues des deux.
Chaque estimation de probabilité conditionnelle requise par le modèle statistique est conservée dans une position de
mémoire, ou «registre statistique», identifiée par un indice de contexte unique S. Le codeur arithmétique est adaptatif, ce
qui signifie que l'estimation de probabilité de chaque indice de contexte est établie et conservée par le système de codage
arithmétique, sur la base de décisions de codage antérieures concernant cet indice de contexte.
Les procédures de codage utilisent une arithmétique entière à précision fixe et une représentation entière des valeurs
fractionnelles dans lesquelles X’8000’ peut être considéré comme la valeur décimale 0,75. L'intervalle de probabilité A
est maintenu dans la plage entière X’8000’ ≤ A < X’10000’, en le doublant chaque fois que sa valeur entière devient
inférieure à X’8000’, ce qui équivaut à maintenir A dans la plage décimale 0,75 ≤ A < 1,5. Cette procédure de
doublement est appelée renormalisation.
Le registre de code, C, contient les derniers bits de la séquence binaire. C est doublé chaque fois que A est doublé. Pour
éviter le dépassement de capacité de C, un octet de données est enlevé périodiquement des bits de plus fort poids du
registre C, et placé dans le segment à codage entropique.
Pour limiter la retenue dans le segment à codage entropique, les octets de sortie X’FF’ sont retardés jusqu'à résolution de
la retenue. Des octets 0 sont bourrés après chaque octet X’FF’ se présentant dans le segment à codage entropique, pour
éviter la génération accidentelle de marqueurs dans ce segment.
La restriction de A à la plage 0,75 ≤ A < 1,5 permet d'utiliser une approximation arithmétique simple pour la subdivision
de l'intervalle de probabilité. Normalement, si l'estimation courante de la probabilité du LPS pour l'indice de contexte S
est Qe(S), le calcul précis des intervalles nécessiterait:
Comme la valeur décimale de A est de l'ordre de l'unité, ces équations peuvent être approximées par:
Chaque fois que le LPS est codé, la valeur de A – Qe(S) est ajoutée au registre de code, et l'intervalle de probabilité est
ramené à Qe(S). Chaque fois que le MPS est codé, le registre de code est laissé inchangé et l'intervalle de probabilité est
ramené à A – Qe(S). La plage de précision requise pour A est alors rétablie, si nécessaire, par renormalisation de A et C.
Avec la procédure décrite ci-dessus, les approximations du processus de subdivision des intervalles de probabilité
peuvent parfois rendre le sous-intervalle du LPS plus grand que le sous-intervalle du MPS. Par exemple, si la valeur de
Qe(S) est 0,5 et que A a la valeur minimale permise 0,75, le calcul par approximation donne 1/3 de l'intervalle de
probabilité pour le MPS et 2/3 pour le LPS. Pour éviter cette inversion de tailles des intervalles, une permutation
conditionnelle est opérée. L'intervalle de probabilité est subdivisé en appliquant l'approximation simple, mais les
affectations des sous-intervalles au MPS et au LPS sont permutées chaque fois que le sous-intervalle du LPS est plus
grand que le sous-intervalle du MPS. Cette permutation conditionnelle MPS/LPS ne peut avoir lieu que lorsqu'une
renormalisation est nécessaire.
Chaque décision binaire se réfère à un contexte. Un contexte est l'ensemble des décisions de codage antérieures qui
déterminent l'indice de contexte, S, en identifiant l'estimation de probabilité utilisée dans le codage de la décision.
Chaque fois qu'une renormalisation a lieu, une procédure d'estimation de probabilité est appelée pour déterminer une
nouvelle estimation de probabilité pour le contexte en cours de codage. Aucun comptage explicite des symboles n'est
nécessaire pour cette estimation. Les probabilités relatives de renormalisation après codage du LPS et du MPS donnent,
au moyen d'une machine à états d'estimation de probabilité basée sur une table, une estimation directe des probabilités.
Les organigrammes de la présente annexe supposent les structures de registre suivantes pour le codeur comme montré
dans le Tableau D.2.
MSB LSB
Les bits «a» sont les bits fractionnels du registre A (la valeur de l'intervalle de probabilité courant), les bits «x» sont les
bits fractionnels du registre de code. Les bits «s» sont des bits de bourrage optionnels, servant à limiter la retenue; les
bits «b» indiquent les positions binaires auxquelles les octets complets de données sont retirés du registre C. Le bit «c»
est un bit de retenue. Sauf au moment de l'initialisation, le bit 15 du registre A est toujours mis à 1 et le bit 16 toujours
à 0 (le LSB est le bit 0).
Ces conventions relatives au registre de code sont un exemple de réalisation possible. Toutes les conventions relatives à
ce registre, permettant la résolution de la retenue dans le codeur et produisant le même segment à codage entropique,
peuvent être utilisées. Le traitement de la retenue et le bourrage d'octets suivant X’FF’ seront décrits plus loin dans cette
annexe.
Lors du codage d'une décision binaire donnée, deux décisions sont possibles: codage d'une décision 1 ou codage d'une
décision 0. Les procédures Code_1(S) et Code_0(S) sont représentées Figures D.1 et D.2. Les procédures Code_1(S) et
Code_0(S) utilisent des estimations de probabilité d'indice de contexte S. L'indice de contexte S, déterminé par le modèle
statistique, est en général une fonction des décisions de codage antérieures; chaque valeur de S identifie une estimation
de probabilité conditionnelle particulière utilisée pour le codage de la décision binaire.
L'indice de contexte S sélectionne une position de stockage qui contient Index(S), un registre d'index pointant vers les
tables qui constituent la machine à états d'estimation de probabilité. Lors du codage d'une décision binaire, le symbole
codé est le MPS ou le LPS. Des informations additionnelles sont donc stockées pour chaque indice de contexte,
précisant la signification attribuée au symbole le plus probable MPS(S).
Pour simplifier, les organigrammes de ce paragraphe supposent que la zone de stockage du contexte pour chaque indice
de contexte S comporte un champ de stockage additionnel pour Qe(S), contenant la valeur de Qe(Index(S)). Si seules les
valeurs de Index(S) et MPS(S) sont stockées, toutes les références à Qe(S) doivent être remplacées par Qe(Index(S)).
Code_1(S)
Non Oui
MPS(S) = 1?
Code_LPS(S) Code_MPS(S)
TISO1800-93/d039
Fait
Code_0(S)
Non Oui
MSP(S) = 0?
Code_LPS(S) Code_MPS(S)
TISO1030-93/d040
Fait
Toutefois, si le sous-intervalle du LPS est plus grand que le sous-intervalle du MPS, la permutation conditionnelle
MPS/LPS a lieu et c'est le sous-intervalle MPS qui est codé.
La procédure Code_MPS(S) réduit normalement la taille de l'intervalle de probabilité au sous-intervalle MPS. Toutefois,
si le sous-intervalle du LPS est plus grand que le sous-intervalle du MPS, la permutation conditionnelle a lieu et c'est le
sous-intervalle LPS qui est codé. A noter que cette permutation conditionnelle ne peut être effectuée sans que les
procédures d'obtention d'une nouvelle estimation de probabilité du LPS (Estimate_Qe(S)_after_MPS) et de
renormalisation (Renorm_e) ne soient requises après le codage du symbole (voir la Figure D.4).
Code_LPS(S)
A = A – Qe(S)
Oui
A < Qe(S)?
Non
C=C+A
A = Qe(S)
Estimate_Qe(S)_after_LPS
Renorm_e
Fait
TISO1040-93/d041
La machine à états d'estimation de probabilité opère en plusieurs séquences d'estimation de probabilité. Ces séquences
sont chaînées en sorte de fournir des estimations de probabilité fondées sur des comptages approximatifs des symboles
dérivés de la renormalisation effectuée dans le codeur arithmétique. Certaines de ces séquences sont utilisées durant les
phases initiales «d'apprentissage» de l'estimation de probabilité; les autres sont utilisées pour les phases d'estimation
«régulières».
A chaque entrée de la machine à états d'estimation de probabilité, est affecté un indice, et à chaque indice sont associées
une valeur Qe et deux valeurs Next_Index. La valeur Next_Index_MPS donne l'indice de la nouvelle estimation de
probabilité après une renormalisation MPS, la valeur Next_Index_LPS donne l'indice de la nouvelle estimation de
probabilité après une renormalisation LPS. A noter que l'indice de la machine à états et la signification attribuée au MPS
sont conservés pour chaque indice de contexte S. La signification attribuée au MPS est changée chaque fois que l'entrée
de Switch_MPS est un.
Code_MPS(S)
A = A – Qe(S)
Non Oui
A < X’8000’?
Non Oui
A < Qe(S)?
C=C+A
A = Qe(S)
Estimate_Qe(S)_after_MPS
Renorm_e
Fait
TISO1050-93/d042
La machine à états d'estimation de probabilité est donnée dans le Tableau D.3. L'initialisation du codeur arithmétique se
fait toujours en attribuant au MPS la signification zéro et avec un index Qe zéro, comme défini dans le Tableau D.3.
Les valeurs Qe données dans le Tableau D.3 sont exprimées comme des entiers hexadécimaux. Pour convertir la
représentation entière sur 15 bits de Qe en une probabilité décimale, diviser les valeurs Qe par (4/3) × (X’8000’).
Le changement d'état dans le Tableau D.3 a uniquement lieu lors de la renormalisation du codeur arithmétique, qui doit
toujours être effectuée après le codage d'un LPS, et chaque fois que le registre d'intervalle de probabilité est inférieur à
X’8000’ (0,75 en notation décimale) après le codage d'un MPS.
Quand la renormalisation du LPS est requise, Next_Index_LPS donne le nouvel indice de l'estimation de probabilité du
LPS. Quand la renormalisation du MPS est requise, Next_Index_MPS donne le nouvel indice d'estimation de probabilité
du LPS. Si Switch_MPS est à 1 pour l'ancien indice, la signification attribuée au MPS doit être changée (ainsi que celle
attribuée au LPS).
La procédure d'estimation de la probabilité de la branche de renormalisation du MPS est donnée Figure D.5. Index(S) est
la partie des informations stockées pour l'indice de contexte S. La nouvelle valeur d'Index(S) est obtenue dans le
Tableau D.3, dans la colonne Next_Index_MPS, car c'est le nouvel indice après renormalisation du MPS. Ce nouvel
indice est stocké comme nouvelle valeur d'Index(S) dans le registre de stockage de contexte à l'indice de contexte S, et la
valeur de Qe à ce nouvel Index(S) devient le nouveau Qe(S). MPS(S) ne change pas.
Estimate_Qe(S)_
after_MPS
I = Index(S)
I = Next_Index_MPS(I)
Index(S) = I
Qe(S) = Qe_Value(I)
Fait
TISO1060-93/d043
La procédure d'estimation de la probabilité de la branche de renormalisation du LPS est représentée Figure D.6. Celle-ci
est similaire à celle de la Figure D.5, sauf que quand Switch_MPS(I) est égal à 1, la signification attribuée au MPS(S)
doit être changée.
La procédure Renorm_e de renormalisation dans le codeur est représentée Figure D.7. Le registre d'intervalle de
probabilité A et le registre de code C sont décalés, bit par bit. Le nombre de décalages est compté par le compteur CT;
quand CT est à zéro, un octet de données comprimées est retiré de C par la procédure Byte_out et CT est remis à 8. La
renormalisation continue jusqu'à ce que A ne soit pas plus grand que X’8000’.
La procédure Byte_out utilisée dans Renorm_e est représentée Figure D.8. Cette procédure opère un bourrage d'octets
pour empêcher la génération accidentelle de marqueurs par des procédures de codage arithmétique. Elle inclut un
exemple de procédure de résolution de retenue. Pour la simplicité de l'exposé, le tampon contenant le segment à codage
entropique est supposé assez grand pour contenir le segment complet.
Sur la Figure D.8, BP est le pointeur du segment à codage entropique, et B l'octet de données comprimées vers lequel
pointe BP. T, dans Byte_out, est une variable temporaire utilisée pour retenir l'octet de sortie et le bit de retenue. ST est
le compteur de pile utilisé pour compter les octets de sortie X’FF’ jusqu'à ce que toute retenue se propageant le long de
la séquence X’FF’ ait été résolue. La valeur de ST dépasse rarement trois. Toutefois, comme la limite supérieure de la
valeur de ST est limitée uniquement par la taille totale du segment à codage entropique, une précision de 32 bits est
recommandée pour ST.
Comme des grandes valeurs de ST représentent une sortie latente de données comprimées, la procédure suivante peut
être nécessaire dans les systèmes de codage synchrone à haute vitesse, pour traiter la rafale de données de sortie émise
lors de la résolution de la retenue.
Estimate_Qe(S)_
after_LPS
I = Index(S)
Non Oui
Switch_MPS(I) = 1?
MPS(S) = 1 – MPS(S)
I = Next_Index_LPS(I)
Index(S) = I
Qe(S) = Qe_Value(I)
Fait
TISO1070-93/d044
Quand le compteur de pile atteint une limite supérieure déterminée par la capacité du canal de sortie, la pile est vidée et
les octets X’FF’ empilés (ainsi que les octets 0 bourrés) sont ajoutés aux données comprimées, avant résolution de la
retenue. Si une retenue est alors générée, elle est ajoutée au zéro bourré final, convertissant ainsi la séquence finale
X’FF00’ en un marqueur privé temporaire X’FF01’. Le segment à codage entropique doit alors donner lieu à un post-
traitement de résolution de retenue afin d'éliminer le code marqueur temporaire. Dans une limite raisonnable des valeurs
de ST, ce post-traitement est très peu probable.
Dans la procédure de la Figure D.8, le décalage du registre de code de 19 bits cale les bits de sortie sur les bits de plus
faible poids de T. Le premier test détermine alors si une retenue à été générée. Si oui, elle doit être ajoutée à l'octet de
sortie précédent avant d'avancer le segment pointeur BP. La procédure «Stuff_0» bourre un octet 0 chaque fois que
l'addition de la retenue aux données se trouvant déjà dans les segments à codage entropique crée un octet X’FF’. Tous
les octets de sortie empilés – convertis en octets nuls par la retenue – sont alors placés dans le segment à codage
entropique. A noter que lors du transfert ultérieur de l'octet de sortie de T dans le segment à codage entropique (à
l'octet B), un éventuel bit de retenue positionné à 1, sera ignoré.
Si aucune retenue n'a été générée, un test est effectué pour déterminer si l'octet de sortie est X’FF’. Si oui, le compteur
de pile ST est incrémenté, car la sortie doit être retardée jusqu'à la résolution de la retenue. Si non, la retenue a été
résolue et tous les octets X’FF’ empilés doivent être placés dans le segment à codage entropique. A noter qu'un octet nul
est bourré après chaque chaque X’FF’.
Les procédures utilisées par Byte_out sont définies aux Figures D.9 à D.11.
Renorm_e
A = SLL A 1
C = SLL C 1
CT = CT – 1
Non
CT = 0?
Oui
Byte_out
CT = 8
Oui
A < X’8000’?
Non
Fait
TISO1080-93/d045
Byte_out
T = SRL C 19
Oui Non
B=B+1 T > X’FF’?
Oui
Stuff_0 T = X’FF’?
Non
Output_stacked_ Output_stacked_
ST = ST + 1
zeros X’FF’s
BP = BP + 1 BP = BP + 1
B=T B=T
C = C AND X’7FFFF’
Fait
TISO1090-93/d046
Output_stacked_
zeros
Oui
ST = 0?
Non
BP = BP + 1
B=0 Fait
ST = ST – 1
TISO1810-93/d047
Output_stacked_
X’FF’s
Oui
ST = 0?
Non
BP = BP + 1
B = X’FF’ Fait
BP = BP + 1
B=0
ST = ST – 1 TISO1100-93/d048
Stuff_0
Non
B = X’FF’?
Oui
BP = BP + 1
B=0
Fait
TISO1110-93/d049
La procédure Initenc est utilisée pour lancer le codeur arithmétique. Les étapes de base sont représentées Figure D.12.
Initenc
Initialiser
les zones statistiques
ST = 0
A = X’10000’
A = (voir Note ci-dessous)
C=0
CT = 11
BP = BPST – 1
Fait
TISO1120-93/d050
Les tables d'estimation de probabilité sont définies par le Tableau D.3. Les contextes statistiques sont initialisés avec une
signification du MPS 0 et un indice Qe 0, comme défini dans le Tableau D.3. Le compteur de pile (ST) est mis à zéro, le
registre de code (C) est mis à zéro et le registre d'intervalle est mis à X’10000’. Le compteur (CT) est mis à 11, reflétant
le fait que quand A est initialisé à X’10000’, 3 bits d'espacement plus 8 bits de sortie de C doivent être remplis avant de
retirer le premier octet. A noter que BP est initialisé pour pointer vers l'octet précédant le segment à codage entropique
(qui est un BPST). A noter également que les zones statistiques sont initialisées pour toutes les valeurs de l'indice de
contexte S à MPS(S) = 0 et Index(S) = 0.
NOTE – Bien que l'intervalle de probabilité soit initialisé à X’10000’ dans Initenc et Initdec, la précision du registre
d'intervalle de probabilité peut encore être limitée à 16 bits. Quand la précision du registre d'intervalle est de 16 bits, l'intervalle est
initialisé à zéro.
La procédure Flush est utilisée pour terminer les procédures de codage arithmétique et préparer le segment à codage
entropique à la concaténation du préfixe X’FF’ au marqueur qui suit les données à codage arithmétique. La Figure D.13
représente cette procédure de bourrage. La première étape de la procédure est de mettre le plus grand nombre possible de
bits de faible poids du registre de code à zéro, sans pointer hors de l'intervalle final. Ensuite, l'octet de sortie est calé à
gauche par un décalage de CT bits; «Byte_out» est ensuite utilisé pour retirer un octet de C. C est alors décalé à gauche
de 8 bits pour caler le second octet de sortie, et «Byte_out» est utilisé une seconde fois. On a ainsi l'assurance que les
bits de faible poids de C sont à zéro, et que ces bits zéro de fin ne seront pas écrits dans le segment à codage entropique.
Flush
Clear_final_bits
C = SLL C CT
Byte_out
C = SLL C 8
Byte_out
Discard_final_zeros
Fait
TISO1130-93/d051
Tous les octets zéro de fin déjà écrits dans le segment à codage entropique et non précédés d'un X’FF’ peuvent
(facultativement) être supprimés par la procédure Discard_final_zeros. Les octets zéro bourrés ne doivent pas être
supprimés.
Les segments à codage entropique sont toujours suivis d'un marqueur. Pour cette raison, les bits zéro de fin, nécessaires
pour compléter le décodage, ne doivent pas être inclus dans le segment à codage entropique. Au contraire, quand le
décodeur rencontre un marqueur, des bits zéro doivent être fournis à la procédure de décodage, jusqu'à la fin du
décodage. Cette convention garantit que lorsqu'un marqueur DNL est utilisé, le décodeur l'interceptera à temps pour
terminer correctement la procédure de décodage.
Clear_final_bits
T=C+A–1
T = T AND
T = X’FFFF0000’
Non
T < C?
Oui
T = T + X’8000’
C=T
Fait
TISO1140-93/d052
Discard_final_zeros
Oui
BP < BPST?
Non
Oui
BP = BP – 1 B = 0?
Non
Oui
BP = BP + 1 B = X’FF’?
Non
Fait
TISO1150-93/d053
Deux procédures sont utilisées pour le décodage arithmétique (voir le Tableau D.4).
La procédure «Decode(S)» décode la décision binaire et renvoie à une valeur 0 ou 1. Elle est l'inverse des procédures
«Code_0(S)» et «Code_1(S)» décrites en D.1. «Initdec» initialise le décodeur entropique en codage arithmétique.
Procédure Objet
La subdivision des intervalles de probabilité et l'ordre des sous-intervalles, définis pour les procédures de codage
arithmétique, s'appliquent aux procédures de décodage arithmétique.
Le contenu du registre pointe toujours vers l'intérieur de l'intervalle de probabilité courant: le processus de décodage
consiste à déterminer récursivement, pour chaque décision, quel sous-intervalle est pointé par le contenu du registre de
code, en utilisant le même processus de subdivision de l'intervalle de probabilité que dans le codeur. A chaque décision
décodée, tout intervalle ajouté par le codeur est soustrait du contenu du registre par le décodeur. Ainsi, le registre de
code du décodeur est un pointeur relatif vers l'intervalle de probabilité courant, par rapport à la base de cet intervalle.
Si la taille du sous-intervalle affecté au LPS est supérieure à celle du sous-intervalle affecté au MPS, le codeur appelle la
procédure de permutation conditionnelle. Quand les tailles des intervalles sont interverties dans le décodeur, la
signification du symbole décodé doit être changée (0 remplace 1 et vice versa).
Les approximations et l'arithmétique entière définies pour la subdivision de l'intervalle de probabilité dans le codeur
doivent également être utilisées dans le décodeur. Toutefois, chaque fois que le codeur ajoute quelque chose au registre
de code, le décodeur le soustrait de ce registre.
L'organigramme donné dans ce paragraphe suppose les structures de registre pour le décodeur comme montré dans le
Tableau D.5.
MSB LSB
Cx et C-low peuvent être considérés comme formant un registre C unique de 32 bits, car la renormalisation de C décale
d'un bit les nouvelles données du bit 15 de C-low vers bit 0 de Cx. Toutefois, les comparaisons opérées pour le décodage
utilisent Cx seul. Les nouvelles données sont insérées dans les bits «b» de C-low, octet par octet.
NOTE – Les comparaisons opérées dans les diverses procédures de ce paragraphe supposent des précisions supérieures à
16 bits. Les comparaisons logiques peuvent être effectuées avec des réalisations d'une précision de 16 bits.
Le décodeur décode une décision binaire à la fois. Après décodage de la décision, le décodeur soustrait du registre de
code toute quantité que le codeur y a ajoutée. La quantité laissée dans le registre de code est le décalage entre la base de
l'intervalle de probabilité courant et le sous-intervalle affecté aux décisions binaires non encore décodées. Dans le
premier test de la procédure Decode, représenté Figure D.16, le contenu du registre de code est comparé à la taille du
sous-intervalle MPS. Sous réserve de permutation conditionnelle, ce test détermine si le décodage concerne le MPS ou le
LPS pour l'indice de contexte S. A noter que le LPS pour l'indice de contexte S est donné par 1 – MPS(S).
Quand une renormalisation s'impose, la permutation conditionnelle MPS/LPS peut également être nécessaire. Pour la
branche LPS, la procédure de permutation conditionnelle est donnée Figure D.17. A noter que l'estimation de probabilité
dans le décodeur est identique à l'estimation de probabilité dans le codeur (Figures D.5 et D.6).
Decode(S)
A = A – Qe(S)
Oui Non
Cx < A?
Non
A < X’8000’?
Oui
TISO1160-93/d054
Renvoyer D
Pour la branche MPS du décodeur, la procédure de permutation conditionnelle est représentée Figure D.18.
Cond_LPS_
exchange(S)
Oui Non
A < Qe(S)?
D = MPS(S) D = 1 – MPS(S)
Cx = Cx – A Cx = Cx – A
A = Qe(S) A = Qe(S)
Estimate_Qe(S)_ Estimate_Qe(S)_
after_MPS after_LPS
Renvoyer D
TISO1170-93/d055
Cond_MPS_
exchange(S)
Oui Non
A < Qe(S)?
D = 1 – MPS(S) D = MPS(S)
Estimate_Qe(S)_ Estimate_Qe(S)_
after_LPS after_MPS
Renvoyer D
TISO1180-93/d056
La procédure définie pour obtenir une nouvelle estimation de probabilité dans le codeur est également utilisée dans le
décodeur.
La procédure Renorm_d de renormalisation dans le décodeur est représentée Figure D.19. CT est un compteur qui garde
trace du nombre de bits comprimés dans la section C-low du registre C. Quand CT est à zéro, un nouvel octet est inséré
dans C-low par la procédure Byte_in et CT est remis à 8.
Le registre d'intervalle de probabilité A et le registre de code C sont décalés, bit par bit, jusqu'à ce que A ne soit pas plus
grand que X’8000’.
Renorm_d
Non
CT = 0?
Oui
Byte_in
CT = 8
A = SLL A 1
C = SLL C 1
CT = CT – 1
Oui
A < X’8000’?
Non
Fait
TISO1190-93/d057
La procédure Byte_in utilisée dans Renorm_d est représentée Figure D.20. Cette procédure prélève un octet de données,
en compensation de l'octet zéro bourré après tout octet X’FF’. Elle détecte également le marqueur qui doit suivre le
segment à codage entropique. Le registre C de cette procédure est la concaténation des registres Cx et C-low. Pour
simplifier l'exposé, le tampon contenant le segment à codage entropique est supposé assez grand pour contenir le
segment entier.
B est l'octet vers lequel pointe le pointeur de segment à codage entropique BP. BP est incrémenté en premier. Si la
nouvelle valeur de B n'est pas un X’FF’, elle est insérée dans les 8 bits de plus fort poids de C-low.
Byte_in
BP = BP + 1
Oui Non
B = X’FF’?
Unstuff_0 C = C + SLL B 8
Fait
TISO1200-93/d058
La procédure Unstuff_0 est indiquée Figure D.21. Si la nouvelle valeur de B est X’FF’, BP est incrémenté pour pointer
vers l'octet suivant. Un test détermine si ce B suivant est nul. Si oui, B contient un octet bourré qui doit être sauté. Le B
nul est ignoré et la valeur de B X’FF’ qui le précède est insérée dans le registre C.
Si la valeur de B suivant un octet X’FF’ n'est pas nulle, un marqueur a été détecté. Ce marqueur est interprété comme
requis et le pointeur vers le segment à codage entropique est ajusté («Adjust BP» sur la Figure D.21) en sorte que des
octets nuls soient entrés dans le décodeur jusqu'à la fin du décodage. Une façon de le réaliser est de pointer BP vers
l'octet précédant le marqueur qui suit le segment à codage entropique.
Unstuff_0
BP = BP + 1
Oui Non
B = 0?
Interpret_marker
C = C OR X’FF00’
Adjust BP
Fait
TISO1210-93/d059
La procédure Initdec est utilisée pour lancer le décodeur arithmétique. Les étapes de base sont représentées Figure D.22
Initdec
Byte_in
C = SLL C 8
Byte_in
C = SLL C 8
CT = 0
Fait
TISO1220-93/d060
Les tables d'estimation sont définies par le Tableau D.3. Les zones statistiques sont initialisées en attribuant une
signification au MPS de 0 et avec un indice Qe 0, comme défini dans le Tableau D.3. BP, le pointeur vers le segment à
codage entropique, est alors initialisé pour pointer vers l'octet précédant le début du segment à codage entropique (à
BPST), et le registre d'intervalle est mis à la même valeur initiale que dans le codeur. Le premier octet des données
comprimées est prélevé et décalé dans Cx. Le second octet est ensuite prélevé et décalé dans Cx. Le compteur est mis à
zéro, en sorte qu'un nouvel octet de données soit prélevé par Renorm_d.
NOTE – Bien que l'intervalle de probabilité soit initialisé à X’10000’ dans Initenc et Initdec, la précision du registre
d'intervalle de probabilité peut encore être limitée à 16 bits. Quand la précision du registre d'intervalle est 16 bits, l'intervalle est
initialisé à zéro.
Le segment à codage entropique-à codage arithmétique est un entier de longueur variable. Donc, l'ordre des octets et
l'ordre des bits à l'intérieur des octets sont les mêmes que pour les paramètres (voir B.1.1.1).
Annexe E
La présente annexe décrit les procédures de contrôle du codeur et du décodeur, pour les modes de fonctionnement
séquentiels, progressifs et sans perte.
Les procédures de contrôle du codage et du décodage pour les processus hiérarchiques sont spécifiées dans l'Annexe J.
NOTES
1 Dans la présente Spécification, il n'est stipulé aucune obligation pour un codeur ou un décodeur quant à la mise en
œuvre des procédures exactement de la façon spécifiée par les organigrammes de cette annexe. Il est seulement nécessaire qu'un
codeur ou un décodeur mette en œuvre la fonction spécifiée dans la présente annexe. Le seul critère à considérer, pour un codeur ou
un décodeur, en matière de conformité à la présente Spécification, est qu'il satisfasse les conditions données à l'article 6 (pour les
codeurs) ou à l'article 7 (pour les décodeurs), telles que déterminées par les tests de conformité spécifiés dans la Partie 2.
2 La présente annexe ne décrit pas les procédures de préparation spécifiques aux réalisations, éventuellement
nécessaires.
Encode_image
Encode_frame
Fait
TISO1230-93/d061
Dans tous les cas où des marqueurs sont accolés aux données comprimées, des octets de remplissage optionnels X’FF’
peuvent précéder ces marqueurs.
La procédure de contrôle du codage d'une trame porte sur les balayages de cette trame. L'en-tête de trame est d'abord
accolé, puis les balayages sont codés. Des spécifications de tables et d'autres segments marqueurs peuvent précéder le
marqueur SOFn, comme indiqué par [tables/divers] sur la Figure E.2.
Encode_frame
[Accoler tables/divers]
Accoler marqueur SOFn et
reste d'en-tête de trame
Encode_scan
Non
Oui
Autres balayages?
Non
Fait
TISO1240-93/d062
Un balayage consiste en un passage unique au travers des données de chaque composante du balayage. Des
spécifications de tables et d'autres segments marqueurs peuvent précéder le marqueur SOS. Si plusieurs composantes
sont codées dans le balayage, les données sont entrelacées. Si la reprise est activée, les données sont segmentées en
intervalles de reprise. Si la reprise est activée, un marqueur RSTm est placé dans les données codées, entre les intervalles
de reprise. Si la reprise est désactivée, la procédure de contrôle est la même, sauf que le balayage complet contient un
seul intervalle de reprise. Les données d'image comprimées générées par un balayage sont toujours suivies d'un
marqueur, le marqueur EOI ou le marqueur du segment marqueur suivant.
La Figure E.3 présente la procédure de contrôle de balayage du processus de codage. La boucle se termine quand le
processus de codage a codé le nombre d'intervalles de reprise constituant le balayage. «m» est le compteur modulo 8
associé à l'intervalle de reprise, nécessaire pour l'utilisation du marqueur RSTm. L'arithmétique modulo 8 de ce compteur
est représentée après la procédure «Accoler le marqueur RSTm».
Encode_scan
[Accoler tables/divers]
Accoler le marqueur SOS et le
reste de l'en-tête de balayage
m=0
Encode_restart_
interval
Non
Autres intervalles?
Oui
Accoler
le marqueur RSTm Fait
m = (m + 1) AND 7
TISO1250-93/d063
La Figure E.4 représente la procédure de contrôle du processus de codage d'un intervalle de reprise. La boucle se termine
soit quand le processus de codage a codé le nombre d'unités codées minimales (MCU) de l'intervalle de reprise, soit
quand il a terminé le balayage de l'image.
Encode_restart_
interval
Reset_encoder
Encode_MCU
Non Prepare_for_marker
Autres MCU?
Oui
Fait
TISO1260-93/d064
a) si le codage arithmétique est utilisé, initialisation du codeur arithmétique à l'aide de la procédure «Initenc»
décrite en D.1.7;
b) pour les processus basés DCT, mise à zéro de la prédiction DC (PRED) pour toutes les composantes du
balayage (voir F.1.1.5.1);
c) pour les processus sans perte, remise de la prédiction à une valeur par défaut (H.1.1);
a) soit en bourrant de bits 1 un segment à codage entropique Huffman pour compléter l'octet final (et, si
nécessaire, en bourrant un octet zéro) (voir F.1.2.3);
b) soit en lançant la procédure «Flush» (voir D.1.8) pour terminer un segment à codage entropique.
NOTE – Le nombre d'unités codées minimales (MCU) de l'intervalle de reprise final doit être ajusté pour correspondre au
nombre de MCU du balayage. Le nombre de MCU est calculé d'après les paramètres de trame et de balayage. (Voir Annexe B.)
L'unité codée minimale (MCU) est définie en A.2. Dans une MCU donnée, les unités de données sont codées dans
l'ordre dans lequel elles se présentent dans cette MCU. La procédure de contrôle du codage d'une MCU est représentée
Figure E.5.
Encode_MCU
N=0
N=N+1
Coder unité
de données
Non
N = Nb?
Oui
Fait
TISO1270-93/d065
Figure E.5 – Procédure de contrôle du codage d'une unité codée minimale (MCU)
Sur la Figure E.5, Nb se réfère au nombre d'unités de données de la MCU. L'ordre dans lequel des unités de données se
présentent dans la MCU est défini en A.2. L'unité de données est un bloc 8 × 8 pour les processus basés DCT, et un
échantillon unique pour les processus sans perte.
Les procédures de codage d'une unité de données sont spécifiées dans les Annexes F, G et H.
Le contrôle du décodage comprend l'identification de divers marqueurs: le premier doit être le marqueur SOI (début
d'image). La procédure Decoder_setup réinitialise l'intervalle de reprise (Ri = 0) et, si le décodeur a des capacités de
décodage arithmétique, met les tables décisionnelles du codeur arithmétique à leurs valeurs par défaut. (Voir F.1.4.4.1.4
et F.1.4.4.2.1.) Le marqueur suivant est normalement un marqueur SOFn (début de trame); sinon, un des segments
marqueurs indiqués dans le Tableau E.1 a été reçu.
Decode_image
Non
Marqueur SOI?
Oui
Decoder_setup Erreur
Non Interpréter
Marqueur SOFn?
marqueurs
Oui
Decode_frame
Fait
TISO1280-93/d066
Marqueur Objet
COM Commentaire
A noter que les octets de remplissage optionnels X’FF’ pouvant précéder tout marqueur doivent être éliminés avant
l'interprétation du marqueur présent.
La logique additionnelle d'interprétation de ces divers marqueurs est contenue dans le pavé «Interpréter marqueurs». Les
marqueurs DHT doivent être interprétés par des processus utilisant le codage de Huffman. Les marqueurs DAC doivent
être interprétés par des processus utilisant le codage arithmétique. Les marqueurs DQT doivent être interprétés par des
processus basés DCT. Les marqueurs DRI doivent être interprétés par tous les décodeurs. Les marqueurs APPn et COM
ne doivent être interprétés que dans la mesure où cette interprétation n'interfère pas avec le décodage.
Par définition, les procédures de «Interpréter marqueurs» laissent le système au marqueur suivant. A noter que si le
marqueur SOI attendu manque au début des données d'image comprimées, une condition d'erreur s'est produite. Les
techniques de détection et de gestion des conditions d'erreur peuvent être aussi élaborées ou aussi simples qu'on le
désire.
Decode_frame
Interpréter
en-tête de trame
Non Interpréter
Marqueur SOS?
marqueurs
Oui
Decode_scan
Non
Marqueur EOI?
Oui
Fait
TISO1290-93/d067
La boucle est terminée lorsque le marqueur EOI est rencontré à la fin du balayage.
Les marqueurs reconnus par «Interpréter marqueurs» sont indiqués dans le Tableau E.1. Le paragraphe E.2.1 précise
dans quelle mesure les divers marqueurs doivent être interprétés.
Decode_scan
Interpréter
en-tête de balayage
m=0
Decode_restart_
interval
Non
Autres intervalles?
Oui
Fait
TISO1300-93/d068
La procédure de décodage d'un intervalle de reprise est présentée Figure E.9. La procédure «Reset_decoder» inclut au
moins les actions suivantes:
a) si le codage arithmétique est utilisé, initialisation du codeur arithmétique à l'aide de la procédure «Initdec»
décrite en D.2.7;
b) pour les processus basés DCT, mise à zéro de la prédiction DC (PRED) pour toutes les composantes du
balayage (voir F.2.1.3.1);
c) pour les processus sans perte, remise de la prédiction à une valeur par défaut (H.2.1);
Decode_restart_
interval
Reset_decoder
Decode_MCU
Non
Autres MCU? Trouver marqueur
Oui
Fait
TISO1310-93/d069
A la fin de l'intervalle de reprise, le marqueur suivant est localisé. Si un incident est détecté lors de la localisation de ce
marqueur, des procédures de traitement d'erreurs peuvent être appelées. Bien que de telles procédures soient
optionnelles, le décodeur doit être capable de reconnaître correctement des marqueurs RST dans les données
comprimées et de se réinitialiser lorsqu'il en rencontre. Le décodeur doit également être capable de reconnaître le
marqueur DNL, de fixer le nombre de lignes défini dans le segment DNL et de terminer la procédure
«Decode_restart_interval».
NOTE – L'intervalle de reprise final peut être plus petit que la taille spécifiée par le segment marqueur DRI, car il ne
contient que le nombre de MCU restant dans le balayage.
La procédure de décodage d'une unité codée minimale (MCU) est présentée Figure E.10.
Les procédures de décodage d'une unité de données sont spécifiées dans les Annexes F, G et H.
Decode_MCU
N=0
N=N+1
Decode_data_unit
Non
N = Nb?
Oui
Fait
TISO1320-93/d070
Figure E.10 – Procédure de contrôle du décodage d'une unité codée minimale (MCU)
Annexe F
La présente annexe donne une spécification fonctionnelle des processus de codage suivants du mode de fonctionnement
basé DCT séquentiel:
1) séquentiel de base;
2) séquentiel étendu, codage de Huffman, précision d'échantillon 8 bits;
3) séquentiel étendu, codage arithmétique, précision d'échantillon 8 bits;
4) séquentiel étendu, codage de Huffman, précision d'échantillon 12 bits;
5) séquentiel étendu, codage arithmétique, précision d'échantillon 12 bits.
Pour chacun de ces modes, le processus de codage est spécifié en F.1 et le processus de décodage en F.2. Les
spécifications fonctionnelles sont présentées au moyen d'organigrammes spécifiques aux diverses procédures de ces
processus de codage.
NOTE – Dans la présente Spécificaction, il n'est stipulé aucune obligation pour un codeur ou un décodeur qui réalise un
des processus sus-nommés, quant à la mise en oeuvre par ce codeur ou décodeur des procédures exactement de la façon spécifiée par
les organigrammes de cette annexe. Il est seulement nécessaire qu'un codeur ou un décodeur mette en oeuvre la fonction spécifiée
dans la présente annexe. Le seul critère à considérer, pour un codeur ou un décodeur, en matière de conformité à la présente
spécification, est qu'il satisfasse les conditions données à l'article 6 (pour les codeurs) ou à l'article 7 (pour les décodeurs), telles que
déterminées par les tests de conformité spécifiés dans la Partie 2.
ZZ( 0 ) = Sq 00
ZZ(1) = Sq 01
ZZ( 2 ) = Sq 10
•
•
•
ZZ( 63) = Sq 77
10 0
11 –1,1
12 –3,–2,2,3
13 –7...–4,4...7
14 –15...–8,8...15
15 –31...–16,16...31
16 –63...–32,32...63
17 –127...–64,64...127
18 –255...–128,128...255
19 –511...–256,256...511
10 –1 023...–512,512...1 023
La procédure de codage est définie sous la forme d'un ensemble de tables étendues, XHUFCO et XHUFSI, qui
contiennent l'ensemble complet des codes et tailles de codes de Huffman pour toutes les valeurs possibles de la
différence. Pour la pleine précision 12 bits, les tables sont relativement grandes. Toutefois, pour le système de base, la
précision de la différence peut être assez petite pour rendre cette description applicable.
XHUFCO et XHUFSI sont générés par les tables EHUFCO et EHUFSI du codeur (voir Annexe C) en accolant aux
codes de Huffman de chaque catégorie de différence, les bits additionnels nécessaires pour la définition complète de la
différence. Par définition, XHUFCO et XHUFSI ont des entrées pour chaque valeur de différence possible. XHUFCO
contient la configuration binaire concaténée du code de Huffman et du champ binaire additionnel; XHUFSI contient la
longueur totale en bits de cette configuration binaire concaténée. Toutes deux sont indexées par DIFF, différence entre le
coefficient DC et la prédiction.
SIZE = XHUFSI(DIFF)
CODE = XHUFCO(DIFF)
où DC est la valeur du coefficient quantifié DC et PRED la valeur DC quantifiée prédite. Le code de Huffman (CODE)
(incluant tous bits additionnels) est obtenu à partir de XHUFCO et la longueur du code incluant des bits additionnels
(SIZE) est obtenue à partir de XHUFSI, DIFF étant utilisé comme index des deux tables.
Chaque coefficient AC non nul de ZZ est décrit par une valeur composite de 8 bits, RS, de la forme:
RS = binaire ’RRRRSSSS’
Les quatre bits de plus faible poids, ’SSSS’, définissent la catégorie d'amplitude du prochain coefficient non nul
dans ZZ; les quatre bits de plus fort poids, ’RRRR’, donnent la position relative du coefficient dans ZZ, par rapport au
précédent coefficient non nul (c'est-à-dire la longueur de la plage de coefficients nuls entre des coefficients non nuls).
Comme la longueur de la plage de coefficients nuls peut dépasser 15, la valeur ’RRRRSSSS’ = X’F0’ est définie pour
représenter une longueur de plage de 15 coefficients nuls suivis d'un coefficient d'amplitude nulle. (Ce qui peut être
interprété comme la longueur d'une plage de 16 coefficients nuls.) En outre, une valeur spéciale
’RRRRSSSS’ = ’00000000’ est utilisée pour coder la fin de bloc (EOB) quand tous les autres coefficients du bloc sont
nuls.
La structure générale de la table de codage est représentée Figure F.1. Les entrées marquées ’N/A’ ne sont pas définies
pour la procédure de base.
SSSS
0 1 2 . . . 9 10
0 EOB
. N/A
RRRR . N/A VALEURS COMPOSITES
. N/A
15 ZRL
TISO1330-93/d071
Les plages de valeurs affectées à chaque valeur de SSSS sont définies dans le Tableau F.2.
SSSS Coefficients AC
11 –1,1
12 –3,–2,2,3
13 –7...–4,4...7
14 –15...–8,8...15
15 –31...–16,16...31
16 –63...–32,32...63
17 –127...–64,64...127
18 –255...–128,128...255
19 –511...–256,256...511
10 –1 023...–512,512...1 023
La valeur composite, RRRRSSSS, est codée Huffman, chaque code de Huffman étant suivi de bits additionnels qui
spécifient le signe et l'amplitude exacte du coefficient.
La table des codes AC comprend un code de Huffman (longueur maximale 16 bits, non inclus les bits additionnels) pour
chaque valeur composite possible. Les codes de Huffman des valeurs composites de 8 bits sont générés en sorte
qu'aucun code ne consiste entièrement en bits 1.
Le format des bits additionnels est le même que pour le codage des coefficients DC. La valeur de SSSS donne le nombre
de bits additionnels nécessaires pour spécifier le signe et préciser l'amplitude des coefficients. Les bits additionnels sont:
soit les bits de plus faible poids SSSS de ZZ(K), quand ZZ(K) est positif; soit les bits de plus faible poids SSSS de
ZZ(K) – 1, quand ZZ(K) est négatif. ZZ(K) est le kième coefficient de la séquence en zigzag des coefficients en cours de
codage.
La syntaxe de spécification des tables de Huffman est donnée dans l'Annexe B. La procédure de création d'une table de
codage à partir de ces informations est décrite dans l'Annexe C.
Dans le système de base, on ne peut pas définir plus de deux tables de Huffman pour le codage des coefficients AC.
Deux exemples de tables de codage des coefficients AC sont donnés dans l'Annexe K.
Comme défini dans l'Annexe C, la table de codage de Huffman est supposée disponible sous la forme de deux tables,
EHUFCO (contenant les bits des codes) et EHUFSI (contenant la longueur en bits, de chaque code), toutes deux
indexées par la valeur composite définie ci-dessus.
La procédure de codage des coefficients AC d'un bloc est représentée Figures F.2 et F.3. Sur la Figure F.2, K est l'index
vers la position dans le balayage en zigzag et R la longueur de la plage de coefficients nuls.
La procédure «Accoler EHUFSI(X’F0’) bits de EHUFCO(X’F0’)» code une plage de 16 coefficients nuls (code ZRL de
la Figure F.1). La procédure «Accoler EHUFSI(0) bits de EHUFCO(0)» code le marqueur fin de bloc (code EOB)). Si le
dernier coefficient (K = 63) est non nul, le code EOB est sauté.
CSIZE est une procédure qui associe un coefficient AC à la valeur SSSS définie dans le Tableau F.2.
Un bourrage d'octets est utilisé pour libérer la place nécessaire pour les codes de marqueurs, qui peuvent être détectés
sans décodage dans les données d'image comprimées.
Au cours du codage normal, chaque fois que la valeur d'octet X’FF’ est créée dans la chaîne de codes, un octet X’00’ est
bourré dans cette chaîne de codes.
Si un octet X’00’ est détecté après un octet X’FF’, le décodeur doit le supprimer. Si l'octet est non nul, un marqueur a été
détecté et doit être interprété à un niveau suffisant pour achever le décodage du balayage.
Le calage à l'octet des marqueurs est réalisé en bourrant les octets incomplets de bits 1. Si le bourrage de bits 1 crée une
valeur X’FF’, un octet zéro est bourré avant d'accoler le marqueur.
F.1.3 Processus de codage de Huffman basé DCT séquentiel étendu, pour une précision d'échantillon de 8 bits
Ce processus est identique au processus de codage de base décrit en F.1.2, sauf que le nombre de destinations de table de
Huffman pouvant être utilisé dans le même balayage est porté à quatre. Quatre destinations de table de Huffman DC et
quatre destinations de table de Huffman AC, représentent le maximum autorisé par la présente spécification.
F.1.4 Processus de codage arithmétique basé DCT séquentiel étendu, pour une précision d'échantillon
de 8 bits
Ce paragraphe décrit l'utilisation des procédures de codage arithmétique dans le processus de codage basé DCT
séquentiel.
NOTE – Les procédures de codage arithmétique de la présente Spécification sont définies pour la précision maximale, pour
faciliter l'interchangeabilité des réalisations.
Les extensions de codage arithmétique ont le même modèle DCT que le codeur DCT de base. L'Annexe F.1.1 s'applique
donc au codage arithmétique. Comme la technique de codage de Huffman, la technique de codage arithmétique binaire
est sans perte. Le transcodage est possible entre les deux systèmes, sans calcul de FDCT ou d'IDCT, ni modification de
l'image reconstruite.
Les principes de base du codage arithmétique binaire adaptatif sont décrits dans l'Annexe D. Jusqu'à quatre destinations
de tables décisionnelles DC et AC (avec les zones statistiques associées) peuvent être utilisées dans un même balayage.
Les procédures de codage arithmétique de décisions binaires, d'initialisation de zone statistique, d'initialisation du
codeur, de terminaison de la chaîne de codes et de pose de marqueurs de reprise, sont indiquées dans le Tableau D.1.
Encode_AC_
coefficients
K=0
R=0
K=K+1 R=R+1
Oui Non
ZZ(K) = 0? K = 63?
Non Oui
Oui
R > 15?
Non
Encode_R,ZZ(K)
R=0
Non Oui
K = 63?
Fait
TISO1340-93/d072
Encode_R,ZZ(K)
SSSS = CSIZE(ZZ(K))
RS = (16 × R) + SSSS
Accoler EHUFSI(RS) bits
de EHUFCO(RS)
Oui
ZZ(K) < 0?
Non
ZZ(K) = ZZ(K) – 1
Fait
TISO1350-93/d073
Certaines des procédures du Tableau D.1 sont utilisées dans la structure de contrôle de haut niveau des balayages et des
intervalles de reprise décrite dans l'Annexe E. Au début des balayages et des intervalles de reprise, les estimations de
probabilité utilisées dans le codeur arithmétique sont remises à la valeur initiale standard, dans le cadre de la procédure
Initenc, qui relance le codeur arithmétique. A la fin des balayages et des intervalles de reprise, la procédure Flush est
lancée pour vider le registre de code avant d'accoler le marqueur suivant.
La structure de base de la séquence décisionnelle de codage d'une valeur de la différence DC (DIFF) est représentée à
la Figure F.4.
L'indice de contexte S0 et les autres indices de contexte utilisés dans les procédures de codage DC sont définis dans le
Tableau F.4 (voir F.1.4.4.1.3). Une décision 0 est codée si la valeur de la différence est nulle et une décision 1 si la
différence n'est pas nulle. Dans ce dernier cas, le signe et la valeur absolue sont codés par la procédure Encode_V(S0)
décrite en F.1.4.3.1.
Les coefficients AC sont codés dans l'ordre dans lequel ils se présentent dans la séquence en zigzag ZZ(1,...,63). Une
décision binaire fin de bloc (EOB) est codée avant le codage du premier coefficient AC de ZZ et après chaque
coefficient non nul. Si l'EOB se présente, tous les coefficients restants dans ZZ sont nuls. La Figure F.5 décrit
l'enchaînement des décisions. La procédure équivalente, pour le codeur de Huffman, est donnée à la Figure F.2.
Encode_DC_DIFF
V = DIFF
Non Oui
V = 0?
Code_1(S0)
Encode_V(S0) Code_0(S0)
Fait
TISO1360-93/d074
Les indices de contexte SE et S0 utilisés dans les procédures de codage AC sont définis dans le Tableau F.5
(voir F.1.4.4.2). Sur la Figure F.5, K est l'indice de la position dans la séquence en zigzag. Pour le balayage séquentiel,
Kmin vaut 1 et Se vaut 63. La décision V = 0 fait partie d'une boucle qui code les plages de coefficients nuls. Chaque
fois que le coefficient est non nul, «Encode_V(S0)» code le signe et la valeur absolue du coefficient. Chaque coefficient
non nul codé est suivi d'une décision EOB. Si l'EOB se présente, une décision 1 est codée pour indiquer que le codage
du bloc est terminé. Si le coefficient d'indice K = Se est non nul, la décision EOB est sautée.
F.1.4.3 Codage de la séquence de décisions binaires pour des différences DC et coefficients AC non nuls
La différence DC et les coefficients AC sont représentés comme des valeurs signées entières en complément à deux. La
décomposition de ces valeurs entières signées en un arbre de décisions binaires est effectuée de la même façon pour les
modèles de codage DC et AC.
Si les arbres de décisions binaires de ce paragraphe et les modèles de codage DC et AC sont identiques, les modèles
statistiques d'affectation dans ces arbres, de registres statistiques aux décisions binaires, sont complètement différents.
La séquence de codage s'articule en trois procédures: une première code le signe, une deuxième identifie la catégorie de
valeur absolue, une troisième détermine avec précision la valeur absolue qui s'est présentée dans la catégorie identifiée
par la deuxième procédure.
Au point où débute la séquence de décisions binaires de Encode_V(S0), les procédures des Figures F.4 et F.5 ont déjà
déterminé que le coefficient ou la différence n'est pas nul.
V désigne une différence DC (DIFF) ou un coefficient AC. La valeur entière signée non nulle de V est codée par la
séquence de la Figure F.6. Cette séquence code d'abord le signe de V. Elle code ensuite (après avoir converti V en une
valeur absolue, diminuée de 1 pour donner Sz) la catégorie de valeur absolue de Sz (code_log2_Sz), puis code les bits de
faible poids de la valeur absolue (code_Sz_bits) pour déterminer la valeur exacte de la valeur absolue.
On constate deux différences significatives entre cette séquence et l'ensemble similaire d'opérations décrit en F.1.2 pour
le codage de Huffman. D'abord, le signe est codé avant l'identification de la catégorie de valeur absolue, ensuite, la
valeur absolue est diminuée de 1 avant l'identification de sa catégorie.
Encode_AC_
Coefficients
K = Kmin
Oui
K = EOB? Code_1(SE)
Non
Code_0(SE)
K=K+1 K=K+1
V = ZZ(K)
Oui
V = 0? Code_0(S0)
Non
Code_1(S0)
Encode_V(S0)
Non Oui
K = Se?
Fait
TISO1370-93/d075
Encode_V(S)
Encode_sign_of_V
Sz = | V | – 1
Encode_log2_Sz
Encode_Sz_bits
Fait
TISO1380-93/d076
Figure F.6 – Séquence des procédures de codage des valeurs non nulles de V
Le signe est codé par une décision 0 lorsqu'il est positif et une décision 1 lorsqu'il est négatif (voir la Figure F.7).
Les indices de contexte SS, SN et SP sont définis dans le Tableau F.4 pour le codage DC, et dans le Tableau F.5 pour le
codage AC. Après codage du signe, l'indice de contexte S est mis à SN ou SP, ce qui établit une valeur initiale pour
Encode_log2_Sz.
La catégorie de valeur absolue est déterminée par une séquence de décisions binaires qui compare Sz à une limite à
croissance exponentielle (une puissance de 2) pour déterminer la position du premier bit 1. Cette comparaison détermine
la catégorie de valeur absolue d'une façon tout à fait similaire à celle qu'utilise le codeur de Huffman pour générer un
code pour la valeur associée à la catégorie de différence. L'organigramme de cette procédure est représenté à
la Figure F.8.
La valeur initiale de l'indice de contexte S est déterminée dans Encode_sign_of_V. Les valeurs des indices de contexte
X1 et X2 sont définies pour le codage DC dans le Tableau F.4, et pour le codage AC dans le Tableau F.5. Sur la
Figure F.8, M est la limite supérieure (exclusive) de la valeur absolue et les abréviations «SSL» et «SRL» se réfèrent aux
opérations de décalage logique à gauche et à droite (dans le cas présent, d'une position binaire). L'opération SRL
exécutée à la fin de la procédure cale M sur le bit de plus fort poids de Sz (voir le Tableau F.3).
La précision maximale autorisée pour la DCT est 15 bits: la précision maximale requise pour l'arbre décisionnel de
codage est donc de 16 bits pour la différence DC et de 15 bits pour les coefficients AC, y compris le bit de signe.
Encode_sign_of_V
Oui Non
V < 0?
Code_1(SS) Code_0(SS)
S = SN S = SP
Fait
TISO1390-93/d077
11111 0 10
11112 1 10
11114 2,3 11
11118 4,...,7 12
11116 8,...,15 13
32332 16,...,31 14
66464 32,...,63 15
12128 64,...,127 16
25256 128,...,255 17
15512 256,...,511 18
Encode_log2_Sz
M=1
Oui
Sz < M?
Non
Code_1(S)
M=2
S = X1
Oui
Sz < M?
Non
Code_1(S)
M=4
S = X2
Oui
Sz < M?
Non
Code_1(S) Code_0(S)
M = SLL M 1
M = SRL M 1
S=S+1
Fait
TISO1400-93/d078
Le codage de la catégorie de valeur absolue est suivi de celui des bits de faible poids de cette valeur absolue, par poids
décroissants. La procédure est représentée à la Figure F.9. L'abréviation «SRL» désigne l'opération logique de décalage à
droite et M la limite (exclusive) établie par la procédure de la Figure F.8. A noter qu'un seul bit est positionné pour M: le
décalage de M à droite le convertit en un masque binaire pour l'opération «AND» logique.
La valeur initiale de l'indice de contexte S est déterminée par Encode_log2_Sz. L'incrémentation de S de 14, au début de
la procédure, met l'indice de contexte à la valeur requise dans les Tableaux F.4 et F.5.
Encode_Sz-bits
S = S + 14
M = SRL M 1
Oui
M = 0?
Non
T = M AND Sz Fait
Oui Non
T = 0?
Code_0(S) Code_1(S)
TISO1410-93/d079
Un codeur arithmétique binaire adaptatif nécessite un modèle statistique. Le modèle statistique définit les contextes à
utiliser pour le choix des estimations de probabilité décisionnelle utilisées dans les procédures de codage et de décodage.
Un ou plusieurs contextes sont associés à chaque décision des arbres de décisions binaires. Ces contextes déterminent la
signification attribuée au MPS et l'indice dans le Tableau D.3 de l'estimation de probabilité conditionnelle Qe à utiliser
pour coder et décoder des décisions binaires.
Le codeur arithmétique est adaptatif: cela signifie que les estimations de probabilité associées à chaque contexte sont
déterminées et conservées par un système de codage arithmétique, sur la base de décisions de codage antérieures, prises
pour ce contexte.
Le modèle statistique de codage de la différence DC conditionne certaines des estimations de probabilité de décisions
binaires par des décisions de codage DC antérieures.
Dans le codage des coefficients DC, quatre registres statistiques (ou estimations de probabilité) séparés sont utilisés pour
coder la décision nul/non nul (V = 0), la décision relative au signe et la première décision relative à la catégorie de
valeur absolue. Deux de ces registres sont utilisés pour coder la décision V = 0 et la décision relative au signe. Les deux
autres sont utilisés pour le codage de la première décision relative à la valeur absolue, Sz < 1; un de ces registres est
utilisé quand le signe est positif, l'autre quand le signe est négatif. Ainsi, la première estimation de probabilité de la
décision relative à la valeur absolue est conditionnée par le signe de V.
Les estimations de probabilité relatives à ces trois premières décisions sont également conditionnées par Da, valeur de la
différence codée pour le précédent bloc DCT de la même composante. Les différences sont réparties en cinq classes:
zéro, petite positive, petite négative, grande positive et grande négative. La relation entre ces classes par défaut et
l'échelle de quantification est indiquée à la Figure F.10.
. . . –5 –4 –3 –2 –1 0 +1 +2 +3 +4 +5 . . . Différence DC
Les limites de la catégorie de différence «petite» déterminent la classification. L et U étant définis comme des entiers
compris entre 0 et 15 inclus, la borne inférieure (exclusive) pour les magnitudes de différence de la classe «petite» est
zéro pour L = 0 et 2L–1 pour L > 0.
La borne supérieure (exclusive) pour les magnitudes de différence de la classe «petite» est 2U.
Ces limites de classes décisionnelles donnent une segmentation identique à celle du Tableau F.3.
Comme indiqué dans le Tableau F.4, chaque zone statistique de codage DC consiste en un ensemble de 49 registres
statistiques. Ci-après, ces registres sont supposés contigus. Les 20 premiers registres consistent en cinq ensembles de
quatre registres sélectionnés par un indice de contexte S0. La valeur de S0 est donnée par DC_Context(Da), qui fournit
une valeur de 0, 4, 8, 12 ou 16, selon la classe de différence de Da (voir F.1.4.4.1.2). Les 29 registres restants,
X1,...,X15,M2,...,M15 sont utilisés pour coder les décisions de catégorie de valeur absolue et les bits de valeur absolue.
Les paramètres L et U, de détermination des limites des catégories décisionnelles ont les valeurs par défaut L = 0 et
U = 1. D'autres limites peuvent être fixées en utilisant le segment marqueur DAC de définition de tables décisionnelles,
comme décrit dans l'Annexe B.
Au début d'un balayage et au début de chaque intervalle de reprise, la différence associée à la précédente valeur DC est
définie comme nulle dans la détermination de l'état des tables décisionnelles.
Comme indiqué dans le Tableau F.5, chaque zone statistique de codage AC consiste en un ensemble de 245 registres
statistiques consécutifs. Trois registres statistiques sont utilisés pour chaque valeur de l'indice K dans la séquence en
zigzag, et deux ensembles de 28 registres additionnels X2,...,X15,M2,...,M15 pour le codage de la catégorie de valeur
absolue et des bits de valeur absolue.
La valeur de SE (ainsi que de S0, SP et SN) est déterminée par l'indice K dans la séquence en zigzag. Comme K est dans
la plage 1 à 63, la plus petite valeur de SE est zéro et la plus grande valeur de SP est 188. Aucune valeur n'est affectée à
SS lors du codage des coefficients AC, car les signes des coefficients sont codés avec une valeur de probabilité fixe
de 0,5 (Qe = X’5A1D’, MPS = 0).
La valeur de X2 est donnée par «AC_Context(K)», qui donne X2 = 189 quand K ≤ Kx et X2 = 217 quand K > Kx, Kx
étant défini à l'aide du segment marqueur DAC (voir B.2.4.3).
A noter qu'il n'est pas utilisé de registre statistique X1 dans cette séquence. A la place, le Tableau 63 × 1 de registres
statistiques de codage de la catégorie de valeur absolue est utilisé pour deux décisions. Quand la limite de la valeur
absolue a été située – par exemple, au registre statistique Xn – un registre statistique unique Mn est utilisé pour coder la
séquence binaire de valeur absolue pour cette limite.
La valeur par défaut de Kx est 5. Elle peut être modifiée en utilisant le segment marqueur DAC, comme décrit dans
l'Annexe B.
Au début d'un balayage et à chaque reprise, tous les registres statistiques sont réinitialisés à la valeur par défaut standard
indiquée dans l'Annexe D.
F.1.5 Processus de codage de Huffman basé DCT séquentiel pour une précision d'échantillon de 12 bits
Ce processus est identique au processus DCT séquentiel avec précision 8 bits étendu à quatre destinations de tables de
Huffman, tel que décrit en F.1.3, avec les modifications suivantes.
Les valeurs des différences en complément à deux sont regroupés en 16 catégories SSSS, pour chacune desquelles est
créé un code de Huffman.
La table de Huffman de codage DC (Tableau F.1) est étendue comme indiqué sur le Tableau F.6.
La structure générale de la table de codage est étendue comme indiqué à la Figure F.11. La table de Huffman de codage
AC est étendue comme indiqué dans le Tableau F.7.
SSSS
0 1 2 . . . 13 14
0 EOB
. N/A
RRRR . N/A VALEURS COMPOSITES
. N/A
15 ZRL
TISO1430-93/d081
SSSS Coefficients AC
11 –2 047...–1 024,1 024...2 047
12 –4 095...–2 048,2 048...4 095
13 –8 191...–4 096,4 096...8 191
14 –16 383...–8 192,8 192...16 383
F.1.6 Processus de codage arithmétique basé DCT séquentiel étendu pour une précision d'échantillon de
12 bits
Le processus est identique à celui du processus DCT séquentiel pour une précision 8 bits, sauf des changements de
précision dans le calcul de la FDCT.
La structure de la procédure de codage est identique à celle spécifiée en F.1.4, déjà définie pour une précision
d'échantillon de 12 bits.
Les procédures de contrôle du décodage des données d'une image comprimée et de ses constituants – trames, balayages,
intervalle de reprise et MCU – sont données à la Figures E.6 à E.10. La procédure de décodage d'une MCU
(Figure E.10) appelle itérativement la procédure de décodage d'une unité de données. Pour les décodeurs basés DCT,
l'unité de données est un bloc 8 × 8 d'échantillons.
Dans le processus de décodage basé DCT séquentiel, le décodage d'une unité de données bloc 8 × 8 inclut les procédures
suivantes:
b) décodage des coefficients AC du bloc 8 × 8, en utilisant la destination de table AC spécifiée dans l'en-tête
de balayage;
c) déquantification, en utilisant la destination de table spécifiée dans l'en-tête de trame et calcul de la DCT
8 × 8 inverse.
Deux procédures de décodage sont utilisées, une pour le coefficient DC ZZ(0) et l'autre pour les coefficients AC
ZZ(1)...ZZ(63). Les coefficients sont décodés dans l'ordre dans lequel ils se présentent dans la séquence en zigzag, en
commençant par le coefficient DC. Les coefficients sont représentés comme des entiers en complément à deux.
La différence décodée DIFF est ajoutée à PRED, la valeur DC du bloc 8 × 8 le plus récemment décodé dans la même
composante. Ainsi: ZZ(0) = PRED + DIFF.
Au début du balayage et au début de chaque intervalle de reprise, la prédiction du coefficient DC est initialisée à zéro.
Les coefficients AC sont décodés dans l'ordre où ils se présentent dans ZZ. Quand EOB est décodé, tous les coefficients
restant dans ZZ sont mis à zéro.
La déquantification des coefficients DCT quantifiés, telle que décrite dans l'Annexe A, est réalisée en multipliant chaque
valeur de coefficient quantifié par la valeur de la table de quantification pour ce coefficient. Le décodeur doit être
capable d'utiliser jusqu'à quatre destinations de table de quantification.
Après calcul de l'IDCT, les échantillons de sortie signés subissent un décalage de niveau, comme décrit dans l'Annexe A,
pour convertir la sortie en une représentation non signée. Pour la précision 8 bits, ce décalage de niveau est réalisé en
ajoutant 128; pour la précision 12 bits il est réalisé en ajoutant 2 048. Si nécessaire, les échantillons de sortie peuvent être
tronqués pour tenir dans la plage de précision appropriée (0 à 255 en précision 8 bits et 0 à 4 095 en précision 12 bits).
La procédure de décodage de base est décrite pour une précision d'échantillon de 8 bits. Le décodeur doit être capable
d'utiliser jusqu'à deux tables de Huffman DC et deux tables de Huffman AC dans un même balayage.
T = DECODE
DIFF = RECEIVE(T)
DIFF = EXTEND(DIFF,T)
où la procédure DECODE renvoie la valeur 8 bits associée au code de Huffman suivant dans les données d'image
comprimées (voir F.2.2.3), et la procédure RECEIVE(T) place les T bits suivants de la chaîne binaire dans les bits de
faible poids DIFF, le MSB en premier. Si T est zéro, DIFF est mis à zéro. La procédure EXTEND convertit la
valeur DIFF partiellement décodée de précision T en la différence pleine précision. EXTEND est représenté à
la Figure F.12.
La procédure de décodage des coefficients AC est représentée aux Figures F.13 et F.14.
EXTEND(V,T)
V t= 2 T –1
Oui
V < Vt ?
Non
V t = (SLL –1 T) + 1
V = V + Vt
Renvoyer V
TISO1440-93/d082
Le décodage de la valeur absolue et du signe du coefficient non nul est effectué dans la procédure «Decode_ZZ(K)»,
représentée Figure F.14.
La procédure DECODE renvoie la valeur RS associée au code de Huffman suivant dans le train codé (voir F.2.2.3). Les
valeurs SSSS et R sont dérivées de RS. La valeur de SSSS donne les quatre bits de plus faible poids de la valeur
composite, et R contient la valeur de RRRR (les quatre bits de plus fort poids de la valeur composite). L'interprétation de
ces valeurs est décrite en F.1.2.2. La procédure EXTEND est donnée à la Figure F.12.
La procédure DECODE décode une valeur de 8 bits qui détermine, pour le coefficient DC, la catégorie de valeur absolue
de la différence. Pour le coefficient AC, cette valeur de 8 bits détermine la longueur de la plage de zéros et la catégorie
de coefficients non nul.
Trois tables, HUFFVAL, HUFFCODE et HUFFSIZE, ont été définies dans l'Annexe C. La réalisation de DECODE
décrite ici utilise un classement des codes de Huffman dans HUFFCODE, par ordre des valeurs et tailles de code.
Beaucoup d'autres réalisations de DECODE sont possibles.
NOTE – Les valeurs contenues dans HUFFVAL sont affectées en séquence à chacun des codes de HUFFCODE et de
HUFFSIZE. Aucun ordre n'est prescrit pour les valeurs contenues dans HUFFVAL, auxquelles ont été affectés des codes de même
longueur.
La réalisation de DECODE décrite dans ce paragraphe utilise trois tables, MINCODE, MAXCODE et VALPTR, pour
décoder un pointeur vers la table HUFFVAL. MINCODE, MAXCODE et VALPTR ont chacune 16 entrées, pour
chaque taille possible de code. MINCODE(I) contient la plus petite valeur de code pour une longueur donnée I,
MAXCODE(I) contient la plus grande valeur de code pour une longueur donnée I, et VALPTR(I) contient l'indice de
début de la liste des valeurs contenues dans HUFFVAL, qui sont décodées en mots de code de longueur I. Les valeurs
contenues dans MINCODE et MAXCODE sont des entiers signés de 16 bits; une valeur –1 met donc tous les bits à 1.
Decode_AC_
coefficients
K=1
ZZ(1,...,63) = 0
K=K+1 K = K + 16
RS = DECODE
SSSS = RS modulo 16
RRRR = SRL RS 4
R = RRRR
Oui
SSSS = 0?
Non
K=K+R
Decode_ZZ(K)
Non Oui
K = 63? R = 15?
Oui Non
Fait
TISO1450-93/d083
Decode_ZZ(K)
ZZ(K) = RECEIVE(SSSS)
ZZ(K) = EXTEND(ZZ(K),SSSS)
Fait
TISO1460-93/d084
La procédure de génération de ces tables est représentée à la Figure F.15. La procédure de DECODE est représentée à
la Figure F.16. A noter que la valeur 8 bits «VALUE» est renvoyée à la procédure qui lance DECODE.
Decoder_tables
I=0
J=0
MAXCODE(I) = –1 I=I+1
Oui
I > 16?
Non
Oui
BITS(I) = 0? Fait
Non
VALPTR(I) = J
MINCODE(I) = HUFFCODE(J)
J = J + BITS(I) – 1
MAXCODE(I) = HUFFCODE(J)
J=J+1
TISO1470-93/d085
DECODE
I=1
CODE = NEXTBIT
I=I+1
CODE = (SLL CODE 1) + NEXTBIT
Oui
CODE > MAXCODE(I)?
Non
J = VALPTR(I)
J = J + CODE – MINCODE(I)
VALUE = HUFFVAL(J)
Renvoyer VALUE
TISO1480-93/d086
RECEIVE (SSSS) est une procédure qui place les prochains SSSS bits du segment à codage entropique dans les bits de
plus faible poids de DIFF, le MSB en premier. Elle appelle NEXTBIT et renvoie la valeur de DIFF à la procédure
appelante (voir la Figure F.17).
NEXTBIT lit le bit suivant des données comprimées et le communique à des sous-programmes de niveau plus élevé.
Elle intercepte également les octets de bourrage, les supprime et détecte les marqueurs. NEXTBIT lit les bits d'un octet
en commençant par le MSB (voir la Figure F.18).
CNT est remis à zéro avant le lancement du décodage d'un balayage et après le traitement d'un marqueur RST. Les
données comprimées sont lues octet par octet, en utilisant la procédure NEXTBYTE. Chaque fois qu'un octet B est lu,
CNT est mis à 8.
Le seul marqueur valide pouvant se présenter dans les données codées Huffman est le marqueur RSTm. Parmi les
marqueurs autres que l'EOI ou ceux pouvant se présenter au début ou avant le début d'un balayage, le seul marqueur
pouvant se présenter à la fin du balayage est le DNL (définition du nombre de lignes).
Normalement, le décodeur doit terminer le codage à la fin de l'intervalle final de reprise, avant l'interception du
marqueur de terminaison. Si le marqueur DNL se présente, le compteur de ligne courante est mis à la valeur spécifiée
par ce marqueur. Comme le marqueur DNL peut seulement être utilisé à la fin du premier balayage, la procédure de
décodage du balayage doit être terminée quand il se présente.
RECEIVE(SSSS)
I=0
V=0
I=I+1
V = (SLL V 1) + NEXTBIT
Non
I = SSSS?
Oui
Renvoyer V
TISO1490-93/d087
F.2.3 Processus de décodage DCT séquentiel de précision 8 bits, étendu à quatre ensembles de tables de
Huffman
Ce processus est identique au processus de décodage de base décrit en F.2.2, sauf que le décodeur doit être capable
d'utiliser jusqu'à quatre tables de Huffman DC et quatre tables de Huffman AC dans un même balayage. Quatre tables de
Huffman DC et quatre tables de Huffman AC représentent le maximum autorisé par la présente Spécification.
Les procédures de décodage arithmétique, de décodage des décisions binaires, d'initialisation du modèle statistique,
d'initialisation du décodeur et de resynchronisation du décodeur sont indiquées dans le Tableau D.4.
Certaines des procédures du Tableau D.4 sont utilisées dans la structure de contrôle de haut niveau pour les balayages et
les intervalles de reprise décrits en F.2. Au début des balayages et des intervalles de reprise, les estimations de
probabilités utilisées dans le décodeur arithmétique sont remises aux valeurs initiales standards, par la procédure Initdec
qui relance le codeur arithmétique.
Le décodeur doit être capable d'utiliser, dans un même balayage, jusqu'à quatre tables décisionnelles DC et quatre tables
décisionnelles AC, ainsi que les catégories statistiques associées.
La structure de base de la séquence décisionnelle de décodage d'une valeur de différence DC, DIFF, est représentée à
la Figure F.19. La structure équivalente du codeur est donnée Figure F.4.
NEXTBIT
Oui
CNT = 0?
Non
B = NEXTBYTE
CNT = 8
Non
B = X’FF’?
Oui
B2 = NEXTBYTE
Oui
B2 = 0?
Non
Non
TISO1500-93/d088
Les indices de contexte utilisés dans les procédures de décodage DC sont définis dans le Tableau F.4 (voir F.1.4.4.1.3).
La procédure «Decode» renvoie la valeur «D» de la décision binaire. Si D n'est pas nul, le signe et la valeur absolue de
DIFF (non nulle) sont décodés par la procédure «Decode_V(S0)».
Les coefficients AC sont décodés dans l'ordre où ils se présentent dans ZZ(1, ... 63). La procédure de codage est donnée
à la Figure F.5. La Figure F.20 représente la séquence de décodage.
Les indices de contexte utilisés dans les procédures de décodage AC sont définis dans le Tableau F.5 (voir F.1.4.4.2).
Dans la Figure F.20, K est l'indice de la position dans la séquence en zigzag. Pour le balayage séquentiel, Kmin = 1 et
Se = 63. La décision figurant en haut de la boucle est la décision EOB. Si l'EOB se présente (D = 1), les coefficients
restant dans le bloc sont mis à zéro. La boucle intérieure, juste au-dessous du décodage EOB, décode les plages de
coefficients nuls. Chaque fois que le coefficient est non nul, «Decode_V» décode son signe et sa valeur absolue. Après
décodage de chaque coefficient non nul, la décision EOB est à nouveau décodée, sauf si K = Se.
Decode_DC_DIFF
D = Decode(S0)
Non Oui
D = 0?
Decode_V(S0) DIFF = 0
DIFF = V
Fait
TISO1510-93/d089
F.2.4.3 Décodage de la séquence de décisions binaires, pour des différences DC et des coefficients AC non nuls
Les différences DC et les coefficients AC sont représentés comme des valeurs entières signées de 16 bits en complément
à deux. L'arbre décisionnel de décodage de ces valeurs entières signées est le même pour les modèles de codage DC et
AC. A noter toutefois que les modèles statistiques sont différents.
V désigne la valeur entière signée non nulle des différences DC ou des coefficients AC. V est décodé par la séquence
représentée Figure F.21. Cette séquence décode d'abord le signe de V, puis sa catégorie de valeur absolue
(«Decode_log2_Sz») et enfin les bits de plus faible poids de la valeur absolue («Decode_Sz_bits»). A noter que la valeur
décodée pour Sz doit être augmentée de 1 pour obtenir la valeur absolue effective du coefficient.
Les indices de contexte sont définis pour le décodage DC dans le Tableau F.4, et pour le décodage AC dans le
Tableau F.5.
Si SIGN = 0, le signe du coefficient est positif; si SIGN = 1, le signe du coefficient est négatif.
Decode_AC_
coefficients
K = Kmin
D = Decode(SE)
Oui
D = 1?
Non
K=K+1 K=K+1
D = Decode(S0)
Oui
D = 0?
Non
Decode_V(S0)
ZZ(K) = V
Non Oui
K = Se?
Fait
TISO1520-93/d090
Decode_V(S)
Decode_sign_of_V
Decode_log2_Sz
Decode_Sz_bits
V = Sz + 1
Oui
SIGN = 1? V = –V
Non
Fait
TISO1530-93/d091
Figure F.21 – Séquence des procédures du décodage des valeurs non nulles de V
L'indice de contexte S est déterminé dans Decode_sign_of_V. Les valeurs X1 et X2 de l'indice de contexte sont définies
pour le codage DC dans le Tableau F.4 et pour le codage AC dans le Tableau F.5.
Dans la Figure F.23, M est mis à la limite supérieure de valeur absolue, et décalé vers la gauche jusqu'à ce que la
décision décodée soit nulle. Il est ensuite décalé à droite d'une position pour devenir le bit de tête de la valeur
absolue Sz.
Après décodage de la catégorie de valeur absolue, les bits de plus faible poids de cette valeur absolue sont décodés par
poids décroissants. La procédure est représentée Figure F.24.
Les marqueurs RSTm accolés aux données comprimées entre les intervalles de reprise ont une valeur sur deux octets qui
ne peut pas être générée par les procédures de codage. Ces séquences de deux octets peuvent donc être repérées sans
décodage, et utilisées pour resynchroniser le décodeur. Les marqueurs RSTm sont ainsi utilisables pour la reprise sur
erreur.
Decode_sign_of_V
SIGN = Decode(SS)
Oui Non
SIGN = 1?
S = SN S = SP
Fait
TISO1540-93/d092
Avant de lancer des procédures de reprise sur erreur, il faut détecter la condition d'erreur. Lors du décodage, des erreurs
peuvent se présenter en deux points:
a) le décodeur ne réussit pas à trouver le marqueur attendu au point où il attend une resynchronisation;
b) des données physiquement impossibles sont décodées. Par exemple le décodage d'une valeur absolue
dépassant la plage de valeurs permises par le modèle est très probable quand les données comprimées sont
entachées d'erreurs. Pour les décodeurs arithmétiques, il est extrêmement important de détecter cette
condition d'erreur, faute de quoi ces décodeurs risqueraient de passer dans un état où ils traiteraient les
données comprimées très lentement.
NOTE – Certaines erreurs n'entraînent pas de perte de synchronisation du décodeur. En outre, la reprise n'est pas
possible pour toutes les erreurs; par exemple, des erreurs dans les en-têtes risquent d'être catastrophiques. Toutefois, la
perte de synchronisation du décodeur résultant des deux conditions d'erreur indiquées ci-dessus se produit presque toujours
d'une façon permettant la reprise.
Pour se resynchroniser, le décodeur peut utiliser le compteur modulo 8 codant l'intervalle de reprise, contenu dans les
bits de plus faible poids du marqueur RSTm. Le décodeur peut en général rétablir sa synchronisationn en comparant la
valeur attendue de ce compteur associé à l'intervalle de reprise, à la valeur contenue dans le marqueur RSTm suivant
rencontré dans les données d'image comprimées. Il remplit alors les lignes manquantes dans les données de sortie en
appliquant une procédure de copie ou une autre procédure appropriée, et continue le décodage. Bien sûr, l'image
reconstruite sera en général fortement altérée dans au moins une partie de l'intervalle de reprise où l'erreur s'est produite.
F.2.5 Processus de décodage DCT séquentiel en codage de Huffman, avec précision de 12 bits
Ce processus est identique au processus DCT séquentiel défini pour une précision d'échantillon de 8 bits, étendu à quatre
tables de Huffman, tel que décrit en F.2.3, avec les modifications suivantes.
Decode_log2_Sz
M=1
D = Decode(S)
Oui
D = 0?
Non
M=2
S = X1
D = Decode(S)
Oui
D = 0?
Non
M=4
S = X2
D = Decode(S)
Oui
D = 0?
Non
M = SLL M 1 M = SRL M 1
S =S + 1 Sz = M
Fait
TISO1550-93/d093
Decode_Sz_bits
S = S + 14
M = SRL M 1
Oui
M = 0?
Non
D = Decode(S) Fait
Oui
D = 0?
Non
Sz = M OR Sz
TISO1560-93/d094
La structure générale de la table de décodage Huffman DC est étendue comme décrit en F.1.5.1.
La structure générale de la table de décodage Huffman AC est étendue comme décrit en F.1.5.2.
F.2.6 Processus de décodage DCT séquentiel en codage arithmétique, avec précision de 12 bits
Le processus est identique au processus DCT séquentiel pour une précision de 8 bits, sauf les changements de précision
du calcul de l'IDCT.
La structure de la procédure de décodage de F.2.4 est déjà définie pour une précision d'entrée de 12 bits.
Annexe G
La présente annexe donne une spécification fonctionnelle des processus de codage suivants, pour le mode de
fonctionnement basé DCT progressif:
1) sélection spectrale uniquement, codage de Huffman, précision d'échantillon 8 bits;
2) sélection spectrale uniquement, codage arithmétique, précision d'échantillon 8 bits;
3) pleine progression, codage de Huffman, précision d'échantillon 8 bits;
4) pleine progression, codage arithmétique, précision d'échantillon 8 bits;
5) sélection spectrale uniquement, codage de Huffman, précision d'échantillon 12 bits;
6) sélection spectrale uniquement, codage arithmétique, précision d'échantillon 12 bits;
7) pleine progression, codage de Huffman, précision d'échantillon 12 bits;
8) pleine progression, codage arithmétique, précision d'échantillon 12 bits.
Pour chacun de ces modes, le processus de codage est spécifié en G.1 et le processus de décodage en G.2. Les
spécifications fonctionnelles sont présentées au moyen d'organigrammes spécifiques aux diverses procédures de ces
processus de codage.
NOTE – Dans la présente Spécification, il n'est imposé aucune obligation au codeur ou décodeur qui réalise un des
processus sus-nommés, quant à la mise en oeuvre des procédures de la façon exactement spécifiée par les organigrammes de la
présente annexe. Il est seulement nécessaire qu'un codeur ou un décodeur réalise la fonction spécifiée dans la présente annexe. Le
seul critère à considérer, pour un codeur ou un décodeur, en matière de conformité à la présente Spécification, est qu'il satisfasse les
conditions données à l'article 6 (pour les codeurs) ou à l'article 7 (pour les décodeurs), telles que déterminées par les tests de
conformité spécifiés dans la Partie 2.
Le nombre de tables de Huffman ou de tables décisionnelles arithmétiques qui peuvent être utilisées dans un même
balayage est de quatre.
Deux procédures progressives complémentaires sont définies, la sélection spectrale et la procédure par approximations
successives.
Dans la sélection spectrale, les coefficients DCT de chaque bloc sont segmentés en bandes de fréquence. Les bandes sont
codées par des balayages séparés.
Dans la procédure par approximations successives, les coefficients DCT sont divisés par une puissance de deux avant le
codage. Dans le décodeur, les coefficients sont multipliés par la même puissance de deux avant le calcul de l'IDCT. Lors
des balayages successifs, la précision des coefficients est augmentée d'un bit à chaque balayage, jusqu'à atteindre la
pleine précision.
Un codeur ou un décodeur mettant en oeuvre une pleine progression utilise la sélection spectrale dans les approximations
successives. La sélection spectrale seule est un sous-ensemble autorisé.
La Figure G.1 représente les processus progressifs, par sélection spectrale et approximations successives.
Blocs
2
1
0
Coefficients 1
DCT
Codage
62
63
76 10
MSB LSB
Codage
0 0
1er
er balayage 7 0
1er
er balayage
1
2
Codage
1 Codage
2
2ee balayage 62
63
7654
MSB
2ee balayage
Codage Codage
3
4
5
3ee balayage
3
3ee balayage
Codage Codage
61
62
63
ième balayage
nième TISO1570-93/d095
0
(LSB)
6ee balayage
Figure G.1 – Processus progressifs par sélection spectrale et par approximations successives
Seule une partie de chaque bloc 8 × 8 est codée à chaque balayage, cette partie étant déterminée par les paramètres d'en-
tête de balayage Ss, Se, Ah et Al (voir B.2.3). Les procédures utilisées pour coder des parties de chaque bloc 8 × 8 sont
décrites dans la présente annexe. A noter toutefois, que lorsque ces procédures sont identiques à celles utilisées dans le
mode de fonctionnement basé DCT séquentiel, il est simplement fait référence aux procédures séquentielles.
En sélection spectrale, la séquence en zigzag des coefficients DCT est segmentée en bandes. Une bande est définie dans
l'en-tête de balayage, en spécifiant ses indices de début et de fin dans la séquence en zigzag. Une bande est codée dans
un balayage donné de la progression. Les coefficients DC sont toujours codés séparément des coefficients AC et seuls
les balayages codant des coefficients DC peuvent inclure des blocs entrelacés de plusieurs composantes. Tous les autres
balayages doivent avoir une seule composante. A l'exception des premiers balayages DC des composantes, la séquence
des bandes définie dans les balayages ne suit pas nécessairement l'ordre de la séquence en zigzag. Pour chaque
composante, un premier balayage DC doit précéder tout balayage AC.
Lorsque les approximations successives sont utilisées, la précision des coefficients DCT est réduite par la transformation
point (voir A.4) définie dans l'en-tête de balayage (voir B.2.3). Al, paramètre bas de position binaire en approximations
successives, spécifie la transformation point effective. Si des balayages ont déjà été effectués pour la bande, les quatre
bits de Ah, paramètre haut de position binaire en approximations successives, contiennent la valeur de la transformation
point utilisée dans les balayages précédents. S'il n'y a pas eu de balayage précédent pour la bande, Ah est nul.
Après le premier balayage, chaque balayage suivant améliore progressivement, pour une bande donnée, la précision des
coefficients, d'un bit, jusqu'à atteindre la pleine précision.
Si le codage par approximations successives est utilisé, la précision des coefficients DCT est réduite par la
transformation (voir A.4) définie dans l'en-tête de balayage (voir B.2.3). Ces modèles s'appliquent également aux
codeurs basés DCT progressifs, mais avec les modifications suivantes.
Si Al n'est pas nul, la transformation point doit être utilisée pour réduire la précision des coefficients DC. Si Ah est nul,
les valeurs des coefficients (modifiées par la transformation point) doivent être codées, en utilisant les procédures
décrites dans l'Annexe F. Si Ah n'est pas nul, le bit de plus faible poids des coefficients DC (modifiés par la
transformation point) doit être codé en utilisant la procédure décrite dans la présente annexe.
Si Al n'est pas nul, la transformation point doit être appliquée aux coefficients AC pour réduire leur précision. Si Ah est
nul, les valeurs des coefficients (modifiées par la transformation point) doivent être codées en utilisant les procédures
décrites dans l'Annexe F, modifiées comme décrit dans la présente annexe. Si Ah n'est pas nul, la précision des
coefficients doit être améliorée en utilisant les procédures décrites dans la présente annexe.
Le premier balayage d'une composante donnée code les valeurs des coefficients DC, en utilisant les procédures décrites
en F.1.2.1. Si le paramètre Al de position binaire en approximations successives n'est pas nul, la précision des valeurs
des coefficients doit être réduite, avant le codage, par la transformation point décrite dans l'Annexe A.
Lors des balayages suivants des approximations successives, les bits de plus faible poids sont accolés au train binaire
comprimé, sans compression ni modification (voir G.1.2.3), sauf le bourrage d'octets.
En sélection spectrale et dans le premier balayage des approximations successives d'une composante, le modèle de
codage des coefficients AC est similaire à celui utilisé par les procédures séquentielles. Toutefois, les tables de codage
de Huffman sont étendues pour inclure le codage des plages EOB (Fin de bande). Voir le Tableau G.1.
EOB0 1
EOB1 2,3
EOB2 4...7
EOB3 8...15
EOB4 16...31
EOB5 32...63
EOB6 64...127
EOB7 128...255
EOB8 256...511
EOB9 512...1 023
EOB10 1 024...2 047
EOB11 2 048...4 095
EOB12 4 096...8 191
EOB13 8 192...16 383
EOB14 16 384...32 767
La structure des plages EOB permet le codage efficace des blocs ayant uniquement des coefficients nuls. Une plage EOB
de longueur 5 signifie que le bloc courant et les quatre blocs suivants ont une fin de bande où ne figure aucun coefficient
non nul. La longueur de plage EOB n'est limitée que par l'intervalle de reprise.
SSSS
0 1 2 . . . 13 14
0 EOB0
1 EOB1
. .
RRRR . . VALEURS COMPOSITES
. .
14 EOB14
15 ZRL
TISO1580-93/d096
La séquence de codes EOBn est définie comme suit: chaque code EOBn est suivi d'un champ d'extension similaire au
champ d'extension des amplitudes des coefficients (mais avec seulement des nombres positifs). Le nombre de bits
accolés au code EOBn est le nombre minimal requis pour spécifier la longueur de plage.
Si une plage EOB est plus longue que 32 767, elle est codée comme une séquence de plages EOB de longueur 32 767
suivie d'une plage EOB finale suffisante pour compléter la plage.
Au début de chaque intervalle de reprise, le compteur de plages EOB, EOBRUN, est mis à zéro. A la fin de chaque
intervalle de reprise toute plage EOB restante est codée.
Les Figures G.3, G.4, G.5 et G.6 donnent un exemple de procédure de codage de Huffman pour les coefficients AC en
sélection spectrale et du premier balayage en approximations successives.
Encode_AC_
coefficients_SS
K = Ss – 1
R=0
K=K+1
Non Oui
ZZ(K) = 0?
Encode_EOBRUN R=R+1
Non
K = Se?
Oui
R < 16?
Oui
Non
EOBRUN =
EOBRUN + 1
Encode_ZRL
Non
EOBRUN = X’7FFF’?
Oui
Encode_R_ZZ(K)
Encode_EOBRUN
Non Oui
K = Se?
Fait
TISO1590-93/d097
Figure G.3, Ss est le début de la sélection spectrale, Se la fin de la sélection spectrale, K l'indice dans la liste des
coefficients stockés dans la séquence en zigzag ZZ, R la longueur de plage de coefficients nuls et EOBRUN la longueur
de plage d'EOB. EOBRUN est mis à zéro au début de chaque intervalle de reprise.
Si le paramètre de l'en-tête de balayage Al [position binaire en approximations successives (bas)] n'est pas nul, les
valeurs ZZ(K) des coefficients DCT (Figure G.3 et suivantes dans la présente annexe) doivent être remplacées par leurs
valeurs après transformation point ZZ’(K), où ZZ’(K) est définie par:
ZZ ( K )x
ZZ ′ ( K ) =
2 Al
EOBSIZE renvoie la taille du champ d'extension EOB, son entrée étant la longueur de plage d'EOB. La procédure
CSIZE met en correspondance un coefficient AC avec la valeur SSSS définie dans les paragraphes sur le codage
séquentiel (F.1.1 et F.1.3).
Encode_EOBRUN
Oui
EOBRUN = 0?
Non
SSSS = EOBSIZE(EOBRUN)
I = SSSS × 16
Accoler EHUFSI(I) bits
de EHUFCO(I)
Accoler SSSS bits de faible
poids de EOBRUN
EOBRUN = 0
Fait
TISO1600-93/d098
Encode_ZRL
Fait
TISO1610-93/d099
Encode_R_ZZ(K)
SSSS = CSIZE(ZZ(K))
I = (16 × R) + SSSS
Accoler EHUFSI(I) bits
de EHUFCO(I)
Oui
ZZ(K) < 0?
Fait
TISO1620-93/d100
La structure du codage de Huffman des balayages suivant le premier, en approximations successives, pour une
composante donnée, est similaire à la structure du codage du premier balayage de cette composante.
La structure de la table de codage AC est identique à la structure décrite en G.1.2.2. Chaque coefficient non nul ayant
subi une transformation point, d'historique nul (c'est-à-dire ayant une valeur ± 1 et n'ayant donc pas été codé dans un
précédent balayage) est défini par une valeur composite 8 bits valeur absolue/longueur de plage, de la forme:
RRRRSSSS
Les quatre bits de plus fort poids, RRRR, donnent le nombre de coefficients nuls situés entre le coefficient courant et le
coefficient précédemment codé (ou le bit de début de bande). Les coefficients d'historique non nul (valeur non nulle
codée dans un balayage précédent) sont sautés lors du comptage des coefficients nuls. Les quatre bits de plus faible
poids, SSSS, donnent la catégorie de valeur absolue des coefficients non nuls; pour une composante donnée, la valeur de
SSSS peut seulement être 1.
La valeur composite valeur absolue/longueur de plage est codée Huffman, chaque code de Huffman étant suivi de bits
additionnels:
a) un bit code le signe du nouveau coefficient non nul: 0 pour un signe négatif; 1 pour un signe positif;
b) pour chaque coefficient d'historique non nul, un bit est utilisé pour coder la correction. 0 signifie «pas de
correction», 1 signifie qu'il faut ajouter une unité à la valeur absolue décodée (mise à l'échelle) du
coefficient.
Les coefficients non nuls d'historique nul sont codés en un code composite de la forme:
En outre, chaque fois que des plages de zéros sont codées avec des codes ZRL ou EOBn, des bits de correction sont
ajoutés pour les coefficients d'historique non nul dans la plage de zéros, conformément à la règle b ci-dessus.
Pour la version codée Huffman de Encode_AC_Coefficients_SA, l'EOB est défini comme la position dans la bande, du
dernier coefficient ayant subi une transformation point, de valeur absolue 1. S'il n'existe aucun coefficient de valeur
absolue 1, l'EOB est par définition zéro.
NOTE – La définition de l'EOB est différente pour les procédures de codage de Huffman et de codage arithmétique.
Dans les Figures G.7 et G.8, BE est le nombre de bits de correction en mémoire tampon, au début du codage du bloc. BE
est initialisé à zéro au début de chaque intervalle de reprise. A la fin de chaque intervalle de reprise, tous les bits restant
dans la mémoire tampon sont accolés au train binaire, après le dernier code de Huffman EOBn et les bits associés
accolés.
Dans les Figures G.7 et G.9, BR est le nombre de bits de correction en mémoire tampon, accolés au train binaire selon la
règle b. BR est mis à zéro au début de chaque procédure Encode_AC_Coefficients_SA. A la fin de chaque intervalle de
reprise, les éventuels bits restant dans la mémoire tampon sont accolés au train binaire, après le dernier code de Huffman
et les bits associés accolés.
Le premier balayage d'une composante donnée doit coder des valeurs des coefficients DC en utilisant les procédures
décrites en F.1.4.1. Si le paramètre de position binaire en approximations successives n'est pas nul, la précision des
valeurs des coefficients doit être réduite avant le balayage, par la transformation point décrite dans l'Annexe A.
Dans les balayages suivants des approximations successives, les bits de plus faible poids doivent être codés comme des
décisions binaires en utilisant une estimation de probabilité fixe de 0,5 (Qe = X’5A1D’, MPS = 0).
A l'exception de la transformation point des coefficients DCT et du regroupement des coefficients en bandes, le ou les
premiers balayages des approximations successives sont identiques à la procédure de codage séquentiel, décrite en F.1.4.
Si Kmin est égal à Ss, indice du premier indice de coefficient AC de la bande, l'organigramme de la Figure F.5
s'applique. La décision EOB de cette figure se réfère à la fin de bande et non à la fin de bloc. Pour la version à codage
arithmétique de la procédure Encode_AC_Coefficients_SA (et de toutes les autres procédures de codage des coeffi-
cients AC), l'EOB est par définition la position qui suit le dernier coefficient non nul de la bande.
NOTE – La définition de l'EOB est différente pour les procédures de codage de Huffman et de codage arithmétique.
Le modèle statistique décrit en F.1.4 est également valable. Pour ce modèle, la valeur par défaut de Kx est 5. D'autres
valeurs de Kx peuvent être spécifiées en utilisant le code du marqueur DAC (Annexe B). Le calcul suivant de Kx s'est
avéré donner de bons résultats pour les échantillons de précision 8 bits:
Cette expression se réduit à la valeur par défaut Kx = 5 lorsque la bande va de l'indice 1 à l'indice 63.
La procédure «Encode_AC_Coefficient_SA» de la Figure G.10, augmente d'un bit la précision des valeurs des
coefficients AC de la bande.
Comme dans le premier balayage des approximations successives d'une composante, une décision EOB est codée au
début de la bande et après chaque coefficient non nul.
Encode_AC_
coefficients_SA
K = Ss – 1
R=0
BR = 0
K=K+1
Non Oui
ZZ(K) = 0?
Oui
R > 15?
Encode_EOBRUN
Non Non Append_BE_bits
K ≥ EOB? Encode_ZRL
Append_BR_bits
Oui
Non
|ZZ(K)| = 1?
Accoler les bits de
faible poids de ZZ(K)
Oui aux bits en R=R+1
mémoire tampon
Encode_EOBRUN BR = BR + 1
Append_BE_bits
Encode_R_ZZ(K)
Append_BR_bits
Non
K = Se?
Non
K = Se?
Oui
Oui EOBRUN =
EOBRUN + 1
BE = BE + BR
Non
EOBRUN = X’7FFF’?
Oui
Encode_EOBRUN
Append_BE_bits
TISO1630-93/d101
Fait
Append_BE_bits
Oui
BE = 0?
Non
Fait
TISO1640-93/d102
Append_BR_bits
Oui
BR = 0?
Non
Fait
TISO1650-93/d103
Toutefois, comme l'indice de fin de bande du précédent balayage des approximations successives d'une composante
donnée, EOBx, est connu d'après les données codées dans le précédent balayage pour cette composante, cette décision
est sautée quand l'indice courant K, est inférieur à EOBx. Comme dans le ou les premier(s) balayage(s), la décision EOB
est également sautée lorsque le dernier coefficient de la bande est non nul. La décision ZZ(K) = 0 décode des plages de
coefficients nuls. Si le décodeur se trouve à ce point de la procédure, au moins un coefficient non nul reste dans la bande
du bloc en cours de codage. Si ZZ(K) est non nul, la procédure de la Figure G.11 est appliquée pour coder la valeur.
Les indices de contexte des Figures G.10 et G.11 sont définis dans le Tableau G.2 (voir G.1.3.3.1). Les signes des
coefficients de valeur absolue 1 sont codés avec une valeur de probabilité fixe de 0,5 (Qe = X’5A1D’, MPS = 0).
G.1.3.3.1 Modèle statistique de codage des balayages suivant le premier, en approximations successives
Comme indiqué dans le Tableau G.2, chaque zone statistique des balayages suivant le premier, en approximations
successives des coefficients AC, consiste en un ensemble de 189 registres statistiques consécutifs. Les signes des
coefficients de valeur absolue 1 sont codés avec une probabilité fixe de valeur 0,5 (Qe = X’5A1D’, MPS = 0).
La description du calcul de l'IDCT et la procédure de déquantification données en A.3.3 et A.3.4 s'appliquent au mode
progressif.
Le processus de décodage progressif doit être capable de décomprimer des données d'image comprimées qui nécessitent,
dans un même balayage, jusqu'à quatre ensembles de tables de Huffman ou de tables décisionnelles utilisées par le
codeur arithmétique.
Pour éviter les répétitions, les organigrammes détaillés du mode progressif ne sont pas représentés à nouveau. Le
fonctionnement du décodeur est défini en inversant la fonction de chaque procédure décrite dans l'organigramme du
codeur, et en exécutant ces procédures en ordre inverse.
Encode_AC_
coefficients_SA
K = Kmin
Oui
K < EOBx?
Non
Oui
K = EOB? Code_1(SE)
Non
Code_0(SE)
K=K+1 K=K+1
Oui
ZZ(K) = 0? Code_0(S0)
Non
CodeSA_ZZ(K)
Non Oui
K = Se?
Fait
TISO1660-93/d104
CodeSA_ZZ(K)
Oui Non
T = LSB ZZ(K) | ZZ(K) | > 1? Code_1(S0)
TISO1670-93/d105
Fait
Figure G.11 – Codage des coefficients non nuls des balayages suivant le premier,
en approximations successives
SE 3 × (K–1) K = EOB
S0 SE + 1 V=0
SC S0 + 1 LSB ZZ(K) = 1
Annexe H
La présente annexe donne une spécification fonctionnelle des processus de codage suivants du mode de fonctionnement
sans perte:
Pour chacun, le processus de codage est spécifié en H.1 et le processus de décodage en H.2. Les spécifications
fonctionnelles sont données par les procédures spécifiques à ces processus de codage.
NOTE – Dans la présente Spécification, il n'est imposé aucune obligation au codeur ou décodeur qui réalise un des
processus susnommés, quant à la mise en oeuvre des procédures de la façon exactement spécifiée par les organigrammes de la présente
annexe. Il est seulement nécessaire qu'un codeur ou un décodeur réalise la fonction spécifiée dans la présente annexe. Le seul critère à
considérer, pour un codeur ou un décodeur, en matière de conformité à la présente Spécification, est qu'il satisfasse les conditions
données à l'article 6 (pour les codeurs) ou à l'article 7 (pour les décodeurs), telles que déterminées par les tests de conformité spécifiés
dans la Partie 2.
Les processus qui assurent le codage et le décodage séquentiels sans perte ne sont pas basés DCT. Sont utilisés, des
processus spatiaux basés sur le modèle de codage développé pour les coefficients DC de la DCT. Ce modèle est étendu
par incorporation d'un ensemble de prédicteurs sélectables uni et bidimensionnels. Pour les données entrelacées
verticalement, l'ordre des échantillons du prédicteur horizontal unidimensionnel est différent de celui utilisé pour les
processus basés DCT.
Le codage de Huffman ou le codage entropique arithmétique peuvent être employés pour ces processus de codage et de
décodage sans perte. La structure de la table de codage de Huffman est étendue pour permettre une précision de 16 bits
des données d'entrée. Le modèle statistique du codeur arithmétique est étendu à une forme bidimensionnnelle.
Le paragraphe E.1 décrit les procédures de contrôle du codeur. Dans l'application de ces procédures au codeur sans
perte, l'unité de données est l'échantillon.
La précision des données d'entrée peut aller de 2 à 16 bits par échantillon. Si la voie d'accès d'entrée a une précision
différente de celle des données d'entrée, les données doivent être toujours calées sur les bits de plus faible poids de la
voie d'accès d'entrée. Les données d'entrée sont représentées comme des entiers non signés et ne subissent pas de
décalage de niveau avant codage.
Lors de la réinitialisation du codeur dans la procédure de contrôle de l'intervalle de reprise (voir E.1.4), la prédiction est
réinitialisée à une valeur par défaut. En codage arithmétique, les statistiques sont également réinitialisées.
Pour les processus sans perte, l'intervalle de reprise doit être un multiple entier du nombre de MCU d'une rangée.
Le modèle de codage développé pour les coefficients DC de la DCT est étendu pour permettre une sélection à partir d'un
ensemble de sept prédicteurs uni et bidimensionnels. Le prédicteur est sélectionné dans l'en-tête de balayage (voir
l'Annexe B). Le même prédicteur est utilisé pour toutes les composantes du balayage. Chaque composante du balayage
est modélisée indépendamment, en utilisant les prédictions dérivées d'échantillons voisins, dans cette composante.
H.1.2.1 Prédiction
La Figure H.1 représente la relation entre les positions (a, b, c) des échantillons voisins reconstruits utilisés pour la
prédiction, et la position de l'échantillon x, en cours de codage.
c b
a x
TISO1680-93/d106
Par définition, Px est la prédiction, et Ra, Rb et Rc les échantillons reconstruits immédiatement à gauche, au-dessus et en
diagonale à gauche de l'échantillon courant. Les prédicteurs autorisés, dont l'un est sélectionné dans l'en-tête de trame,
sont indiqués dans le Tableau H.1.
1 Px = Ra
2 Px = Rb
3 Px = Rc
4 Px = Ra + Rb – Rc
5 Px = Ra + ((Rb – Rc)/2)a)
6 Px = Rb + ((Ra – Rc)/2)a)
7 Px = (Ra + Rb)/2
a) Opération de décalage arithmétique à droite
La valeur de sélection 0 peut seulement être utilisée pour le codage différentiel en mode de fonctionnement hiérarchique.
Les valeurs de sélection 1, 2 et 3 sont des prédicteurs unidimensionnels, et les valeurs 4, 5, 6, 7 sont les prédicteurs
bidimensionnels.
Le prédicteur horizontal unidimensionnel (échantillon de prédiction Ra) est utilisé pour la première ligne d'échantillons
au début du balayage et au début de chaque intervalle de reprise. Le prédicteur sélectionné est utilisé pour toutes les
autres lignes. L'échantillon de la ligne de dessus (échantillon de prédiction Rb) est utilisé au début de chaque ligne, sauf
la première. Au début de la première ligne et au début de chaque intervalle de reprise, la valeur de prédiction utilisée
est 2P – 1, P étant la précision d'entrée.
Si le paramètre de transformation point (voir A.4) est non nul, la valeur de prédiction au début des premières lignes et au
début de chaque intervalle de reprise est 2P – Pt – 1, Pt étant la valeur du paramètre de transformation point.
Chaque prédiction est calculée avec une arithmétique entière pleine précision, sans troncature des bits dépassant la limite
supérieure ou inférieure de la précision d'entrée. Par exemple, si Ra et Rb sont des entiers 16 bits, la somme est un entier
17 bits. Après division de la somme par deux, (prédicteur 7), la précision est un entier 16 bits.
Pour simplifier la réalisation, la division par deux dans les sélections de prédiction 5 et 6 du Tableau H.1 est effectuée
par un décalage arithmétique à droite en valeur entière.
La différence entre la valeur de prédiction et l'entrée est calculée modulo 216. La différence est décodée dans le décodeur
et ajoutée, modulo 216, à la prédiction.
Les procédures de codage de Huffman définies dans l'Annexe F pour le codage des coefficients DC sont utilisées pour
coder les différences modulo 216. Une entrée additionnelle est ajoutée aux tables de codage DC des Tableaux F.1 et F.6.
Aucun bit supplémentaire n'est codé après SSSS = 16. Voir le Tableau H.2.
Le modèle statistique défini pour le modèle de codage arithmétique des coefficients DC (voir F.1.4.4.1) est généralisé à
une forme bidimensionnelle, dans laquelle les différences codées pour l'échantillon de gauche et pour la ligne du dessus
sont utilisées comme valeurs décisionnelles.
Les décisions binaires sont conditionnées par les différences codées pour les échantillons voisins, immédiatement
supérieur et immédiatement à gauche de la même composante. Comme pour le codage des coefficients DC, cinq classes
de différences sont définies: nulle (0), petite positive (+S), petite négative (–S), grande positive (+L) et grande
négative (–L). Les deux catégories de différence indépendantes se combinent pour donner 25 états décisionnels. La
Figure H.2 représente le tableau bidimensionnel des indices décisionnels. Des estimations de probabilité pour quatre
décisions binaires sont conservées pour chacun des 25 états décisionnels.
Au début du balayage et de chaque intervalle de reprise, les valeurs décisionnelles dérivées de la ligne du dessus sont
mises à zéro pour la première ligne de chaque composante. Au début de chaque ligne, la différence avec la valeur de
gauche est mise à zéro lors du calcul des valeurs décisionnelles.
0 +S –S +L –L
0 0 4 8 12 16
Différence avec +S 20 24 28 32 36
l'échantillon de
gauche (position a) –S 40 44 48 52 56
+L 60 64 68 72 76
–L 80 84 88 92 96
TISO1690-93/d107
En codage sans perte, chaque zone statistique consiste en un ensemble de 158 registres statistiques consécutifs. La valeur
de S0 est donnée par «L_Context(Da,Db)», qui fournit une valeur de 0, 4, ... 92 ou 96, selon les catégories de différence
de Da et Db (voir H.1.2.3.1). La valeur S0 fournie par «L_Context(Da,Db)» est une de celles du tableau de la
Figure H.2.
Les 58 autres registres consistent en deux ensembles de 29 bits, X1, ... X15, M2, ... M15, utilisés pour coder les
décisions relatives à la catégorie de valeur absolue et les bits de valeur absolue. La valeur de X1 est donnée par
X1_Content(Db), qui donne une valeur de 100 quand Db appartient aux catégories de différence nulle, petite positive ou
petite négative, et une valeur de 129 quand Db appartient aux catégories grande positive ou grande négative.
Les affectations des registres statistiques à l'arbre de décisions binaires utilisé pour le codage de la différence sont
données dans le Tableau H.3.
Annexe J
La présente annexe donne une spécification fonctionnelle des processus de codage pour le mode de fonctionnement
hiérarchique.
En mode de fonctionnement hiérarchique, chaque composante est codée ou décodée en une trame non différentielle, qui
peut être suivie d'une séquence de trames différentielles. Une trame non différentielle doit être codée ou décodée selon
les procédures définies dans les Annexes F, G et H. Les procédures relatives aux trames différentielles sont définies dans
la présente annexe.
Le processus de codage d'un codeur hiérarchique contenant des processus basés DCT est, par définition, le processus de
numéro le plus élevé dans le Tableau J.1, utilisé pour coder toute trame basée DCT non différentielle ou basée DCT
différentielle dans le format de données d'image comprimées. Le processus de codage d'un codeur hiérarchique
contenant des processus sans perte est, par définition, le processus utilisé pour les trames non différentielles.
La syntaxe du mode séquentiel de base stipule la présence d'un segment marqueur DHP avant la ou les trames non
différentielles. Des segments marqueurs EXP et des trames peuvent suivre la trame non différentielle initiale. La
structure de trame est identique en mode hiérarchique et en mode non hiérarchique.
Les trames non différentielles d'une image doivent toutes être codées, soit par des processus basés DCT, soit par des
processus sans perte. Toutes les trames d'une image doivent utiliser la même procédure de codage entropique, soit de
Huffman, soit arithmétique – à l'exception des trames non différentielles codées par le processus de base, qui peuvent se
présenter dans une image incluant des trames codées par le processus de codage arithmétique.
Si les trames non différentielles utilisent des processus basés DCT, toutes les trames différentielles, sauf la trame finale
d'une composante, doivent utiliser des processus basés DCT. La trame différentielle finale de chaque composante peut
utiliser le processus sans perte différentiel.
Si les trames non différentielles utilisent des processus sans perte, toutes les trames différentielles doivent utiliser des
processus sans perte.
Pour chacun des processus indiqués dans le Tableau J.1, les processus de codage sont spécifiés en J.1 et les processus de
décodage en J.2.
NOTE – Dans la présente Spécification, il n'est imposé aucune obligation au codeur ou décodeur qui réalise un des
processus susnommés, quant à la mise en oeuvre des procédures de la façon exactement spécifiée par les organigrammes de la présente
annexe. Il est seulement nécessaire qu'un codeur ou un décodeur réalise la fonction spécifiée dans la présente annexe. Le seul critère à
considérer, pour un codeur ou un décodeur, en matière de conformité à la présente Spécification, est qu'il satisfasse les conditions
données à l'article 6 (pour les codeurs) ou à l'article 7 (pour les décodeurs), telles que déterminées par les tests de conformité spécifiés
dans la Partie 2.
Dans le mode d'exploitation hiérarchique, chaque composante est codée ou décodée dans une trame non différentielle
suivie par une séquence de trames différentielles. Une trame non différentielle utilisera les procédures définies aux
Annexes F, G et H. Les procédures relatives aux trames différentielles sont définies dans la présente annexe.
La structure de contrôle du codage d'une image en mode hiérarchique est donnée Figure J.1.
Sur la Figure J.1, les procédures entre crochets doivent être exécutées chaque fois que la séquence de codage
hiérarchique utilisée le requiert.
En mode hiérarchique, le segment marqueur de définition de processus hiérarchique (DHP) doit être placé, dans les
données d'image comprimées, avant le premier début de trame. Le segment DHP sert à indiquer la taille des composantes
de l'image complète. La syntaxe du segment DHP est spécifiée dans l'Annexe B.
La première trame de chaque composante ou groupe de composantes d'un processus hiérarchique doit être codée par une
trame non différentielle. Des trames différentielles doivent ensuite être utilisées pour coder les différences, en
complément à deux, entre les composantes d'entrée source (éventuellement sous-échantillonnées) et les composantes de
référence (éventuellement suréchantillonnées). Les composantes de référence sont des composantes reconstruites créées
par des trames antérieures dans le processus hiérarchique. Pour des trames différentielles ou non différentielles, des
reconstructions des composantes doivent, si nécessaire, être générées comme composantes de référence, pour une trame
suivante du processus hiérarchique.
Des changements de résolution peuvent intervenir entre des trames hiérarchiques d'un processus hiérarchique, si des
filtres de sous-échantillonnage sont utilisés pour réduire la résolution spatiale de certaines ou de toutes les composantes
de l'image source. Quand la résolution d'une composante de référence ne correspond pas à la résolution de la composante
d'entrée d'une trame différentielle, un filtre de suréchantillonnage doit être utilisé pour augmenter la résolution spatiale
de cette composante de référence. Le segment marqueur EXP doit être accolé aux données d'image comprimées, avant le
début de trame, chaque fois qu'un suréchantillonnage d'une composante de référence s'impose. Une trame donnée ne doit
pas être précédée de plus d'un segment marqueur EXP.
Tout segment marqueur autorisé avant un début de trame pour le processus de codage choisi, peut être utilisé avant des
trames non différentielles ou différentielles.
Pour une précision d'entrée 16 bits (codeur sans perte), les composantes différentielles en entrée d'une trame
différentielle sont calculées modulo 216. Les composantes reconstruites calculées à partir des composantes différentielles
reconstruites sont également calculées modulo 216.
Si un processus de codage hiérarchique utilise un processus de codage DCT pour la première trame, toutes les trames du
processus hiérarchique, sauf la trame finale de chaque composante, doivent utiliser les processus de codage DCT définis
dans l'Annexe F ou l'Annexe G, ou les processus de codage DCT modifiés définis dans la présente annexe. La trame
finale peut utiliser un processus sans perte modifié défini dans la présente annexe.
Si un processus de codage hiérarchique utilise un processus de codage sans perte pour la première trame, toutes les
trames du processus hiérarchique doivent utiliser un processus de codage sans perte défini dans l'Annexe H ou un
processus de codage sans perte modifié défini dans la présente annexe.
Les composantes sous-échantillonnées sont générées à l'aide d'un filtre de sous-échantillonnage, non spécifié dans la
présente Spécification. Toutefois, ce filtre doit être cohérent avec le filtre de suréchantillonnage. Un exemple de filtre de
sous-échantillonnage est donné en K.5.
Le filtre de suréchantillonnage augmente la résolution spatiale d'un facteur deux horizontalement, verticalement ou dans
les deux dimensions. Il utilise l'interpolation bilinéaire représentée Figure J.2.
Encode_image
[Sous-échantillonner composantes
Encode_frame de référence et accoler segment
marqueur EXP]
Générer les composantes différentielles
Encode_differential_frame
Reconstruire composantes différentielles
Reconstruire les composantes
Reconstruire les
composantes en
utilisant le processus
de décodage adapté
Oui
Autres trames?
Non
Fait
TISO1700-93/d108
a x b a
TISO1710-93/d109
Px = (Ra + Rb) / 2
où Ra et Rb sont des valeurs des échantillons a et b de positions adjacentes à l'image de résolution inférieure, et Px la
valeur interpolée. La division implique la troncature et non l'arrondi. La colonne de gauche de l'image suréchantillonnée
correspond à la colonne de gauche de l'image de résolution inférieure. La rangée du haut de l'image suréchantillonnée
correspond à la rangée du haut de l'image de résolution inférieure. La colonne de droite et la rangée du bas de l'image de
résolution inférieure sont copiées pour donner les valeurs requises pour les interpolations des bords de la colonne de
droite et de la rangée du bas. Le processus de suréchantillonnage double toujours la longueur de lignes et/ou le nombre
de lignes.
Si des expansions horizontales et verticales sont prescrites, elles sont opérées successivement: expansion horizontale,
puis la verticale.
Les procédures de contrôle définies dans l'Annexe E pour les trames, balayages, intervalles de reprise et MCU,
s'appliquent également au codage des trames différentielles, ainsi qu'aux balayages, intervalles de reprise et MCU pour
lesquels la trame différentielle est construite. Les trames différentielles ne diffèrent des trames des Annexes F, G et H
qu'au niveau du modèle de codage.
Les modèles de codage définis dans les Annexes F, G et H sont modifiés pour pouvoir être utilisés pour le codage des
différences en complément à deux.
J.1.3.1 Modifications apportées aux modèles de codage DCT pour le codage des trames différentielles
Deux modifications sont apportées aux modèles de codage DCT pour permettre leur utilisation pour des trames
différentielles. Premièrement, la FDCT de l'entrée différentielle est calculée sans décalage de niveau; deuxièmement, le
coefficient DC de la DCT est codé directement – sans prédiction.
J.1.3.2 Modifications apportées aux modèles de codage sans perte pour le codage des trames différentielles
Une modification est apportée aux modèles de codage sans perte. La différence est codée directement – sans prédiction.
Le paramètre de sélection de prédiction de l'en-tête de balayage doit être mis à zéro. La transformation point applicable
aux entrées différentielles est définie dans l'Annexe A.
J.1.4 Modifications apportées aux codeurs entropiques pour le codage des trames différentielles
Le codage des différences en complément à deux nécessite un bit de précision supplémentaire pour le codage de
Huffman des coefficients AC. L'extension des Tableaux F.1 et F.7 est donnée dans le Tableau J.2.
SSSS Coefficients AC
Les modèles de codage arithmétique sont déjà définis pour la précision requise dans les trames différentielles.
La structure de contrôle du décodage d'une image en mode hiérarchique est donnée sur la Figure J.3.
Decode_image
Non
Marqueur SOI?
Oui
Oui
Marqueur EOI?
Non Fait
Non
Hiérarchique?
Oui Mode
non hiérarchique
[Sous-échantillonner composantes
Decode_frame de référence]
Decode_differential_frame
Reconstruct_components
TISO1720-93/d110
La procédure interpréter marqueurs décode les marqueurs qui précèdent éventuellement le marqueur SOF et poursuit ce
décodage jusqu'à rencontrer un marqueur SOF ou EOI. Si le marqueur DHP est rencontré avant la première trame, un
indicateur est positionné, sélectionnant le décodage hiérarchique au point de décision «hiérarchique?». En plus du
marqueur DHP (qui doit précéder tout SOF) et du marqueur EXP (qui doit précéder tout SOF différentiel impliquant des
changements de résolutions dans les composantes de référence), tous les autres marqueurs qui peuvent précéder un SOF
doivent être interprétés dans la mesure nécessaire pour le décodage des données d'image comprimées.
Si un marqueur différentiel SOF est rencontré, la procédure emprunte la branche «trame différentielle». Si l'EXP a été
rencontré dans la procédure interpréter marqueurs, les composantes de référence de la trame doivent être
suréchantillonnées comme prescrit par les paramètres du segment EXP. La procédure de suréchantillonnage décrite
en J.1.1.2 doit être suivie.
J.2.3.1 Modifications apportées au modèle de codage DCT, pour le décodage de trames différentielles
Deux modifications sont apportées aux modèles de codage DCT du décodeur pour leur permettre de coder des trames
différentielles. Premièrement, l'IDCT de la sortie différentielle est calculée sans décalage de niveau. Deuxièmement, le
coefficient DC de la DCT est décodé directement – sans prédiction.
J.2.3.2 Modification apportée au modèle de codage sans perte, pour le décodage de trames différentielles
Une modification est apportée au modèle de codage sans perte du décodeur. La différence est décodée directement –
sans prédiction. Si le paramètre de transformation point de l'en-tête de balayage n'est pas nul, la transformation point
définie dans l'Annexe A doit être appliquée à la sortie différentielle.
J.2.4 Modifications apportées aux décodeurs entropiques, pour le décodage des trames différentielles
Les décodages des différences en complément à deux nécessitent un bit de précision supplémentaire dans la table de
codage de Huffman. Ce point est décrit en J.1.4. Les modèles de codage arithmétique sont déjà définis pour la précision
requise dans les trames différentielles.
Annexe K
Exemples et directives
(Cette annexe ne fait pas partie intégrante de la présente Recommandation | Norme internationale)
La présente annexe donne des exemples de diverses tables et procédures, ainsi que des directives.
Deux exemples de tables de quantification sont donnés dans les Tableaux K.1 et K.2. Ces tables reposent sur des
mécanismes de seuils visuels psycho-physiologiques. Elles sont établies empiriquement pour la luminance et la
chrominance, avec un suréchantillonnage horizontal 2:1. Ces tables, uniquement fournies à titre d'exemple, ne sont pas
nécessairement appropriées à des applications particulières. Les valeurs de quantification données ont été utilisées avec
de bons résultats sur des images à 8 bits par échantillon, du format indiqué Figure 13. A noter que ces valeurs de
quantification sont appropriées à la normalisation DCT définie en A.3.3.
Si ces valeurs de quantification sont divisées par 2, l'image reconstruite résultante est en général presque indiscernable
de l'image source.
17 18 24 47 99 99 99 99
18 21 26 66 99 99 99 99
24 26 56 99 99 99 99 99
47 66 99 99 99 99 99 99
99 99 99 99 99 99 99 99
99 99 99 99 99 99 99 99
99 99 99 99 99 99 99 99
99 99 99 99 99 99 99 99
K.2 Procédure de génération des listes de spécification d'une table de codage de Huffman
Une table de Huffman est générée, à partir d'un ensemble de données statistiques, en deux étapes: la première étape
consiste à générer la liste des longueurs et valeurs conformes aux règles de génération des tables de codes de Huffman;
la seconde étape est la génération de la table de codage de Huffman à partir de cette liste des longueurs et valeurs.
La première étape fait l'objet de ce paragraphe: elle sert uniquement à adapter à l'application (à «personnaliser») la
génération de la table de Huffman et n'est effectuée que dans le codeur. Les statistiques sont utilisées pour créer une
table associant chaque valeur à coder à la longueur (en bits) du code de Huffman correspondant. Cette table est classée
par longueurs de code.
La Figure K.1 présente une procédure de création de table de Huffman pour un ensemble pouvant comprendre
jusqu'à 256 symboles. Trois vecteurs sont définis pour cette procédure:
OTHERS(V) Pointeur vers le symbole suivant dans la chaîne de tous les symboles de la branche
courante de l'arbre des codes
Avant de lancer la procédure, les valeurs de FREQ sont recueillies pour V = 0 à 255, la valeur de FREQ pour V = 256
étant mise à 1 pour réserver un point de code. Les valeurs de FREQ pour les symboles non utilisés sont toutes à 0. En
outre, les entrées de CODESIZE sont toutes mises à 0 et les indices de OTHERS sont mis à –1, valeur terminant une
chaîne d'indices. La réservation d'un point de code 1 garantit qu'aucun mot de code ne pourra jamais être entièrement
composé de bits «1».
La recherche de l'entrée ayant la plus petite valeur de FREQ(V) sélectionne la plus grande valeur de V pour laquelle la
plus petite valeur de FREQ(V) est supérieure à zéro.
La procédure «trouver V1 pour la plus petite valeur de FREQ(V1) > 0» sélectionne toujours la valeur associée à la plus
grande valeur de V1 quand plusieurs V1 de même fréquence se présentent. Il est ainsi garanti que le point de code
réservé appartient à la catégorie des mots de code les plus longs.
Quand les longueurs de code associées à chaque symbole ont été obtenues, le nombre de codes de chaque longueur est
obtenu en appliquant la procédure de la Figure K.2. Le compteur associé à chaque longueur est contenu dans la liste
BITS. Les compteurs de BITS sont à zéro au début de la procédure. La procédure suppose que les probabilités restent
assez fortes pour que des longueurs de codes supérieures à 32 bits ne se présentent jamais. A noter que jusqu'à la fin de
la procédure finale Adjust_BITS, BITS peut avoir plus que les 16 entrées requises dans la spécification de tables (voir
l'Annexe C).
La Figure K.3 donne la procédure d'ajustement de la liste BITS, exécutée pour qu'aucun code n'ait une longueur
supérieure à 16 bits. Comme les symboles sont accolés par paires, pour le code de Huffman le plus long, ils sont
également retirés par paires pour cette catégorie de longueur. Le préfixe d'une paire (d'un bit plus court) est affecté à l'un
des symboles de cette paire; puis (en sautant l'entrée BITS pour cette longueur de préfixe) un mot de code de la
prochaine entrée la plus courte non nulle de BITS est converti en un préfixe de deux mots de code (plus long d'un bit).
Après la réduction de la liste BITS, en sorte que la longueur maximale des codes soit de 16 bits, la dernière étape retire
le point de code réservé du compteur de longueurs de code.
Les valeurs d'entrée sont classées par longueurs de code, comme indiqué Figure K.4. HUFFVAL est la liste contenant
les valeurs d'entrée associées à chaque mot de code, par ordre de longueurs de code croissantes.
A ce point, la liste des longueurs de code (BITS) et la liste des valeurs (HUFFVAL) peuvent être utilisées pour générer
les tables de codage, selon les procédures décrites dans l'Annexe C.
Code_size
Non
V2 existe?
Oui
Fait
FREQ(V1) =
FREQ(V1) +
FREQ(V2)
FREQ(V2) = 0
CODESIZE(V1) =
V1 = OTHERS(V1) CODESIZE(V1) + 1
Non
OTHERS(V1) = –1?
Oui
OTHERS(V1) = V2
CODESIZE(V2) =
V2 = OTHERS(V2) CODESIZE(V2) + 1
Non Oui
OTHERS(V2) = –1?
TISO1730-93/d111
Count_BITS
I=0
Non
CODESIZE(I) = 0? BITS(CODESIZE(I)) =
BITS(CODESIZE(I)) + 1
Oui
I=I+1
Non
I = 257
Oui
Adjust_BITS
Fait
TISO1740-93/d112
Adjust_BITS
I = 32
Oui Non
BITS(I) > 0?
J=I–1 I=I–1
Non
I = 16?
J=J–1
Oui
Non
BITS(J) > 0? I=I–1
Oui
BITS(I) = BITS(I) – 2
BITS(I – 1) = BITS(I – 1) + 1 Oui
BITS(I) = 0?
BITS(J + 1) = BITS(J + 1) + 2
BITS(J) = BITS (J) – 1
Non
BITS(I) = BITS(I) – 1
Fait
TISO1750-93/d113
Sort_input
I=1
K=0
J=0
Oui HUFFVAL(K) = J
CODESIZE(J) = I?
K=K+1
Non
J=J+1
Non
J > 255?
Oui
I=I+1
Non
I > 32?
Oui
Fait
TISO1760-93/d114
K.3 Tables de Huffman typiques pour une luminance et une chrominance de précision 8 bits
Les Tableaux K.3 et K.4 donnent des tables de Huffman établies à partir de statistiques moyennes portant sur un grand
nombre d'images vidéo de précision 8 bits. La table du Tableau K.3 est appropriée aux composantes de luminance et
celle du Tableau K.4 aux composantes de chrominance. Ce ne sont pas des tables par défaut, mais elles peuvent s'avérer
utiles pour beaucoup d'applications.
0 2 00
1 3 010
2 3 011
3 3 100
4 3 101
5 3 110
6 4 1110
7 5 11110
8 6 111110
9 7 1111110
10 8 11111110
11 9 111111110
0 2 00
1 2 01
2 2 10
3 3 110
4 4 1110
5 5 11110
6 6 111110
7 7 1111110
8 8 11111110
9 9 111111110
10 10 1111111110
11 11 11111111110
4/1 6 111011
4/2 10 1111111000
4/3 16 1111111110010110
4/4 16 1111111110010111
4/5 16 1111111110011000
4/6 16 1111111110011001
4/7 16 1111111110011010
4/8 16 1111111110011011
4/9 16 1111111110011100
4/A 16 1111111110011101
5/1 7 1111010
5/2 11 11111110111
5/3 16 1111111110011110
5/4 16 1111111110011111
5/5 16 1111111110100000
5/6 16 1111111110100001
5/7 16 1111111110100010
5/8 16 1111111110100011
5/9 16 1111111110100100
5/A 16 1111111110100101
6/1 7 1111011
6/2 12 111111110110
6/3 16 1111111110100110
6/4 16 1111111110100111
6/5 16 1111111110101000
6/6 16 1111111110101001
6/7 16 1111111110101010
6/8 16 1111111110101011
6/9 16 1111111110101100
6/A 16 1111111110101101
7/1 8 11111010
7/2 12 111111110111
7/3 16 1111111110101110
7/4 16 1111111110101111
7/5 16 1111111110110000
7/6 16 1111111110110001
7/7 16 1111111110110010
7/8 16 1111111110110011
7/9 16 1111111110110100
7/A 16 1111111110110101
8/1 9 111111000
8/2 15 111111111000000
8/3 16 1111111110110110
8/4 16 1111111110110111
8/5 16 1111111110111000
8/6 16 1111111110111001
8/7 16 1111111110111010
8/8 16 1111111110111011
8/9 16 1111111110111100
8/A 16 1111111110111101
9/1 9 111111001
9/2 16 1111111110111110
9/3 16 1111111110111111
9/4 16 1111111111000000
9/5 16 1111111111000001
9/6 16 1111111111000010
9/7 16 1111111111000011
9/8 16 1111111111000100
9/9 16 1111111111000101
9/A 16 1111111111000110
A/1 9 111111010
A/2 16 1111111111000111
A/3 16 1111111111001000
A/4 16 1111111111001001
A/5 16 1111111111001010
A/6 16 1111111111001011
A/7 16 1111111111001100
A/8 16 1111111111001101
A/9 16 1111111111001110
A/A 16 1111111111001111
B/1 10 1111111001
B/2 16 1111111111010000
B/3 16 1111111111010001
B/4 16 1111111111010010
B/5 16 1111111111010011
B/6 16 1111111111010100
B/7 16 1111111111010101
B/8 16 1111111111010110
B/9 16 1111111111010111
B/A 16 1111111111011000
C/1 10 1111111010
C/2 16 1111111111011001
C/3 16 1111111111011010
C/4 16 1111111111011011
C/5 16 1111111111011100
C/6 16 1111111111011101
C/7 16 1111111111011110
C/8 16 1111111111011111
C/9 16 1111111111100000
C/A 16 1111111111100001
D/1 11 11111111000
D/2 16 1111111111100010
D/3 16 1111111111100011
D/4 16 1111111111100100
D/5 16 1111111111100101
D/6 16 1111111111100110
D/7 16 1111111111100111
D/8 16 1111111111101000
D/9 16 1111111111101001
D/A 16 1111111111101010
E/1 16 1111111111101011
E/2 16 1111111111101100
E/3 16 1111111111101101
E/4 16 1111111111101110
E/5 16 1111111111101111
E/6 16 1111111111110000
E/7 16 1111111111110001
E/8 16 1111111111110010
E/9 16 1111111111110011
E/A 16 1111111111110100
F/0 (ZRL) 11 11111111001
F/1 16 1111111111110101
F/2 16 1111111111110110
F/3 16 1111111111110111
F/4 16 1111111111111000
F/5 16 1111111111111001
F/6 16 1111111111111010
F/7 16 1111111111111011
F/8 16 1111111111111100
F/9 16 1111111111111101
F/A 16 1111111111111110
0/0 (EOB) 2 00
0/1 2 01
0/2 3 100
0/3 4 1010
0/4 5 11000
0/5 5 11001
0/6 6 111000
0/7 7 1111000
0/8 9 111110100
0/9 10 1111110110
0/A 12 111111110100
1/1 4 1011
1/2 6 111001
1/3 8 11110110
1/4 9 111110101
1/5 11 11111110110
1/6 12 111111110101
1/7 16 1111111110001000
1/8 16 1111111110001001
1/9 16 1111111110001010
1/A 16 1111111110001011
2/1 5 11010
2/2 8 11110111
2/3 10 1111110111
2/4 12 111111110110
2/5 15 111111111000010
2/6 16 1111111110001100
2/7 16 1111111110001101
2/8 16 1111111110001110
2/9 16 1111111110001111
2/A 16 1111111110010000
3/1 5 11011
3/2 8 11111000
3/3 10 1111111000
3/4 12 111111110111
3/5 16 1111111110010001
3/6 16 1111111110010010
3/7 16 1111111110010011
3/8 16 1111111110010100
3/9 16 1111111110010101
3/A 16 1111111110010110
4/1 6 111010
4/2 9 111110110
4/3 16 1111111110010111
4/4 16 1111111110011000
4/5 16 1111111110011001
4/6 16 1111111110011010
4/7 16 1111111110011011
4/8 16 1111111110011100
4/9 16 1111111110011101
4/A 16 1111111110011110
5/1 6 111011
5/2 10 1111111001
5/3 16 1111111110011111
5/4 16 1111111110100000
5/5 16 1111111110100001
5/6 16 1111111110100010
5/7 16 1111111110100011
5/8 16 1111111110100100
5/9 16 1111111110100101
5/A 16 1111111110100110
6/1 7 1111001
6/2 11 11111110111
6/3 16 1111111110100111
6/4 16 1111111110101000
6/5 16 1111111110101001
6/6 16 1111111110101010
6/7 16 1111111110101011
6/8 16 1111111110101100
6/9 16 1111111110101101
6/A 16 1111111110101110
7/1 7 1111010
7/2 11 11111111000
7/3 16 1111111110101111
7/4 16 1111111110110000
7/5 16 1111111110110001
7/6 16 1111111110110010
7/7 16 1111111110110011
7/8 16 1111111110110100
7/9 16 1111111110110101
7/A 16 1111111110110110
8/1 8 11111001
8/2 16 1111111110110111
8/3 16 1111111110111000
8/4 16 1111111110111001
8/5 16 1111111110111010
8/6 16 1111111110111011
8/7 16 1111111110111100
8/8 16 1111111110111101
8/9 16 1111111110111110
8/A 16 1111111110111111
9/1 9 111110111
9/2 16 1111111111000000
9/3 16 1111111111000001
9/4 16 1111111111000010
9/5 16 1111111111000011
9/6 16 1111111111000100
9/7 16 1111111111000101
9/8 16 1111111111000110
9/9 16 1111111111000111
9/A 16 1111111111001000
A/1 9 111111000
A/2 16 1111111111001001
A/3 16 1111111111001010
A/4 16 1111111111001011
A/5 16 1111111111001100
A/6 16 1111111111001101
A/7 16 1111111111001110
A/8 16 1111111111001111
A/9 16 1111111111010000
A/A 16 1111111111010001
B/1 9 111111001
B/2 16 1111111111010010
B/3 16 1111111111010011
B/4 16 1111111111010100
B/5 16 1111111111010101
B/6 16 1111111111010110
B/7 16 1111111111010111
B/8 16 1111111111011000
B/9 16 1111111111011001
B/A 16 1111111111011010
C/1 9 111111010
C/2 16 1111111111011011
C/3 16 1111111111011100
C/4 16 1111111111011101
C/5 16 1111111111011110
C/6 16 1111111111011111
C/7 16 1111111111100000
C/8 16 1111111111100001
C/9 16 1111111111100010
C/A 16 1111111111100011
D/1 11 11111111001
D/2 16 1111111111100100
D/3 16 1111111111100101
D/4 16 1111111111100110
D/5 16 1111111111100111
D/6 16 1111111111101000
D/7 16 1111111111101001
D/8 16 1111111111101010
D/9 16 1111111111101011
D/A 16 1111111111101100
E/1 14 11111111100000
E/2 16 1111111111101101
E/3 16 1111111111101110
E/4 16 1111111111101111
E/5 16 1111111111110000
E/6 16 1111111111110001
E/7 16 1111111111110010
E/8 16 1111111111110011
E/9 16 1111111111110100
E/A 16 1111111111110101
F/0 (ZRL) 10 1111111010
F/1 15 111111111000011
F/2 16 1111111111110110
F/3 16 1111111111110111
F/4 16 1111111111111000
F/5 16 1111111111111001
F/6 16 1111111111111010
F/7 16 1111111111111011
F/8 16 1111111111111100
F/9 16 1111111111111101
F/A 16 1111111111111110
Un ensemble de tables typiques pour le codage de la composante DC est donné en K.3.1. La spécification de ces tables
est la suivante:
Pour la table du Tableau K.3 (coefficients DC de luminance), les 16 bits qui spécifient la liste des longueurs de code de
la table sont:
X’00 01 05 01 01 01 01 01 01 00 00 00 00 00 00 00’
X’00 01 02 03 04 05 06 07 08 09 0A 0B’
Pour la table du Tableau K.4 (coefficients DC de chrominance), les 16 octets qui spécifient la liste des codes de
longueurs de la table sont:
X’00 03 01 01 01 01 01 01 01 01 01 00 00 00 00 00’
X’00 01 02 03 04 05 06 07 08 09 0A 0B’
Un ensemble de tables typiques pour le codage de la composante AC est donné en K.3.2. La spécification de ces tables
est la suivante:
Pour la table du Tableau K.5 (coefficients AC de luminance), les 16 octets qui spécifient la liste des longueurs de code
de la table sont:
X’00 02 01 03 03 02 04 03 05 05 04 04 00 00 01 7D’
X’01 02 03 00 04 11 05 12 21 31 41 06 13 51 61 07
X’22 71 14 32 81 91 A1 08 23 42 B1 C1 15 52 D1 F0
X’24 33 62 72 82 09 0A 16 17 18 19 1A 25 26 27 28
X’29 2A 34 35 36 37 38 39 3A 43 44 45 46 47 48 49
X’4A 53 54 55 56 57 58 59 5A 63 64 65 66 67 68 69
X’6A 73 74 75 76 77 78 79 7A 83 84 85 86 87 88 89
X’8A 92 93 94 95 96 97 98 99 9A A2 A3 A4 A5 A6 A7
X’A8 A9 AA B2 B3 B4 B5 B6 B7 B8 B9 BA C2 C3 C4 C5
X’C6 C7 C8 C9 CA D2 D3 D4 D5 D6 D7 D8 D9 DA E1 E2
X’E3 E4 E5 E6 E7 E8 E9 EA F1 F2 F3 F4 F5 F6 F7 F8
X’F9 FA’
Pour la table du Tableau K.6 (coefficients AC de chrominance), les 16 octets qui spécifient la liste des longueurs de code
de la table sont:
X’00 02 01 02 04 04 03 04 07 05 04 04 00 01 02 77’
X’00 01 02 03 11 04 05 21 31 06 12 41 51 07 61 71
X’13 22 32 81 08 14 42 91 A1 B1 C1 09 23 33 52 F0
X'15 62 72 D1 0A 16 24 34 E1 25 F1 17 18 19 1A 26
X'27 28 29 2A 35 36 37 38 39 3A 43 44 45 46 47 48
X'49 4A 53 54 55 56 57 58 59 5A 63 64 65 66 67 68
X'69 6A 73 74 75 76 77 78 79 7A 82 83 84 85 86 87
X'88 89 8A 92 93 94 95 96 97 98 99 9A A2 A3 A4 A5
X'A6 A7 A8 A9 AA B2 B3 B4 B5 B6 B7 B8 B9 BA C2 C3
X'C4 C5 C6 C7 C8 C9 CA D2 D3 D4 D5 D6 D7 D8 D9 DA
X'E2 E3 E4 E5 E6 E7 E8 E9 EA F2 F3 F4 F5 F6 F7 F8
X'F9 FA’
La séquence de test suivante de 256 bits (de forme hexadécimale) est structurée en sorte de tester le plus grand nombre
de branches de procédures du codeur et du décodeur:
Les Tableaux K.7 et K.8 donnent la liste, symbole par symbole, des opérations du codeur et du décodeur arithmétiques.
Dans ces tableaux, le compteur d'événement, EC, est la première entrée, suivie de la valeur de Qe utilisée pour le codage
et le décodage de cet événement. La décision D à coder (et décoder) est indiquée ensuite. La colonne libellée MPS
contient la signification du MPS; si elle est suivie d'un CE (dans la colonne «CX») la permutation condition-
nelle MPS/LPS a lieu lors du codage et du décodage de la décision (voir Figures D.3, D.4 et D.17). Les contenus des
registres A et C sont les valeurs avant le codage et le décodage de l'événement. ST est le nombre d'octets X’FF’ empilés
dans le codeur en attente de résolution de retenue. A noter que le registre A est toujours plus grand que X’7FFF’. (La
valeur initiale implicite est X’10000’.)
Dans le test du codeur, les octets de code de la colonne (B) figurent s'ils ont été obtenus durant le codage de l'événement
précédent. Si des octets additionnels suivent, ils ont également été obtenus durant le codage de l'événement précédent. Si
un octet figure dans la colonne Bx, l'octet précédent de la colonne B a été modifié par une retenue.
Dans le décodeur, les octets de code figurent s'ils ont été placés dans le registre de code juste avant l'événement EC.
Pour cette table, le nombre de bits codés est 240, y compris les bits supplémentaires de calage des données finales issues
du registre C. Quand le marqueur X’FFD9’ est accolé, la sortie a un total de 256 bits. La séquence effective de données
comprimées sortant du codeur est (sous forme hexadécimale):
EC D MPS CX Qe A C CT ST Bx B
(hexadécimal) (hexadécimal) (hexadécimal)
EC D MPS CX Qe A C CT ST Bx B
(hexadécimal) (hexadécimal) (hexadécimal)
EC D MPS CX Qe A C CT ST Bx B
(hexadécimal) (hexadécimal) (hexadécimal)
EC D MPS CX Qe A C CT ST Bx B
(hexadécimal) (hexadécimal) (hexadécimal)
EC D MPS CX Qe A C CT ST Bx B
(hexadécimal) (hexadécimal) (hexadécimal)
EC D MPS CX Qe A C CT ST Bx B
(hexadécimal) (hexadécimal) (hexadécimal)
EC D MPS CX Qe A C CT ST Bx B
(hexadécimal) (hexadécimal) (hexadécimal)
EC D MPS CX Qe A C CT B
(hexadécimal) (hexadécimal) (hexadécimal)
EC D MPS CX Qe A C CT B
(hexadécimal) (hexadécimal) (hexadécimal)
EC D MPS CX Qe A C CT B
(hexadécimal) (hexadécimal) (hexadécimal)
EC D MPS CX Qe A C CT B
(hexadécimal) (hexadécimal) (hexadécimal)
EC D MPS CX Qe A C CT B
(hexadécimal) (hexadécimal) (hexadécimal)
EC D MPS CX Qe A C CT B
(hexadécimal) (hexadécimal) (hexadécimal)
EC D MPS CX Qe A C CT B
(hexadécimal) (hexadécimal) (hexadécimal)
La Figure K.5 indique la pondération des échantillons voisins pour des filtres passe-bas simples unidimensionnels,
vertical et horizontal. La sortie du filtre doit être normalisée par la somme des pondérations des échantillons voisins.
1 2 1 1
TISO1770-93/d115
L'échantillon central de la Figure K.5 doit être aligné sur la colonne de gauche ou la ligne du haut de l'image à haute
résolution lors du calcul de la colonne de gauche ou de la rangée du bas de l'image à basse résolution. Les valeurs des
bords sont obtenues en donnant à des échantillons situés en dehors des limites de l'image les valeurs des limites de
l'image.
Si l'image sous-échantillonnée a une largeur ou une longueur impaire, la dimension impaire est augmentée d'une unité
par copie de l'échantillon du bord droit ou de la ligne du bas, avant le sous-échantillonnage.
Le codeur sans perte est destiné au codage absolument sans perte. Le processus de codage sans perte est nettement moins
efficace que les processus basés DCT, pour des distorsions proches ou au-dessus du seuil de visibilité.
Le codage sans perte avec transformation point à l'entrée du codeur sans perte permet une forme de codage ayant des
pertes très limitées. (Après la transformation point à l'entrée, le codeur est encore «sans perte».) Comme la DCT est
destinée au codage avec perte, le choix des conditions d'utilisation de ces deux techniques peut présenter certaines
difficultés.
Le codage sans perte avec transformation point à l'entrée, est destiné aux applications auxquelles ne s'appliquent pas les
techniques de codage DCT. Figurent parmi celles-ci:
– le véritable codage sans perte, à précision spécifiée;
– le codage avec perte, avec une limite d'erreur définie avec précision;
– la progression hiérarchique vers un état final véritablement sans perte.
Si le codage sans perte avec transformation point à l'entrée est utilisé dans les applications pour lesquelles le
codage DCT serait efficace, les résultats seront nettement moins satisfaisants. Par exemple, une distorsion des contours
visibles apparaît en général quand la précision de la composante de luminance est réduite à 6 bits. Pour des données
d'image normales, ceci se produit à des débits binaires bien supérieurs à ceux pour lesquels la DCT donne des sorties
visuellement indiscernables de la source.
En codage progressif des coefficients DCT, deux procédures complémentaires sont définies pour la décomposition du
tableau de 8 ×€8 coefficients DCT: la sélection spectrale et les approximations successives. La sélection spectrale divise
le tableau en zigzag des coefficients DCT en «bandes», une bande étant codée à chaque balayage. Les approximations
successives codent les coefficients avec une précision réduite dans le premier balayage, puis augmentée d'un bit à chaque
balayage suivant.
Une même DCT directe est calculée pour ces procédures. Quand tous les coefficients sont codés en pleine précision,
la DCT est la même qu'en mode séquentiel. De même que le codage DCT séquentiel, le codage progressif des
coefficients DCT est donc destiné aux applications nécessitant une très bonne compression, à niveau donné de distorsion
visuelle.
La technique de codage progressif la plus simple est la sélection spectrale. Cette simplicité pourra conduire, pour
certaines applications – et ce malgré la progression limitée réalisable – à utiliser uniquement la sélection spectrale. A
noter, toutefois, que l'absence de bandes haute fréquence conduit généralement – à débit binaire donné – à une qualité
d'image nettement inférieure, aux stades intermédiaires, à celle qui serait obtenue avec les progressions plus générales.
L'efficacité globale nette de codage est généralement comparable à celle du DCT séquentiel, ou légèrement inférieure.
Un système progressif beaucoup plus souple est obtenu, au prix d'une complexité supplémentaire, en ajoutant les
approximations successives à la progression par sélection spectrale. A débit binaire donné, ce système donne une qualité
d'image nettement meilleure que la sélection spectrale seule. L'efficacité globale nette de codage est généralement
comparable à celle du DCT séquentiel, ou légèrement meilleure.
La progression hiérarchique donne une succession de sorties de résolution spatiale croissante, permettant une
amélioration de la qualité d'image à résolution spatiale donnée. Les versions DCT et spatiale de la progression
hiérarchique sont autorisées et le codage progressif des coefficients DCT peut être utilisé dans une trame de la
progression hiérarchique DCT.
La progression hiérarchique DCT est destinée aux applications nécessitant une très bonne compression à niveau donné
de distorsion visuelle; la progression hiérarchique spatiale est destinée aux applications nécessitant une progression
simple avec un stade final véritablement sans perte. La Figure K.6 donne deux exemples illustrant ces progressions
hiérarchiques de base.
TISO1780-93/d116
Si une progression hiérarchique DCT utilise une résolution spatiale réduite, les premiers stades de la progression peuvent
avoir, à débit binaire donné, une meilleure qualité d'image que les premiers stades d'un codage progressif non
hiérarchique des coefficients DCT. Toutefois, au point où la distorsion entre la source et la sortie devient indiscernable,
l'efficacité de codage réalisée avec une progression hiérarchique DCT est généralement nettement inférieure à celle du
codage progressif non hiérarchique des coefficients DCT.
Bien que la progression DCT hiérarchique soit destinée au codage progressif sans perte, un stade de codage différentiel
spatial final peut être ajouté: la sortie peut alors être presque sans perte, la seule limitation résultant des différences
entre les réalisations du codeur et du décodeur IDCT. Comme les réalisations IDCT peuvent différer de façon
significative, un véritable codage sans perte après une progression hiérarchique DCT ne peut pas être garanti. Une
solution – importante – est donc d'utiliser la transformation point d'entrée du stade de codage différentiel sans perte final
pour réduire la précision de l'entrée différentielle. On limite ainsi la différence entre la source et la sortie, à un coût en
bits codés, nettement inférieur à celui du codage de la différence spatiale en pleine précision.
Si la progression sans perte est requise, une progression hiérarchique très simple peut être utilisée, dans laquelle le
codage sans perte spatial avec transformation point à l'entrée est utilisé en un premier stade, suivi d'un ou plusieurs
stades de codage différentiel spatial. Le premier stade doit être presque sans perte, en sorte que les bits de faible poids
tronqués par la transformation point soient essentiellement aléatoires – autrement l'efficacité de compression serait
dégradée par rapport à celle du codage sans perte non progressif.
K.8 Suppression des discontinuités entre blocs dans les images décodées (effet de blocs)
Une technique simple existe pour supprimer les discontinuités entre blocs (dites «effet de blocs») pouvant se présenter
dans des images comprimées par des techniques DCT.
Quelques-uns des premiers coefficients DCT basse fréquence (cinq dans cet exemple) sont prédits à partir des neuf
valeurs DC du bloc et des huit blocs les plus voisins, les valeurs ainsi prédites étant utilisées pour supprimer les effets de
la division en blocs dans les zones régulières de l'image.
Les équations de prédiction de ces cinq premiers coefficients AC de la séquence en zigzag sont obtenues comme suit:
K.8.1 Prédiction AC
Le champ d'échantillons, dans un tableau 3 × 3 de blocs (chaque bloc contenant un tableau 8 × 8 d'échantillons) est
modélisé par une forme polynomiale bidimensionnelle du second degré:
Les neuf coefficients A1 à A9 sont déterminés de façon unique, en imposant la contrainte que la moyenne de P(x,y) sur
chacun des neuf blocs, doit donner les valeurs DC correctes.
L'application de la DCT au champ quadratique de prédiction des échantillons du bloc central donne une prédiction des
coefficients AC basse fréquence indiqués Figure K.7.
DC x x
x x
TISO1790-93/d117
La mise à l'échelle des coefficients AC prédits est conforme à la normalisation DCT définie en A.3.3.
Les équations de prédiction peuvent être ramenées à une forme utilisant les valeurs quantifiées des coefficients DC, les
coefficients AC quantifiés étant calculés en utilisant une arithmétique entière. Une mise à l'échelle des coefficients AC
quantifiés doit toutefois être effectuée, en sorte que les coefficients prédits aient une précision binaire fractionnelle.
Les coefficients des équations de prédiction sont d'abord multipliés par 32 et arrondis au plus proche entier:
1,13885 × 32 = 36
0,27881 × 32 = 39
0,16213 × 32 = 35
Les facteurs multiplicatifs sont ensuite multipliés par le rapport des facteurs de quantification DC et AC, puis arrondis de
façon appropriée. La normalisation définie pour la DCT introduit un autre facteur 8 dans les valeurs DC non quantifiées.
Les coefficients AC quantifiés prédits sont donc donnés en fonction des valeurs DC quantifiées, par les équations
ci-après. A noter que si les valeurs DC sont multipliées (par exemple) par un facteur 4, les prédictions AC auront deux
bits fractionnels de précision relative, par rapport aux coefficients DCT quantifiés.
où QDCx et QACxy sont les valeurs des coefficients DC et AC, quantifiées et mises à l'échelle. La constante Rd est
ajoutée pour obtenir un arrondi correct dans la division. Rd a la valeur 128 pour les prédictions positives et –128 pour
les prédictions négatives.
Les valeurs prédites ne doivent pas supplanter les valeurs codées. Elles doivent être mises à zéro pour des coefficients
déjà non nuls. Les prédictions doivent être écrêtées si elles dépassent une valeur qui serait quantifiée à une valeur non
nulle pour la précision courante en approximations successives.
Pour une progression où le paramètre Al de position binaire des approximations successives, est mis dans un premier
stade à 3, une quantification uniforme de la DCT donne les niveaux suivants de quantification et de déquantification,
pour des balayages successifs en approximations successives, comme indiqué à la Figure K.8.
La colonne de gauche libellée «Al» donne la position binaire spécifiée dans l'en-tête de balayage. Les valeurs absolues
des coefficients DCT quantifiés sont donc divisées par 2Al lors de ce balayage.
Concernant le balayage final (Al = 0), les points marqués «t» sont des valeurs seuil, alors que les points marqués «r»
sont des valeurs reconstruites. La sortie non quantifiée est obtenue en multipliant l'échelle horizontale de la Figure K.8
par la valeur de quantification.
L'intervalle de quantification pour une valeur nulle du coefficient est indiqué par la ligne en position basse. Lorsque la
valeur du paramètre Al de position binaire augmente, un intervalle de quantification «tout à zéro» se développe autour
de la valeur nulle du coefficient DCT. Dans le cas limite d'un facteur multiplicatif très grand, l'intervalle «tout à zéro» est
deux fois plus grand que le reste de l'intervalle de quantification.
Al
3 r¯t r t¯r
2 r¯t x r¯t r t ¯r x t ¯r
0 r ¯t ¯ r¯ t ¯ r¯ t¯ r¯ t ¯ r¯ t¯ r ¯ t ¯ r¯ t¯ r ¯ t _r _t ¯ r¯ t¯ r ¯ t¯ r ¯ t ¯ r ¯ t¯ r ¯ t ¯ r ¯ t¯ r¯ t ¯r
–8 –7 –6 –5 –4 –3 –2 –1 0 +1 +2 +3 +4 +5 +6 +7 +8
T0812990-93/d118
Valeurs des coefficients DCT quantifiés
Deux stratégies de reconstruction sont présentées. Les points «r» sont obtenus en appliquant les règles normales
d'arrondi de la DCT à une sortie complète pleine précision. Cette stratégie semble donner une meilleure qualité d'image
avec des dispositifs d'affichages à large bande. Les points «x» sont obtenus par une autre stratégie de reconstruction, qui
tend à donner de meilleures images avec des dispositifs d'affichages à moins large bande. «x» et «r» sont identiques
pour Al = 0. Il appartient au concepteur du système de déterminer la stratégie appropriée au dispositif d'affichage utilisé.
L'exemple qui suit montre la différence entre le décalage arithmétique à droite de Pt et la division par 2Pt.
Après décalage, le niveau DC a des valeurs comprises entre +127 et –128. Considérons des valeurs voisines de zéro
(après décalage) et le cas Pt = 1:
La différence essentielle est la troncature de la précision: la division tronque la valeur absolue; le décalage arithmétique
tronque le LSB. Une division par 2 donnerait une quantification non uniforme des valeurs DC; le décalage arithmétique
à droite est donc utilisé.
Pour les valeurs positives, la division par 2 et le décalage arithmétique à droite de 1 sont identiques. Le décalage
arithmétique à droite de 1 est en effet une division par 2 lorsque la transformation point est opérée avant le décalage de
niveau.
Annexe L
Brevets
(Cette annexe ne fait pas partie intégrante de la présente Recommandation | Norme internationale)
La publication de la présente Spécification n'implique aucune prise de position quant à la validité dudit titre de propriété
industrielle ou de tout autre brevet en connexion avec celui-ci. Toutefois, pour chacun des brevets mentionnés dans la
présente annexe, le titulaire du brevet a déposé auprès du Groupe de travail sur les technologies de l'information (ITTF)
[information technology task force] et du TSB une déclaration aux termes de laquelle il est disposé à concéder une
licence de ses droits, selon des termes et conditions raisonnables et non discriminatoires, à tous ceux qui exprimeront le
désir d'obtenir une telle licence.
La liste de brevets devra être mise à jour, le cas échéant, lors de la publication de toutes les révisions de la
Recommandation | Norme internationale.
US 4.652.856, 4 février 1986, IBM, MOHIUDDIN (K.M.) et RISSANEN (J.J.): Code arithmétique multi-
alphabets sans multiplication (A Multiplication-free Multi-Alphabet Code).
US 4.369.463, 18 janvier 1983, IBM, ANASTASSIOU (D.) et MITCHELL (J.L.): Compression d'image à
niveaux de gris avec mots de code fonction de l'historique de l'image (Grey Scale Image Compression with
Code Words a Function of Image History).
US 4.749.983, 7 juin 1988, IBM, LANGDON (G.): Compression de signaux à plusieurs niveaux
(Compression of Multilevel Signals).
US 4.935.882, 19 juin 1990, IBM, PENNEBAKER (W.B.) et MITCHELL (J.L): Adaptation de probabilité
pour les codeurs arithmétiques (Probability Adaption for Arithmetic Coders).
US 4.905.297, 27 février 1990, IBM, LANGDON (G.G.) Jr., MITCHELL (J.L.), PENNEBAKER (W.B.) et
RISSANEN (J.J.): Système de codage et de décodage arithmétique (Arithmetic Coding Encoder and Decoder
System).
US 4.973.961, 27 novembre 1990, AT&T, CHAMZAS (C.), DUTTWEILER (D.L.): Méthode et dispositif de
contrôle de retenue pour le codage entropique arithmétique (Method and Apparatus for Carry-over Control in
Arithmetic Entropy Coding).
US 5.025.258, 18 juin 1991, AT&T, DUTTWEILER (D.L): Estimateur de probabilité adaptative pour le
codage/décodage entropique (Adaptive Probability Estimator for Entropy Encoding/Decoding).
US 5.099.440, 24 mars 1992, IBM, PENNEBAKER (W.B.) et MITCHELL (J.L.): Adaptation des probabilités
pour les codeurs arithmétiques (Probability Adaptation for Arithmetic Coders).
Demande de brevet japonais 2-46275, 26 février 1990, MEL ONO (F.), KIMURA (T.), YOSHIDA (M.) et
KINO (S.): Système de codage (Coding System).
L'utilisation des brevets suivants peut être nécessaire pour la mise en oeuvre de l'un des processus hiérarchiques spécifiés
dans l'Annexe H, utilisé avec une trame finale sans perte.
US 4.665.436, 12 mai 1987, EI OSBORNE (J.A.) et SEIFFERT (C.): Transmission de signal à bande étroite
(Narrow Bandwith Signal Transmission).
Aucun autre brevet dont l'utilisation est nécessaire pour la mise en oeuvre de l'un des autres processus spécifiés dans les
Annexes F, G, H ou J n'a été identifié à la date de publication de la présente Spécification.
Annexe M
Bibliographie
(Cette annexe ne fait pas partie intégrante de la présente Recommandation | Norme internationale)
RABBANI (M.) et JONES (P.): Techniques de compression d'images numériques (Digital Image Compression
Techniques), Tutorial Texts in Optical Engineering, Vol. TT7, SPIE Press, 1991.
HUDSON (G.), YASUDA (H.) et SEBESTYEN (I.): La normalisation internationale d'une technique de compression
d'images fixes (The International Standardization of a Still Picture Compression Technique), Proc. of IEEE Global
Telecommunications Conference, p. 1016-1021, 1988.
LEGER (A.), MITCHELL (J.) et YAMAZAKI (Y.): Evaluation d'un algorithme de compression d'images fixes en vue
de la normalisation internationale (Still Picture Compression Algorithm Evaluated for International Standardization),
Proc. of the IEEE Global Telecommunications Conference, p. 1028-1032, 1988.
WALLACE (G.), VIVIAN (R.) et POULSEN (H.): Résultats de tests subjectifs d'algorithmes de compression d'images
fixes en vue de la normalisation internationale (Subjective Testing Results for Still Picture Compression Algorithms for
International Standardization), Proc. of the IEEE Global Telecommunications Conference, p. 1022-1027, 1988.
MITCHELL (J.L.) et PENNEBAKER (W.B.): Evolution de la norme de compression de données en couleur JPEG
(Evolving JPEG Colour Data Compression Standard), Standards for Electronic Imaging Systems, M. Nier, M.E.
Courtot, Editors, SPIE, Vol. CR37, p. 68-97, 1991.
WALLACE (G.K.): La norme de compression d'images fixes JPEG (The JPEG Still Picture Compression Standard),
Communications of the ACM, Vol. 34, no 4, p. 31-44, 1991.
NETRAVALI (A.N.) et HASKELL (B.G.): Images numériques: représentation et compression (Digital Pictures:
Representation and Compression), Plenum Press, New York 1988.
PENNEBAKER (W.B.) et MITCHELL (J.L.): JPEG: Still Image Data Compression Standard, Van Nostrand Reinhold,
New York 1993.
NARASINHA (N.J.) et PETERSON (A.M.): Sur le calcul de la transformation en cosinus discret (On the Computation
of the Discrete Cosine Transform), IEEE Trans. on Communications, Vol. COM-26, no 6, p. 966-968, 1978.
DUHAMEL (P.) et GUILLEMOT (C.): Calcul de la transformation polynomiale de la DCT 2-D (Polynomial Transform
Computation of the 2-D DCT), Proc. IEEE ICASSP-90, p. 1515-1518, Albuquerque, New Mexico 1990.
FEIG (E.): Un algorithme DCT rapide adapté (A Fast Scaled DCT Algorithm), in Image Processing Algorithms and
Techniques, Proc. SPIE, Vol. 1244, K.S. Pennington et R. J. Moorhead II, Editeurs, p. 2-13, Santa Clara, California,
1990.
HOU (H.S.): Un algorithme récursif rapide de calcul de la transformée en cosinus discret (A Fast Recursive Algorithm
for Computing the Discrete Cosine Transform), IEEE Trans. on Acoust., Speech and Signal Processing, Vol. ASSP-35,
no 10, p. 1455-1461.
LEE (B.G.): A New Algorithm to Compute the Discrete Cosine Transform, IEEE Trans. on Acoust., Speech and Signal
Processing, Vol. ASSP-32, no 6, p. 1243-1245, 1984.
LINZER (E.N.) et FEIG (E.): Nouveaux algorithmes DCT et DCT échelonnée pour architecture fusionnée de
multiplication/addition (New DCT and Scaled DCT Algorithms for Fused Multiply/Add Architectures), Proc. IEEE
ICASSP-91, p. 2201-2204, Toronto, Canada, 1991.
VETTERLI (M.) et NUSSBAUMER (H.J.): Algorithmes simples FTT et DCT avec nombre d'opérations réduit (Simple
FFT and DCT Algorithms with Reduced Number of Operations), Signal Processing, 1984.
VETTERLI (M.): Transformation en cosinus discret 2-D rapide (Fast 2-D Discrete Cosine Transform), Proc. IEEE
ICASSP-85, p. 1538-1541, Tampa, Floride, 1985.
ARAI (Y.), AGUI (T.) et NAKAJIMA (M.): Un schéma rapide DCT-SQ pour les images (A Fast DCT-SQ Scheme for
Images), Trans. of IEICE, Vol. E.71, no 11, p. 1095-1097, 1988.
SUEHIRO (N.) et HATORI (M.): Algorithmes rapides pour la DFT et d'autres transformations sinusoïdales (Fast
Algorithms for the DFT and other Sinusoidal Transforms), IEEE Trans. on Acoust., Speech and Signal Processing,
Vol. ASSP-34, no 3, p. 642-644, 1986.
GRANRATH (D.J.): Rôle des modèles visuels humains dans le traitement de l'image (The role of human visual models
in image processing), Proceedings of the IEEE, Vol. 67, p. 552-561, 1981.
LOHSCHELLER (H.): Transmission progressive de l'image, adaptée à la vision (Vision adapted progressive image
transmission), Proceedings of EUSIPCO, Vol. 83, p. 191-194, 1983.
LOHSCHELLER (H.) et FRANKE (U.): Codage d'images en couleur – Optimisation de l'algorithme et réalisation
technique (Colour picture coding – Algorithm optimization and technical realization), Frequenze, Vol. 41, p. 291-299,
1987.
LOHSCHELLER (H.): Un système de communication d'images à adaptation subjective (A subjectively adapted image
communication system), IEEE Trans. on Communications, Vol. COM-32, p. 1316-1322, 1984.
PETERSON (H.A.) et al: Quantification des composantes d'image en couleur dans le domaine DCT (Quantization of
colour image components in the DCT domain), SPIE/IS&T 1991 Symposium on Electronic Imaging Science and
Technology, 1991.
PENNEBAKER (W.B.), MITCHELL (J.L.), LANGDON (G.) Jr. et ARPS (R.B.): Une revue des principes de base du
codeur arithmétique binaire à codage Q (An Overview of the Basic Principles of the Q-Coder Binary Arithmetic Coder),
IBM J. Res. Develop., Vol. 32, no 6, p. 717-726, 1988.
MITCHELL (J.L.) et PENNEBAKER (W.B.): Procédures optimales de codage arithmétique matériel et logiciel pour le
codeur arithmétique binaire à codage Q (Optimal Hardware and Software Arithmetic Coding Procedures for the
Q-Coder Binary Arithmetic Coder), IBM J. Res. Develop., Vol. 32, no 6, p. 727-736, 1988.
PENNEBAKER (W.B.) et MITCHELL (J.L.): Estimation de probabilité pour le codeur Q (Probability Estimation for the
Q-Coder), IBM J. Res. Develop., Vol. 32, no 6, p. 737-752, 1988.
MITCHELL (J.L.) et PENNEBAKER (W.B.): Mises en oeuvre logicielles du codeur Q (Software Implementations of
the Q-Coder), IBM J. Res. Develop., Vol. 32, no 6, p. 753-774, 1988.
ARPS (R.B.), TRUONG (T.K.), LU (D.J.), PASCO (R.C.) et FRIEDMAN (T.D.): Un circuit VLSI polyvalent pour la
compression adaptative des images en deux tons (A Multi-Purpose VLSI Chip for Adaptive Data Compression of
Bilevel Images), IBM J. Res. Develop., Vol. 32, no 6, p. 775-795, 1988.
ONO (F.), YOSHIDA (M.), KIMURA (T.) et KINO (S.): Codage arithmétique de type soustractif avec permutation
conditionnelle MPS/LPS (Subtraction-type Arithmetic Coding with MPS/LPS Conditional Exchange), Annual Spring
Conference of IECED, Japan, D-288, 1990.
DUTTWEILER (D.) et CHAMZAS (C.): Estimation de probabilité dans les codeurs entropiques arithmétique et
Huffman adaptatif (Probability Estimation in Arithmetic and Adaptive-Huffman Entropy Coders), submitted to IEEE
Trans. on Image Processing.
JONES (C.B.): Un système de codage efficace des séquences source longues (An Efficient Coding System for Long
Source Sequences), IEEE Trans. Inf. Theory,Vol. IT-27, p. 280-291, 1981.
LANGDON (G.): Méthode de limitation de la retenue dans une chaîne arithmétique codée FIFO (Method for Carry-over
Control in a Fifo Arithmetic Code String), IBM Technical Disclosure Bulletin, Vol. 23, no 1, p. 310-312, 1980.