Vous êtes sur la page 1sur 14

Université HASSAN I

ENSA Khouribga

La norme JPEG de compression des


images fixes

Réalisé par :
Yacine Abdessalam Encadrant :
AMKASSOU Pr. Imad F.Eddine FATANI
Omar BARMAKI

8 janvier 2014
Table des matières
1 Introduction 2
1.1 Traitement d’image . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2 La norme JPEG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

2 Préparation 3

3 La transformée en cosinus Discrète 3


3.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
3.2 Propriétés de base de la DCT . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
3.3 Calcul de la DCT via une FFT . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
3.4 La DCT à deux dimensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
3.5 Description du noyau de la transformée bidimensionnelle . . . . . . . . . . . . . 7

4 Traitement de l’image par bloc 8

5 La quantification, clef de lma compression 8


5.1 Étude de la quantification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

6 Conclusion 12

1
1 Introduction
1.1 Traitement d’image
Le traitement d’images est une discipline de l’informatique et des mathématiques appliquées
qui étudie les images numériques et leurs transformations, dans le but d’améliorer leur qualité
ou d’en extraire de l’information. Il s’agit d’un sous-ensemble du traitement du signal dédié aux
images et aux données dérivées comme la vidéo (par opposition aux parties du traitement du
signal consacrées à d’autres types de données : son et autres signaux monodimensionnels notam-
ment), tout en opérant dans le domaine numérique (par opposition aux techniques analogiques
de traitement du signal, comme la photographie ou la télévision traditionnelles).
Dans le contexte de la vision artificielle, le traitement d’images se place après les étapes
d’acquisition et de numérisation, assurant les transformations d’images et la partie de calcul
permettant d’aller vers une interprétation des images traitées. Cette phase d’interprétation est
d’ailleurs de plus en plus intégrée dans le traitement d’images, en faisant appel notamment à
l’intelligence artificielle pour manipuler des connaissances, principalement sur les informations
dont on dispose à propos de ce que représentent les images traitées (connaissance du domaine).
Le traitement d’images commence à être étudié dans les années 1920 pour la transmis-
sion d’images par le câble sous-marin allant de New York à Londres. Harry G. Bartholomew
et Maynard D. McFarlane effectuent la première numérisation d’image avec compression de
données pour envoyer des fax de Londres à New York. Le temps de transfert passe ainsi de plus
d’une semaine à moins de trois heures. Il n’y a pas vraiment d’évolution par la suite jusqu’à la
période d’après-guerre1. Le traitement du signal prend de l’importance vers la fin de la Seconde
Guerre mondiale avec l’arrivée du radar. La prospection pétrolière participe aussi beaucoup au
développement des techniques de traitement du signal.
Le véritable essor du traitement d’images n’a lieu que dans les années 1960 quand les ordi-
nateurs commencent à être suffisamment puissants pour travailler sur des images. Peu après,
la redécouverte de la transformée de Fourier rapide (FFT) révolutionne le domaine, en ren-
dant possible les manipulations du contenu fréquentiel des signaux sur ordinateur. Cependant,
l’essentiel des recherches porte encore, à cette époque, sur l’amélioration des images et leur
compression.

1.2 La norme JPEG


La norme JPEG est une norme qui définit le format d’enregistrement et l’algorithme de
décodage pour une représentation numérique compressée d’une image fixe. JPEG est l’acronyme
de Joint Photographic Experts Group. Il s’agit d’un comité d’experts qui édite des normes
de compression pour l’image fixe. La norme communément appelée JPEG, de son vrai nom
ISO/CEI 10918-1 — UIT-T Recommendation T.81, est le résultat de l’évolution de travaux qui
ont débuté dans les années 1978 à 1980 avec les premiers essais en laboratoire de compression
d’images. JPEG définit deux classes de processus de compression :
– avec pertes ou compression irréversible. C’est le JPEG classique . Il permet des taux de
compression de 3 à 100.
– sans pertes ou compression réversible. Il n’y a pas de pertes d’information et il est donc
possible de revenir aux valeurs originales de l’image. Les gains en termes de compression
sont alors plus modestes, avec un taux de compression de l’ordre de 2 à 8. Cette partie
fait l’objet d’une norme spécifique appelée JPEG-LS.

2
Cet algorithme est très populaire, en particulier sur Internet où la compression d’un fichier
permet de réduire le coût en bande passante. Il est de plus possible d’enregistrer une image
dans le format JPEG avec la majeure partie des appareils photos numériques et téléphones
portables. Cependant, les pertes se produisant lors de la compression ”classique” font qu’il
est moins utilisé dans certains domaines comme l’imagerie médicale, où la restitution fidèle de
l’image initiale est plus importante.

2 Préparation
1. Le procssus de codage/décodage JPEG :

– 8x8 : Découpage de l’image original sous forme numérique ;


– Transformée en cosinus discrète (DCT) : on l’utilise pour la décorrélation des donées
et pour la concetration de l’energie dans les basses fréquencs.
– La quantification (Q) : Pour éliminer les hautes fréquences.
– Zig-Zag : Pour la mise en série des données.
– Codage : Codage de manière optimale.
2. Dans la pratique, une certaine perte d’informations reste cependant possible en raison
des erreurs d’arrondis introduites en cours de calcul lorsqu’on fait la quantification.
3. la quantification ramène beaucoup de coefficients à 0 (surtout en bas à droite dans la
matrice, là où se trouvent les hautes fréquences). Seules quelques informations essentielles
(concentrées dans le coin en haut à gauche) sont gardées pour représenter le bloc. La
redondance des données contenues dans le bloc augmente ainsi fortement, ce qui peut être
exploité par un algorithme de compression : au moment de coder le résultat dans le fichier,
la longue suite de zéros nécessitera très peu de place. Cependant, si la quantification est
trop forte (= taux de compression trop élevé), il y aura trop peu de coefficients non nuls
pour représenter fidèlement le bloc. Le problème apparaı̂tra lors du décodage nécessaire
pour l’affichage de l’image : à l’écran la division en blocs deviendra visible, et l’image
aura un aspect ≪ pixellisé ≫.

3 La transformée en cosinus Discrète


3.1 Introduction
La transformée en cosinus discrète ou TCD (de l’anglais : DCT ou Discrete Cosine Trans-
form) est une transformation proche de la transformée de Fourier discrète (DFT). Le noyau de
projection est un cosinus et crée donc des coefficients réels, contrairement à la DFT, dont le

3
noyau est une exponentielle complexe et qui crée donc des coefficients complexes. On peut ce-
pendant exprimer la DCT en fonction de la DFT, qui est alors appliquée sur le signal symétrisé.
La variante la plus courante de la transformée en cosinus discret est la DCT type-II, souvent
simplement appelée la DCT . Son inverse, qui correspond au type-III est souvent simplement
appelée IDCT . Il existe quatre types de DCT , qui peuvent tous se mettre sous forme :
X
X[k] = x[n]Φkn (1)
n

où les fonctions de base Φkn sont définies à partir de fonctions cosinus. Dans le cadre de la
compression vidéo, on utilise la DCT de type II de la forme suivante :
1
  
r
2  k(n + )π
Φkn = ck cos 
 2   n, k = 0, 1, 2, ..., N − 1

(2)
N N

L’équation (1) définit une transformation matricielle Φ = [Φkn ], d’un vecteur temporel x[n]
en un vecteur de même longueur X[k]. Dans la suite du TP, on prendra N=8.

3.2 Propriétés de base de la DCT


1. Le code MATLAB pour implémenter la DCT sous la forme d’un produit matrice-vecteur :
function [X]= dct8(x)
N=length(x); % Dans notre cas N=8
phi=zeros(N,N);
X=zeros(N,1); % Initialisation de la matrice
A=sqrt(2/N); % Coefficient de la transformée

for i=0:N-1

if i==0
c=1/sqrt(2);
else
c=1;
end

for j=0:N-1
phi(i+1,j+1) = c*cos((i*pi)/N*(j+(1/2))); % calcul de noyau
end
end
X= A*phi*x; % Le résultat
end

2. Le code MATLAB de la DCT inverse (iDCT) :


function [x]= dct8inv(X)
N=length(X);

4
phi=zeros(N,N);
x=zeros(N,1);
A=sqrt(2/N);

for i=0:N-1

if i==0
c=1/sqrt(2);
else
c=1;
end

for j=0:N-1
phi(i+1,j+1)=c*cos((i*pi)/N*(j+(1/2)));
end
end
x= A*phi’*X;
end
3. Si on applique à un vecteur x quelconque la DCT et son inverse on trouve le vecteur x.
Exemple par MATLAB :
x =

1
5
6

>> X = dct(x)

X =

6.9282
-3.5355
-1.2247

>> idct(X)

ans =

1.0000
5.0000
6.0000

3.3 Calcul de la DCT via une FFT


Là il s’agit d’appliquer la fonction fft de Matlab sur 2N échantillons (échantillons (0 à N)
+ zéros (N+1 à 2N)), de multiplier les N premiers échantillons par exp(-i*2*pi*k/(4*N), puis

5
de prendre la partie réelle et la multiplier par Ck et racine(2/N).
Le code MATLAB :

function [X] = dctfft(x)

N=length(x);
X=zeros(N,1);
A=sqrt(2/N);
x=[x;zeros(N,1)];
W=zeros(N,1);
F=fft(x)
for n=1:N
W(n,1)=exp(-1i*(n-1)*pi/(2*N));
end
FF=F(1:N,1).*W
for i=1:N
if i==1
c=1/sqrt(2);
else
c=1;
end

X(i,1)=c*A*real(FF(i,1));
end
end

3.4 La DCT à deux dimensions


La DCT-II à deux dimensions est une extension modifiée de la transformation unidimen-
sionnelle :
N −1 N −1    
2Ck Cl X X πk 1 πl 1
X(k, l) = x(n, m)cos (n + ) cos (m + )
N n=0 m=0 N 2 l 2

N −1 N −1    
2 XX πk 1 πl 1
x(n, m) = Ck Cl X(k, l)cos (n + ) cos (m + )
N k=0 l=0 N 2 l 2

1
avec : 0 ≤ n, m, k, l ≤ N − 1 et Ck = √ si k = 0, 1 sinon
2
Comme plusieurs transformées 2D, la DCT-II est séparable, ce qui implique qu’on peut
l’implémenter à partir de la DCT à une dimension. Elle s’écrit alors sous la forme matricielle :

[X] = [Φ][x][Φ]t

1. La propriété utilisée dans la fonction dct2.m est que l’on applique deux DCT unidimen-
sionnelle, une suivant les lignes, puis suivant les colonnes.

6
2. Dans la fonction dct8.m, on retrouve le principe de calcul de la DCT unidimensionnel
cas impair. C’est à dire que si la fonction rem retourne 1 (cas impair,n/2 non entier), on
double le nombre d’échantillons pour avoir n pair. On a la matrice originale de 1 à N et
la matrice flippée (inversée) de N+1 à 2N.
3. La fonction dct ne fait le calcul que suivant les colonnes, il faut utiliser la fonction dct2.
4. Application de DCT sur le blc sampl1.mat, tracage de mesh 3D du bloc original, ainsi
que du signal transformée :

On remarque que l’image ne contient principalement que des basses fréquences.

3.5 Description du noyau de la transformée bidimensionnelle


On veut retrouver la matrice de transformation (ou noyau)Φ sans calcul, en utilisant la
fonction idct2 pour faire ressortir chaque vecteur en fonction de k, l . Pour trouver Φ(k, l), il
faut que X(0, 0) = 1 et le reste soit à 0, puis que X(1, 0) = 1 et le reste à 0, et ainsi de suite...
On rempli une matrice phi de 64 blocs de 8x8 pixels qui correspondent à chaque idct2(X(k, l)).
On obtient :

7
4 Traitement de l’image par bloc
L’image est découpées en blocs de tailles 8x8 pixels pour appliquer à chacun d’entre eux
une DCT. L’instruction blkproc permet de découper une images en plusieurs blocs de taille [M
N] et d’appliquer une fonction à chacun de ces blocs, ici on utilisera la fonction dct2.

>> load sampl1.mat


>> x = sampl1;
>> imshow(x,gray(256))
>> y = blkproc(sampl1,[8 8],’dct2’);
>> imshow(y,gray(256))

Le résultat :

L’image étant très uniforme dans les noirs, on observe des pics ≪ blancs ≫ pour les basses
fréquences de chaque bloc.

5 La quantification, clef de lma compression


La quantification est l’étape de l’algorithme de compression JPEG au cours de laquelle se
produit la majeure partie de la perte d’information (et donc de la qualité visuelle), mais c’est
aussi celle qui permet de gagner le plus de place (contrairement à la DCT, qui ne compresse
pas). La DCT a retourné, pour chaque bloc, une matrice de 8x8 nombres (dans l’hypothèse que
les blocs de l’image font 8x8 pixels). La quantification consiste à diviser cette matrice par une
autre, appelée matrice de quantification, et qui contient 8x8 coefficients spécifiquement choisis
par le codeur. Le but est ici d’atténuer les hautes fréquences, c’est-à-dire celles auxquelles l’œil
humain est très peu sensible. Ces fréquences ont des amplitudes faibles, et elles sont encore plus
atténuées par la quantification ; certains coefficients sont même souvent ramenés à 0.

5.1 Étude de la quantification


1. On charge la table de quantification matquant.mat
>> load matquant.mat
>> matquant
matquant =
16 11 10 16 24 40 51 61
12 12 14 19 26 58 60 55
14 13 16 24 40 57 69 56

8
14 17 22 29 51 87 80 62
18 22 37 56 68 109 103 77
24 35 55 64 81 104 113 92
49 64 78 87 103 121 120 101
72 92 95 98 112 100 103 99

Cette table atténue les hautes fréquences d’un rapport 7 par rapport aux basses fréquences.
L’oeil étant moins sensible aux hautes fréquences.
2. Il s’agit de charger une image(LENA.MAT), de lui appliquer toutes les étapes de la
compression (DCT, quantification directe, puis inverse, et DCT inverse. Les opérations
sont écrites dans le fichier codec.m qui fait appel aux fonctions dct2.m, quantifdirecte.m,
quantifinverse.m et idct2.m. On utilise la matrice de quantification matquant.mat. Cette
matrice peut être multipliée par un facteur c dans la ligne de commande pour visualiser
les pertes dûes aux arrondis entre quantification directe et quantification inverse.
Le programme dans le fichier codec.m :
load(’LENA.mat’);
I_dct = blkproc(LENA,[8 8],’dct2(x)’);

I_quant = blkproc(I_dct,[8 8],’round(x./P1)’,A);

I_q_inv = blkproc(I_quant,[8 8],’x.*P1’,A);

Ima = blkproc(I_q_inv,[8 8],’round(idct2(x))’);

d =LENA-Ima;

PSNR = 10* log10 ( 255^2/mse(d))

3. Le programme affiche l’image originale, l’image compressée/décompressée puis l’image


d’erreur qui est défini par la relation :
ε = 128 + 2(original − reconstruite)

On prend un facteur (8) multiplicateur de table de quantification très important pour


bien mettre en évidence le phénomène. On remarque sur l’image d’erreur que les erreurs
se trouvent surtout sur les contours, donc sur les petits transition, les détails, qui sont
faits de hautes fréquences. L’arrondi a plus d’influence sur les hautes fréquences d’autant
plus que les coefficients de la table sont réduits en hautes fréquences.
4. Le psnr est donné par la formule :
 2 
d
P SN R = 10 log10
EQM

9
Où
m−1 n−1
1 XX
EQM = kI0 (i, j) − Ir (i, j)k2
mn i=0 j=0

5. Lorsqu’on change le facteur de qualité on trouve les résultats suivants :

Facteur de qualité PSNR de LENA


0.5 13.35
1 11.15
2 9.52
4 7.07
Rmq : Un bon psnr en image est de 30 à 40 dB, on l’obtient pour un facteur
qualité de 0,01.
6. La courbe représentant l’evolution de P SN R en dB en fonction du facteur de qualité Q
pour les différentes images.
100

90

80

70

60

50

40

30

20

10

0
40 35 30 25 20 15

Le code MATLAB est le suivant :


load(’bateau.mat’);
load(’MATQUANT.mat’);
dct=blkproc(double(bateau2),[8 8],@dct2);
qjpeg=zeros(1,99);
alpha=zeros(1,99);
PSNR=zeros(1,99);

for i=1:99
qjpeg(i)=i;
if (1<=qjpeg(i)<=50)
alpha(i)=50/qjpeg(i);
else

10
alpha(i)=2-(2*qjpeg(i))/100;
end

quant=blkproc(dct,[8 8],’round(x./P1)’,alpha(i)*Q);

%à la réception
Iquant=blkproc(quant,[8 8],’round(x.*P1)’,alpha(i)*Q);
Idct=blkproc(Iquant,[8 8],@idct2);

%PSNR
PSNR(i)=10*log10((255^2)/mse(double(bateau2)-Idct));
end
plot(qjpeg,PSNR)

11
6 Conclusion
Le format JPEG, très couramment utilisé pour le codage des images bitmap et des pho-
tos, est un format de compression très efficace. La perte de qualité d’image occasionnée par
l’algorithme de compression peut être maı̂trisée car le taux de compression des fichiers .jpeg
est réglable. Le format JFIF, plus connu sous le nom de format JPEG, est complémentaire des
formats GIF et PNG pour la publication d’images sur le Web : il sauvegarde plus d’informations
couleur que le format GIF et permet de comprimer des photographies ou des images lourdes.
L’algorithme de compression provoque une perte d’information et peut donc entraı̂ner une
perte de qualité visible quand on utilise un taux de compression élevé ou sur certains types
d’images. Ainsi, le format .jpeg convient bien aux photos mais pas aux images comportant peu
de couleurs ou aux figures géométriques (pour lesquelles le format GIF est plus adapté).
Le principal avantage de ce format est le taux de compression réglable qui permet à l’utili-
sateur de trouver un compromis entre le taux de compression et la qualité de l’image.

12

Vous aimerez peut-être aussi