Introduction aux étapes de l'algorithme JPEG

Brève introduction de la norme de compression JPEG: JPEG (Joint Photographic Exports Group) est un groupe d'experts composé de deux grandes organisations internationales, ISO et IEC, chargé de formuler la norme de codage de compression des données d'images numériques statiques, à savoir ISO / IEC 10918 --- "multi-niveaux de gris "Codage de compression d'image statique de tonalité", connu internationalement comme la norme JPEG.

La norme définit deux algorithmes de compression de base, deux méthodes de codage entropique, trois niveaux de système et quatre modes de codage

Deux algorithmes de compression de base: DCT à transformation cosinus discrète avec perte et codage prédictif sans perte

Trois niveaux de système: système de base, système étendu et fonctions spéciales sans perte

Deux méthodes de codage entropique: codage Huffman et codage arithmétique

Quatre modes d'encodage:

  • Mode séquentiel basé sur DCT (l'encodage et le décodage sont complétés par un balayage)
  • Mode progressif basé sur DCT (l'encodage et le décodage nécessitent plusieurs balayages pour se terminer, l'effet de balayage est de grossier à fin et augmente progressivement)
  • Mode sans perte (basé sur DCPM, pour garantir que le décodage est complètement restauré à la valeur d'échantillon de l'image d'origine)
  • Mode hiérarchique (les images sont encodées dans plusieurs résolutions spatiales et seules les données à basse résolution peuvent être décodées au besoin, ce qui donne des informations à haute résolution)

Dans les applications pratiques, la plupart des algorithmes de codage d'image JPEG utilisent la transformation en cosinus discrète, le codage Huffman et les modes de codage séquentiel. Cette méthode est appelée système de base JPEG.

L'ensemble du processus de l'algorithme de compression JPEG est illustré dans la figure suivante:

Point de connaissance ajouté: BMP est l'abréviation de English Bitmap (bitmap), c'est un format de fichier image standard dans le système d'exploitation Windows, peut être pris en charge par une variété d'applications Windows. Avec la popularité du système d'exploitation Windows et le développement d'applications Windows riches, le format bitmap BMP est bien sûr largement utilisé. Ce format se caractérise par des informations d'image riches et presque pas de compression, mais cela conduit à ses défauts inhérents, prenant trop d'espace disque. Par conséquent, BMP est actuellement plus populaire sur une seule machine.


La première étape: la conversion du mode couleur

Le modèle de couleurs utilisé par les images BMP est RVB et le modèle de couleurs utilisé par JPEG est YCrCb. Les données d'image de l'espace colorimétrique RVB doivent être converties en l'espace colorimétrique YCrCb utilisé par JPEG.

/*
    RGB和YCrCb之间的转换关系如下:

    Y = 0.229R + 0.587G + 0.114B
    Cr = -0.1687R - 0.3313G +0.5B +128
    Cb = 0.5R = 0.418 - 0.0813B + 128

    R = Y + 1.402(Cr-128)
    G = Y - 0.34414(Cb-128)- 0.71414(Cr-128)
    B = Y + 1.772(Cr-128)
*/


Étape 2: échantillonnage

L'étude a révélé que la sensibilité de l'œil humain à la conversion de la luminosité est beaucoup plus élevée que sa sensibilité à la conversion des couleurs. Par conséquent, nous pouvons penser que la composante Y est beaucoup plus importante que la composante Cr / Cb. Dans l'image BMP, chacun des trois composants RVB est échantillonné sur un octet, souvent appelé mode RVB888. Habituellement, JPEG utilise les méthodes d'échantillonnage YUV422 et YUV411, ce qui signifie l'échantillonnage des données des composants Y, Cb et Cr. Ratio, permet au rapport d'échantillonnage de la chrominance d'être inférieur à la luminosité, mais ne réduit pas de manière significative la qualité visuelle.

La signification de 4: 1: 1 est: Dans l'unité 2 * 2, il devrait y avoir 4 valeurs Y, 4 U et 4 V, qui sont stockées avec 12 octets. Après un traitement d'échantillonnage 4: 1: 1, la valeur dans chaque unité a 4 Y, 4 U et 4 V, tant que 6 octets peuvent être stockés.


La troisième étape: la segmentation des données

La transformation DCT utilise des sous-blocs de 8 * 8 points comme unité de traitement de base, de sorte que les données d'image source doivent être divisées en plusieurs sous-blocs à l'avance, chaque bloc contient 8 * 8 pixels, si la longueur et la largeur de l'image d'origine ne sont pas un multiple de 8. , Vous devez d'abord remplir un multiple de 8, afin qu'il puisse être traité comme un sous-bloc de 8 * 8


Étape 4: Transformation discrète en cosinus (Transformation discrète en cosinus)

La transformation discrète en cosinus est une méthode de codage par transformation couramment utilisée pour la compression des signaux audio, vidéo et image. Elle a une relation étroite avec la transformée de Fourier. Toute transformation de Fourier continue avec une fonction symétrique n'a qu'un terme cosinus. Par conséquent, la transformée en cosinus a la même signification physique claire que la transformée de Fourier. Il transforme les données du domaine spatial en domaine fréquentiel, de sorte que l'énergie du signal est concentrée sur quelques coefficients du domaine fréquentiel pour réduire la quantité de données. Après décodage, la transformée en cosinus discrète inverse IDCT peut restaurer les données dans l'image reconstruite du domaine spatial d'origine


La formule DCT 8 * 8 points vers l'avant et la formule IDCT sont les suivantes, qui peuvent convertir entre le domaine spatial de pixels f (x, y) et le domaine fréquentiel F (U, V)

La signification physique de la transformation DCT est illustrée dans la figure ci-dessous: le signal d'image est décomposé en fondamentale et en harmoniques dans le domaine fréquentiel


De toute évidence, les informations d'image restaurées peuvent être exprimées par la formule suivante: F(n) = C(n) * E(n) ici, E (n) est une base, C (n) est le coefficient DCT et F (n) est le signal d'image; si vous considérez le changement dans la direction verticale, vous avez besoin d'un Substrat bidimensionnel.

Étape 5: Tri par balayage en zigzag

La matrice de coefficients DCT 8 * 8 est disposée en un vecteur 1 * 64, qui peut efficacement accumuler le nombre de 0 consécutifs le long du chemin en zigzag et améliorer l'efficacité de compression du codage. Les coefficients DC et les coefficients AC basse fréquence sont classés à l'avant du vecteur


Étape 6: Quantification des coefficients DCT


On peut voir qu'une quantification fine est utilisée pour la partie basse fréquence (taille de pas de quantification plus petite), et une quantification grossière est utilisée pour la partie haute fréquence (taille de pas de quantification plus grande)


Étape 7: Codage de modulation d'impulsion différentielle à coefficient DC

Le coefficient DC obtenu après transformation DCT présente deux caractéristiques:

  • Le coefficient est plus grand
  • La valeur du coefficient DC des blocs d'image 8 * 8 adjacents ne change pas beaucoup

L'utilisation de la modulation différentielle du code d'impulsion DPCM, c'est-à-dire le codage de la différence de coefficients DC entre des blocs adjacents de 8 * 8 pixels, peut améliorer le taux de compression.


Étape 8: Conversion de format intermédiaire des coefficients DC

Objectif: réduire davantage la quantité de données

Le format intermédiaire de la différence de coefficient DC se compose de deux parties: (SSSS, DIFF)


Étape 9: Codage de la longueur de course du coefficient AC (RLC)

Le codage de longueur est de remplacer les caractères répétés dans une chaîne de deux octets. Le premier octet représente le nombre de répétitions, et le deuxième détail peut représenter les caractères répétés. Ce codage peut être simple et intuitif Réduisez la quantité de données. Par exemple:(4,6)就代表字符串 “6666”

Cependant, le codage RLC en JPEG est légèrement différent. Le format de codage (M, N) est défini comme suit: M est le nombre de 0 consécutifs entre deux coefficients AC non nuls (c'est-à-dire la longueur de la formation) et N est le prochain coefficient AC non nul La valeur.

/*
例如,有字符串:57,45,0,0,0,0,23,0,-30,-8,0,0,1,…………
经过RLC之后,结果为如下形式:
(0,57);(0,45);(4,23);(1,-30);(0,-8);(2,1);
*/


Étape 10: Conversion de format intermédiaire des coefficients AC

/*
例如:(0,57);(0,45);(4,23);(1,-30);(0,-8);(2,1)…………
根据VLI表,对应的中间格式为:
(0,6),57;(0,6),45;(4,5),23;(1,5),-30;…………
*/


Étape 11: codage entropique

Les méthodes de codage entropique spécifiées dans la norme JPEG incluent le codage Huffman et le codage arithmétique

Encodage Huffman: l'encodage binaire avec une longueur de caractère plus courte est attribué aux caractères avec une forte probabilité d'occurrence, et l'encodage binaire avec une longueur de caractère plus longue est attribué aux caractères avec une faible probabilité d'occurrence, de sorte que la longueur moyenne d'encodage des caractères est la plus courte.

Table de codage Huffman: 4 tables de codage prédéfinies, qui sont codées sous forme de tables de correspondance.

Respectivement: table de codage Huffman du coefficient DC et du coefficient de luminosité AC; table de codage Huffman du coefficient DC et du coefficient AC de chrominance;

Le tableau de codage peut faire référence à:https://www.w3.org/Grapics/JPEG/itu-t81.pdf


Autres références JPEG:

Texte standard JPEG:https://www.w3.org/Graphics/JPEG/itu-t81.pdf

Code source JPEG:

libjpeg-turbo http://libjpeg-turbo.virtualgl.org/

libjpeg https://github.com/thorfdbg/libjpeg

A publié 7 articles originaux · Like1 · Visites 661

Je suppose que tu aimes

Origine blog.csdn.net/weixin_45615071/article/details/105327836
conseillé
Classement