Format Jpeg d'Ibm
Cette section présente le format d'images Joint Photographic Experts Group (JPEG) d'Ibm utilisé par Up ! Joint Photographic Experts Group.
Une image au format Joint Photographic Experts Group (JPEG) d'Ibm est encodée avec la convention de Intel i.e. Little Endian.
La résolution est variable.
Les images sont uniquement en couleurs vraies, voire en niveaux de gris.
Il existe quatre méthodes de compression reposant sur deux algorithmes :
- Séquentielle altérant l'image d'origine.
- Progressive altérant l'image d'origine.
- Sans altération de l'image d'origine.
- Hiérarchique altérant ou non l'image d'origine.
Les méthodes altérant l'image d'origine utilise la Transformation de Fourier Discrète (TFD).
La méthode progressive permet un affichage progressif de l'image lors de son téléchargement, un peu comme l'entrelaçage de Graphics Interchange Format (GIF).
La méthode hiérarchique permet un affichage progressif de l'image lors de son téléchargement, un peu comme dans Google Earth.
Elle n'est pas supportée par Up ! Jpeg.
Algorithmes de compression Jpeg
Compression destructive
Le principe de l'algorithme de compression avec altération de l'image d'origine est le suivant :
- Découpage de l'image en carreaux de 8*8 pixels.
Du haut vers le bas et de la gauche vers la droite.
Au besoin, les carreaux de la dernière colonne et de la dernière ligne sont complétés par duplication des pixels respectifs.
- Conversion des couleurs.
Passage du repère chromatique RGB à celui de YCbCr. La raison est que l'oeil est moins sensible aux variations de couleurs qu'aux variations de luminosité. Ceci permet donc de plus compresser les composantes de chrominance que celle de la luminance.
Nous avons trois composantes :
- Transformation spectrale.
Application à chaque matrice de composantes de la Transformation de Fourier Discrète (TFD) pour obtenir des matrices spectrales de l'image.
- Normalisation des matrices spectrales.
L'objectif est réduire les valeurs de chaque matrice par application d'une table de quantification.
Le premier coefficient d'une matrice matrice spectrale normalisée est appelé DC. Les 63 autres coefficients de la matrice sont appelés AC.
- Prédiction.
Le coefficient DC d'une matrice spectrale normalisée du carreau précédent est soustrait du coefficient DC de la matrice spectrale normalisée du carreau courant.
La prédiction est réalisée composante par composante.
L'objectif est d'encoder que la différence pour que la compression soit plus efficace.
- Linéarisation.
Pour chaque matrice spectrale normalisée, les 63 coefficients AC sont parcourus en zig-zag, comme le motif hachuré montant, en alternant les sens de montées et de descentes.
Ceci permet de les classer par ordre d'importance.
- Encodage.
Pour chaque matrice spectrale normalisée, le coefficient DC est encodé avec soit la méthode de :
- Codage d'Huffman.
- Codage arithmétique.
Pour chaque matrice spectrale normalisée, les 63 coefficients AC sont encodé avec soit la méthode de :
- Codage d'Huffman.
- Codage arithmétique.
La méthode de codage arithmétique n'est pas supportée par Up ! Jpeg parce qu'Ibm a déposé des brevets qui ne sont pas libres d'usage.
La précision des calculs est sur 8 ou 12 bits.
Toutes les valeurs des composantes ne sont pas forcément conservés. Un échantillonnage peut être appliqué pour, par exemple, conserver toutes les informations de luminance et seulement une information sur deux de chrominance.
Compression non destructive
Le principe de l'algorithme de compression sans alération de l'image d'origine est le suivant :
- Parcours des pixels.
Du haut vers le bas et de la gauche vers la droite.
- Conversion des couleurs.
Passage du repère chromatique RGB à celui de YCbCr.
Nous avons trois composantes :
- Prédiction.
La valeur d'un composant est transformée à partir des valeurs de :
- Pixel précédent en colonne sur la même ligne Ra.
- Pixel précédent en ligne sur la même colonne Rb.
- Pixel précédent en ligne et en colonne Rc.
L'objectif est d'encoder que la différence pour que la compression soit plus efficace. Voici les transformations possibles :
- Ra.
- Rb.
- Rb.
- Ra+Rb-Rc.
- Ra+(Rb-Rc)/2.
- Rb+(Ra-Rc)/2.
- (Ra+Rb)/2.
- Encodage.
Pour chaque composant, la valeur transformée est encodée avec la méthode soit de :
- Codage d'Huffman.
- Codage arithmétique.
La méthode de codage arithmétique n'est pas supportée par Up ! Jpeg parce qu'Ibm a déposé des brevets qui ne sont pas libres d'usage.
La précision des calculs varie de 2 à 16 bits.
Blocs du flux Jpeg
Le format Joint Photographic Experts Group (JPEG) est flux composé d'une succession de blocs caractérisés par un identifiant.
Voici les codifications des blocs gérés par :
Identifiant | Description |
SOI | Début d'image. |
APP | Informations sur l'image. |
COM | Commentaire sur d'image. |
SOF | Début des données d'image. |
DHT | Définition d'une table Huffman. |
DQT | Définition d'une table de quantification. |
DRI | Définition des périodes de reprises. |
SOS | Début d'une partie des données de l'image. |
RST | Reprise dans une partie de l'image. |
EOI | Fin d'image. |
La première propriété du bloc est sa taille, ce qui permet de le sauter si son type n'est pas géré.
Bloc Début d'image - SOI
Voici les propriétés du bloc :
Propriété | Taille en octets | Description |
Etiquette | 2. | 0xFFD8. |
Bloc Informations sur l'image - APP
Voici les propriétés du bloc :
Propriété | Taille en octets | Description |
Etiquette | 2. | Etiquette du bloc. |
Taille | 2. | Taille non signée du bloc. |
Bloc APP0
Voici les propriétés du bloc :
Propriété | Taille en octets | Description |
Identifiant | 5. | JFIF. |
Version | 2. | Version d'encodage. |
Unite | 1. | Unité de mesure. |
NbPixelsX | 2. | Nombre de pixels non signé en abscisse. |
NbPixelsY | 2. | Nombre de pixels non signé en ordonnée. |
LargeurPixels | 1. | Largeur non signée de l'icône de l'image en pixels. |
HauteurPixels | 1. | Hauteur non signée de l'icône de l'image en pixels. |
Icone | Variable. | Pixels de l'icône de l'image en RGB sur 8 bits. |
Les valeurs possibles de Unite sont :
- 0 pour pas d'unité. La résolution est alors 72 Dots Per Inch (DPI).
- 1 pour le pouce.
- 2 pour le centimètre.
Bloc APP1-APP15
Ces blocs ne sont pas supportés par Up ! Jpeg.
Bloc Commentaire sur l'image - COM
Voici les propriétés du bloc :
Propriété | Taille en octets | Description |
Etiquette | 2. | Etiquette du bloc - 0xFFFE. |
Taille | 2. | Taille non signée du bloc. |
Commentaire | Variable. | Commentaire. |
La taille de la propriété Commentaire est donnée par la valeur de la propriété Taille. Le commentaire est écrit en Ascii.
Bloc Début des données d'image - SOF
Voici les propriétés du bloc :
Propriété | Taille en octets | Description |
Etiquette | 2. | Etiquette du bloc. |
Taille | 2. | Taille non signée du bloc. |
Precision | 1. | Précision des calculs. |
HauteurPixels | 2. | Hauteur non signée de l'image en pixels. |
LargeurPixels | 2. | Largeur non signée de l'image en pixels. |
NbComposants | 1. | Nombre de composants. |
TableComposants | Variable. | Table des composants. |
Les valeurs possibles de Etiquette sont :
- 0xFFC0 pour la compression destructive de base avec l'encodage Huffman.
Il y a au plus deux tables Huffman et deux tables de quantification.
La précision des calculs est sur 8 bits.
- 0xFFC1 pour la compression destructive étendue avec l'encodage Huffman.
Il y a au plus quatre tables Huffman et quatre tables de quantification.
La précision des calculs est sur 8 ou 12 bits.
- 0xFFC2 pour la compression destructive progressive avec l'encodage Huffman.
Il y a au plus quatre tables Huffman et quatre tables de quantification.
La précision des calculs est sur 8 ou 12 bits.
- 0xFFC3 pour la compression non destructive avec l'encodage Huffman.
Il y a au plus quatre tables Huffman et quatre tables de quantification.
La précision des calculs est sur 8 ou 12 bits.
Voici les propriétés d'un élément de la table des composants :
Propriété | Taille en octets | Description |
IdentifiantComposant | 1. | Identifiant unique du composant. |
IdentifiantTableHuffman | 0,5. | Identifiant de la table Huffman. |
Echantillonnage | 0,5. | Echantillonnage du composant. |
IdentifiantQuantificateur | 1. | Identifiant de la table de quantification. |
Les valeurs possibles de Echantillonnage sont :
- 44 pour conserver tous les pixels.
- 24 pour conserver un pixel sur deux horizontalement.
- 14 pour conserver un pixel sur quatre horizontalement.
- 22 pour conserver un pixel sur deux horizontalement et un pixel sur deux verticalement.
- 12 pour conserver un pixel sur quatre horizontalement et un pixel sur deux verticalement.
Bloc Définition d'une table Huffman - DHT
Voici les propriétés du bloc :
Propriété | Taille en octets | Description |
Etiquette | 2. | Etiquette du bloc - 0xFFC4. |
Taille | 2. | Taille non signée du bloc. |
Cible | 0,5. | Cible. |
IdentifiantTableHuffman | 0,5. | Identifiant de la table Huffman. |
LargeurPixels | 2. | Largeur non signée de l'image en pixels. |
TableNbCodes | 16*1. | Table du nombre de codes par longueur. |
TableValeurs | Variable. | Table des valeurs des codes. |
La taille de la table TableValeurs est donnée par le cumul des valeurs de la table TableNbCodes. Cette dernière comporte 16 éléments.
Bloc Définition d'une table de quantification - DQT
Voici les propriétés du bloc :
Propriété | Taille en octets | Description |
Etiquette | 2. | Etiquette du bloc - 0xFFDB. |
Taille | 2. | Taille non signée du bloc. |
Precision | 0,5. | Precision des éléments. |
IdentifiantTableQuantification | 0,5. | Identifiant de la table de quantification. |
TableValeurs | 64 ou 128. | Table des valeurs de quantification. |
Les valeurs possibles de Precision sont :
- 0 pour des éléments de la table sur un octet non signé.
- 1 pour des éléments de la table sur deux octets non signés.
Bloc Définition des reprises - DRI
Voici les propriétés du bloc :
Propriété | Taille en octets | Description |
Etiquette | 2. | Etiquette du bloc - 0xFFDD. |
Taille | 2. | Taille non signée du bloc. |
TailleIntervalle | 2. | Taille de l'intervalle de reprise. |
Le Minimum Code Unit (MCU) est la plus petite combinaison possible des composants au regard de l'échantillonnage. Un peu comme le Plus Petit Commun Multiple (PPCM) en mathématique.
Le mode reprise est activé par la présence de la marque DRI. En ce cas, quand l'image est mal encodée, il est possible de faire l'impasse sur la partie détruite et de reprendre le décodage à la marque de reprise suivante.
La valeur de la propriété TailleIntervalle spécifie le nombre de MCUs distançant les marques de reprise.
Bloc Partie des données de l'image - SOS
Voici les propriétés du bloc :
Propriété | Taille en octets | Description |
Etiquette | 2. | Etiquette du bloc - 0xFFDA. |
Taille | 2. | Taille non signée du bloc. |
NbComposants | 1. | Nombre de composants. |
TableComposants | Variable. | Table des composants. |
DebutZigZag | 1. | Début du zig-zag. |
FinZigZag | 1. | Fin du zig-zag. |
PrecisionPrecedente | 0,5. | Précision de la bande précédente. |
PrecisionCourante | 0,5. | Précision de la bande courante. |
Les données de l'image peuvent être découpées en une ou plusieurs parties. Dans une partie :
- Les composants peuvent être entrelacés ou non.
- Tous les coefficients DC et AC peuvent être présents ou seulement une bande du parcours en zig-zag.
Les bandes doivent alors se prolonger. L'intervalle de la bande est donné par les valeurs des propriétés DebutZigZag et FinZigZag.
- Toutes les valeurs des coefficients DC et AC peuvent être présents ou seulement une bande de bits.
Les bandes doivent alors se prolonger. L'intervalle de la bande est donné par les valeurs des propriétés PrecisionPrecedente et PrecisionCourante.
Bloc Reprise dans une partie de l'image - RST
Voici les propriétés du bloc :
Propriété | Taille en octets | Description |
Etiquette | 2. | Etiquette du bloc. |
Les valeurs possibles de Etiquette sont :
- 0xFFD0 pour le point de reprise 0.
- 0xFFD1 pour le point de reprise 1.
- 0xFFD2 pour le point de reprise 2.
- 0xFFD3 pour le point de reprise 3.
- 0xFFD4 pour le point de reprise 4.
- 0xFFD5 pour le point de reprise 5.
- 0xFFD6 pour le point de reprise 6.
- 0xFFD7 pour le point de reprise 7.
Bloc Fin d'image - EOI
Voici les propriétés du bloc :
Propriété | Taille en octets | Description |
Etiquette | 2. | 0xFFD9. |
Enchaînement des blocs du flux Jpeg
Voici la grammaire d'enchaînement des blocs dans le flux Jpeg :
FluxJpeg :
ParametresGlobauxOption :
ListeContenus :
Contenu :
ParametresLocauxOption :
ListePartiesDonneesImage :
PartieDonneesImage :
ListeDonneesImage :