Vous êtes sur la page 1sur 25

Universit Ferhat Abbas,Stif

Facult des Sciences de lIngnieur


Dpartement dlectronique

Mini projet sur :


La Compression JPEG dimages fixes
Mise en uvre sous Matlab sur une image fixe de niveau gris 8bits

Par : Azoug Seif Eddine


2me anne master rseaux et systmes de tlcommunication
Date :

01-01-2011

TABLE DES MATIERES


I.
II.

III.

IV.

V.

VI.

VII.

VIII.

Introduction
Rappel sur limage numrique
II.1 Dfinition
II.2 Notions de pixel et espace de couleur
Rappel sur la compression des images
III.1 Compression sans pertes
III.2 Compression avec pertes
III.3 Processus gnral dun codec dimages fixes
Notions sur la transform DCT
IV.1 Dfinition
IV .2 Variantes de la DCT
IV .2.a DCT I
IV .2.b DCT II
IV .2.c IDCT
IV.3 Proprits de la DCT en compression dimage
IV.3.a Dcorrlation
IV.3.b Concentration des coefficients
IV.3.c Symtrie, sparabilit, et orthogonalit
Processus gnral dun codec JPEG dimages fixes
V.1 Dfinitions
V.2 JPEG base sur la DCT squentielle
V.2.1 Dcoupage en sous blocs
V.2.2 Dcalage de niveau (Level Shifting)
V.2.3 Application de la DCT
V.2.4 Quantification
V.2.5 Codage des coefficients DC et AC
V.2.5.a Les coefficients DC
V.2.5.b Les coefficients AC
V.2.6 Codage Huffman
Mise en uvre sous Matlab
VI.1 Reprsentation des images sous Matlab :
VI. 2 Code final
VI.3 Rsultats
Conclusion
Rfrence

I. Introduction :
De nos jours, les images numriques sont omniprsentes dans notre
quotidien(photographie numrique, web, imagerie mdicaleetc), leurs utilisations sous
format brut rendent leurs portabilits difficiles (temps de transmission long) et leurs
stockages encombrant (ncessit de plus de mmoire) ce qui revient un cout lev, cest
pour cela quil a fallu trouver de nouvelles techniques de compression et codage dimage
adaptes.
Grce aux progrs atteint dans la thorie du codage et de la compression des donns, les
images peuvent maintenant tre compresses en faisant enlever ce qui est redondant sur la
base dalgorithmes de compression intelligents en exploitant plusieurs aspects technique
prsents sur les donnes de limage (redondance psychovisuel, interpixel..) afin de rduire
le poids de limage, cela nous fera gagner de lespace en mmoire et une augmentation du
dbit de transmission (temps de transmission moins long). Aujourdhui, on trouve plusieurs
algorithmes de compression dimages comme par exemple: .jpg ou .jpeg, .png, .gif, .tiff,
jpeg2000 etc
Dans ce projet, nous allons essayer de revoir le principe de lalgorithme de compression
JPEG en mode opratoire squentielle, et enfin sa mise en uvre pratique de base sur
une image fixe monochrome laide du logiciel Matlab.

II. Rappel sur limage nume rique :


Lacquisition dune image se fait par moyen dun appareil photo ou une prise dun film sur
une camra (suite dimages). La nature brute de limage la sortie des capteurs est un
signal analogique qui doit tre discrtis (numris) pour pouvoir lexploit par un
processeur de donnes numriques.
La source peut tre aussi une image artificielle, dans ce cas, le signal de limage est dorigine
discret, comme un schma de dessin industriel sur un logiciel CAO par exemple.
II.1 Dfinition :
Une image numrique est un signal bidimensionnelle (a deux dimensions, largeur plus
hauteur) fini discret (pralablement chantillonn et quantifi) qui peut tre assimil tel
vue sur un cran dordinateur une matrice I [MxN] finie o chaque lment I(mi,nj) de
cette matrice reprsente un point ou un lment de limage (appel : pixel) qui appartient
un espace de couleur fini.

II.2 Notions de pixels et espace de couleurs :


Lacronyme pixel cest la contraction de Picture element , il reprsente un point de
limage. La clart ou la dfinition de limage est proportionnelle aux nombres de pixel, cest
la rsolution dune image.
Pour une image de bonne qualit la rsolution doit tre au minimum de 300px/2.54cm
(2.54cm = 1 Pouce).Par ex le nombre de pixel dans une image de rsolution 640x480 pixel:
640x480 = 307200 pixels
Chaque pixel est reprsent dans un espace de couleur finis. Pour une image de niveau gris,
par exemple, chaque pixel est reprsente sur une chelle de 256 niveaux de gris o
chaque niveau reprsente lintensit de la luminosit du pixel. Cet espace de couleur
ncessite 8 bits pour tre coder (2^8=256), cest des images 8 bits.
Typiquement pour un espace de couleur RVB (Rouge,Vert,Bleu) ,une image chromatique
ncessite pour chaque pixel trois couches de niveaux de luminosit des trois couches de
couleurs RVB. Cela ncessite au total 3*8 = 24bit pour cod un pixel, o chaque couleur de
pixel est reprsente sur une chelle de prs de 16 millions de niveaux de couleurs (2^24),
Problme : Le poids des donnes de limage numrique sont proportionnelles la
rsolution de limage.
Solution : Compresser les donnes de limage numrique.

III. Rappel sur la compression des images :


La compression des donnes ou le codage source, permet on appliquant des algorithmes de
compression spcifiques de rduire la taille dune image sur une mmoire ou de manire
quivalente de rduire son temps de transmission.
Image originale

Compression

Dcompression
Ligne de transmission

Image reconstitue

Mmoriser

Demander

Mmoire
Figure III.1 Principe de la compression image

La compression peut tre sans perte, limage restera fidle limage originale, soit elle sera
avec perte de qualit (fidlit) pour rduire plus la taille de limage, dans ce cas-l, la
compression sera au prix de la dgradation autorise, ces types de compression sont faites
grce aux redondances des donnes prsentes sur limage. Ces redondances sont :
-Redondance psycho visuel : Des dtails non perceptible lil humain quon peut liminer
(cf. caractristiques de la vision humaine).
-Redondance inter pixel : La possible corrlation existante entre les pixels de limage, on dit
quune image a une redondance inter pixel si cest possible de prdire la valeur dun pixel
en connaissance de la valeur des pixels voisins (suivants ou prcdant), sachant que plus la
rsolution de limage est grande plus la probabilit de rencontr des redondance inter pixel
est leve.
-Redondance de codage : squences de rptition des bits, on rencontre cela gnralement
la fin de la compression, pendant ltape de codage.
III.1 Compression sans perte :
Appele aussi compression non destructrice, la qualit de limage aprs dcompression est
la mme que celle de limage originale, le taux de compression de ce type est limit.
Ce type de compression on le trouve beaucoup dans le domaine o la prcision est majeure
comme limagerie mdicale (IRM par ex.) ou la tldtection (imagerie satellite par ex.).Les
algorithmes de compression employs sont nombreux, les plus importants sont:
-Codage rptition : par ex. RLC (Run Length Coding)
-Codage entropique :
bas sur le codage longueur variable ou VLC (Variable Length Coding), par ex : le codage
de Huffman,le codage arithmtique,etc..
-Codage dictionnaire ou codage Lempel-Ziv-Welch (LZW) :
Ce codage ne ncessite plus de connaitre les probabilits des symboles comme dans le cas
du codage entropique.
III.2 Compression avec perte :

Cest une compression destructrice, elle permet de sacrifier certains dtails de limage non
rcuprable en dcompression au profit de rduction de poids. Cette dgradation peut tre
contrle selon la qualit quon veut obtenir en fonction du taux de compression choisie.

Ce type de compression on le trouve gnralement dans le domaine normal pratique l o


la rduction du poids de limages est trs important, comme le domaine multimdia par
exemple (web, photographie) o la fidlit envers limage original nest pas trs importante
et le taux de compression sera plus grand que celui dune compression sans perte du fait
quon est juste limit par la qualit quon souhaite obtenir.
Les algorithmes de compression employs sont nombreux, on cite lune des mthodes les
plus utilises: Le codage par transformation.
Ce type de codage fait appel aux transformes mathmatiques pour avoir une
cartographie des frquences spatiales prsentes dans limage.
La transform de cosinus discrte DCT et la transform en ondelettes sont les transformes
les plus utilises.
III.3 Processus gnral dun codec dimages fixes :
Le schma suivant illustre le processus gnral dencodage et de dcodage dune image fixe
sur un systme de communication :
Codeur

Image
originale

Canal de
transmission

Codage
Source

Codage
Canal

Dcodage
Canal

Dcodage
Source

Canal de
transmission

Image
reconstitue

Dcodeur
Figure III.2 Processus dun codec dimages fixes

Le codec (codeur/dcodeur) de source cest le block qui nous intresse, du fait que cest sur
ce bloc que la compression-codage /dcompression-dcodage aient lieu.La prsence du
codec canal a pour but contrairement au codage source dajouter des redondances au code
afin daugmenter lefficacit de la transmission en utilisant des codes dtecteurs et/ou
correcteurs derreurs (code de parit, code de Hammingetc).

Le schma gnral du bloc codec source dimages fixe est le suivant:


Image
originale

dcompose
en sous blocs
NxN

Codage par
transformation

Quantificateur

Codage des
symboles

Vers Codage
Canal

Fig III.3 Codage source dimages fixes

a) Codage par transformation (Transform Coding):


Aprs dcomposition de limage en sous-blocs NxN cause de la non efficacit et la lenteur
des calculs dun seul bloc entier, on applique une transform linaire (DFT, DCT,etc) qui
permet de transformer les sous blocs NxN de limage a un format non visuel afin dobtenir
des coefficients dans un domaine frquentiel (une reprsentation frquentiel de limage)
qui seront cods et quantifis. Le but du codage par transformer est davoir un autre aspect
de la distribution des donnes de limage et ainsi dcel les redondances potentiel comme
la redondance inter pixel.
b) Quantificateur (Quantizer):
Le quantificateur permet de faire une pondration des coefficients de la transform en se
basant sur une table de quantification (une table de luminosit et une autre de
chrominance) qui a t tablit sur les caractristiques de la vision humaine, les coefficients
de cette table imposeront un seuil de qualit qui dcidera des coefficients de la transform
quon veut garder et ceux quon veut supprimer juges non important visuellement, dune
autre manire, cette tape permet de choisir le taux de dgradation visuel quon souhaite
faire limage (Facteur de qualit), et le but de tous cela cest dliminer la redondance
psycho visuel.Cette tape se trouve seulement dans les compressions avec perte.
c) Codage des symboles (Symbols coding) :
Cette tape permet de rduire la redondance de codage en utilisant des codes VLC ou
autres.
Le dcodage source : cest les mmes blocs des schmas prcdents mais dans le sens
inverse et chaque bloc effectue lopration inverse de celle au codage.

IV. Notions sur la DCT :


Nous allons parler seulement de certains aspects importants connaitre pour lachvement
de lobjet de ce travail qui est la compression dimages sans entrer dans les dmonstrations
mathmatiques.

IV.1.Dfinition :
La DCT ou Discret Cosine Transform, cest une transform linaire qui a t applique la
1re fois dans la publication des professeurs [N. Ahmed, T. Natarajan, and K. R. Rao,
"Discrete Cosine Transform", IEEE Trans. Computers, 90-93, Jan 1974].
Cest une variante de la transform de Fourier discrte, qui permet de garder seulement les
cosinus et dliminer les Sinus, cest--dire, obtenir une reprsentation frquentiel
purement rel. Cette transform est trs largement utilise dans la compression audio et la
compression image comme JPEG et MPEG.
IV.2.Variantes de la DCT :
Il existe 8 variante de la DCT, ceux les plus connus sont DCT I,la DCT 2D ou DCT II et sa
transform inverse IDCT ou DCT III, nous allons voir la dfinition de la DCT I,DCT II et DCT III
qui sont la base de la compression JPEG.
IV.2.1DCT I :
Pour une squence dlments discrets N, la DCT I sexprime par :

IV.2.2 DCT II :
Cest une extension directe de la DCT I dans deux dimensions 2D,NxN, qui seras notre
image, sa formule mathmatique est donne par :

On remarque si :

Ce coefficient reprsente le coefficient DC, et le reste des coefficients reprsente les


coefficients AC, nous allons voir aprs ce que cela signifie en compression JPEG.

IV.2.3 IDCT:
Ou DCT III, elle est linverse de la DCT II, sa formule est donne par :

IV.3 Proprits importantes de la DCT en compression dimage :


IV.3.1 Dcorrlation :
La DCT permet de rduire ou dliminer la redondance inter pixel,les pixels sont
dcorrols afin de rduire la variance des pixel voisins dans limage ce qui permet une
compression efficace on codant chaque pixel indpendamment.
IV.3.2 Concentration des coefficients :
La DCT est trs efficace pour des images fortement corrole du fait quelle permet de
compact les coefficients qui reprsente les basses frquences dans une seule partition de
la matrice image, cela permet la sparation des frquences basses des frquences hautes,
et si cest une image faiblement corrole, les coefficients sont concentrs dans plusieurs
diffrentes partitions de la matrice image.
IV.3.3 Symtrie, sparabilit, et orthogonalit :
La DCT II peut tre spare comme suit :

De
on peut sortir la proprit de symtrie qui va nous conduire une expression
simplifie du calcul de la DCT:

A ce stade, on peut conclure avec la proprit dorthogonalit :


va nous permettre davoir lIDCT de la forme suivante :

On remarque quon obtient la matrice image originale au final. Ces proprits rduisent
considrablement les calculs dans les algorithmes de compression dimage du fait que ces
lments seront dj calculs lavance (calcul de la matrice C).

V. Processus ge ne ral dun codec JPEG dimages fixes :


V.1 Dfinition :
JPEG: Joint Photographic Experts Group.
Cest un algorithme standard de compression avec perte dimage fixe tablit en 1991 bas
sur le codage par la transform en cosinus discrte DCT, et il existe plusieurs modes
opratoires de compression JPEG tablies selon la rapidit du codec et le besoin
-Codage bas sur la DCT squentielle
-Codage bas sur la DCT progressive
-Codage sans perte
-Codage hirarchique
V.2 JPEG base sur la DCT squentielle :
Celui que nous allons aborder sur ce travail cest celui bas sur la DCT squentielle, o
limage est traite de gauche droite et de haut en bas, la figure Figure V.1 montre le
processus dun codec Source JPEG.

Offset

Image originale

Canal de
transmission

Divisision de l'image
en sous-bloc 8x8

DCT 2D 8x8

(ou 16x16)

(ou 16x16)

Codage
entropique:
Huffman

Coffcients AC:
scan Zig-Zag +
codage RLC

Table codage Huffman

Dcodage
entropique:
Huffman

Table de
quantification

Quantificateur

Cofficients
DC: Codage
prdctive
DPCM
Table de quantification

Coffcients AC:
dcodage RLC+
scan Zig Zag
inverse

Coffcients DC:
inverse DPCM

Quantificateur
inverse

Image
dcompresse

Fusion des
sous blocs 8x8
(ou16x16)

IDCT 8x8
(ou 16x16)

Offset
Codeur Source
Dcodeur Source
Figure V.1 Codec Source JPEG

V.2.1 Dcoupage en sous blocs :


Limage au dbut elle est dcoupe en sous-bloc de 8x8 (ou 16x16), chaque sousbloc seras traiter individuellement, si cest une image couleur il faut avant tout faire une
transformation couleur ensuite un sous chantillonnage, nous nallons pas staler sur ce
sujet.

V.2.2 Dcalage de niveau (Level Shifting) :


Deuxime tape, prrglage (offset), en effectuant un dcalage de niveaux, en
anglais Level shifting (pour une image monochrome, cest les niveaux du gris cods sur
8bits), o chaque lment de chaque sous blocs doit tre amen lintervalle *-128,127],
pour faire cela, on soustrait chaque lment un scalaire 128, cela va permettre
daugmenter la tolrance de prcision des coefficients de la DCT.
V.2.3 Application de la DCT :
Ltape suivante, Appliquer chaque sous bloc la transform DCT 2D ( DCT II ) N = 8
(ou N=16) ,le rsultat une matrice de 8x8 frquences (ou 16x16),cette transform va
permettre de sparer les hautes frquences des basses frquences, on aura 64 coefficients
(ou 256), le premier coefficient de la matrice reprsente le coefficient continue DC ou le
fondamental du sous bloc de limage, cest le coefficient de la frquence nulle dont
lamplitude est la plus leve et le reste des coefficients ce sont des coefficients AC
dcroissant si on tend vers les hautes frquences.
Le fait de sparer les frquences hautes et les frquences basses va ainsi permettre la
dcorrlation des pixels de chaque sous bloc de limage et ainsi rduire la redondance inter
pixel, sachant que la transformation seul sans quantification et codage nest pas une
compression, ce nest juste quune tape post-compression !
V.2.4 Quantification :
La prochaine tape, la quantification, on fait une division euclidienne (
entre les
blocs DCT et une table de quantification dj calcule sur la base dun facteur de qualit
(50% par ex.)

[ ]

Cela a pour but dliminer les coefficients haute frquence dont lil humain est peu
sensible, seulement ceux prsent en dessous du seuil dfinis par la table de quantification
auront des amplitudes trs faibles (liminatoire), ces coefficients seront arrondis lentier
prt qui est souvent 0, dailleurs, si on prend par exemple la table de quantification de
luminosit normalise standard JPEG suivante calcul sur un facteur de qualit FQ = 5:

16

11

10

16

24

40

51

61

12

12

14

19

26

58

60

55

14

13

16

24

40

57

69

56

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

On remarque que les coefficients en hautes frquences seront diviss sur un nombre leve
(en rouge), et ceux en basses frquences seront diviser sur un nombre moins lev (noir).

V.2.5 Codage des coefficients DC et AC :


Maintenant quon a les coefficients DCT quantifis et arrondis, les coefficients AC et
coefficients DC auront deux codages diffrents avant de subir le codage entropique de
Huffman.
V.2.5.a Les coefficients DC :
Ils seront cods par un codage prdictif DPCM par ex., ce type de codage
permet de prdire la valeur du coefficient DC de chaque sous bloc selon la connaissance de
la valeur du coefficient du bloc prcdant ou des blocs prcdents.
Par exemple, si on a la suite des coefficients DC de chaque sous blocs suivante:
555558888899999, son codage prdictif sera : 50000300001000.
Ce codage nous permet davantage de rduire la redondance inter pixel, et pour des raisons
de simplicit et de ce quil nous a t demand de faire, nous allons ngliger cette tape
dans notre manipulation Matlab.

V.2.5.b Les coefficients AC :


Coefficient DC

Figure V.3 Scan zig-zag

Les coefficients AC seront rcuprer sur un vecteur par un scan en zig-zag de la


matrice de chaque sous bloc afin de mettre les coefficients leves en premier et les
zros en fin comme illustr dans la figure V.3.Ensuite, ces coefficients seront cods
par le codage RLC (Run Length Coding) o les suites de coefficients AC qui se suivent
de mme valeurs sont codes par leurs nombre de redondance sur la squence par
ex :
Zig-zag :
-25

2
0
0
0
0

RLC : -25

2
0
0
0
0

2
0
0
0
0

2
0
0
0
0

1
0
0
0
0

0
0
0
0
0

0
0
0
0
0

0
0
0
0

0
0
0
0

0
0
0
0

-1
0
0
0

5 2

-1

EOB

0
0
0
0

0
0
0
0

0
0
0
0

EOB (End Of Block) veut dire le reste des coefficients de la matrice sont zros, et @ suivis
du nombre de redondance de la valeur qui suit, par exemple : @ 5 0 veut dire que cest une
suite de cinq 0.
Enfin, les deux vecteurs DC et AC seront runis sur un mme vecteur pour le codage
entropique Huffman.
V.2.6 Codage Huffman
Ltape finale, cest le codage Huffman, qui va compresser le vecteur RLC la limite de la
compression sans perte (VLC).Le codage Huffman se droule en deux tapes :
1re tape : Construire larbre de Huffman en classant les probabilits de chaque symbole
de haut en bas, et on additionnant les probabilits faibles pour obtenir un autre symbole et
ainsi de suite jusqu il en reste que deux probabilits.

2me tapes : consiste en lencodage des symboles en partant de linverse o on sest


arrt on assignant des 0 et 1 chaque symbole jusqu construire la table de codage de
chaque symbole, par ex :
-25

[0,1,1,1]

[0,0,0,0]

-3

[0,1,1,0]

[0,0,1,1]

-1

[0,0,0,1]

EOB [0,0,1,0]

[1,0]

[0,1,0]

[1,1]

En gnral cela est bas sur une table Huffman standard au JPEG dj prte, mais dans
notre cas, on va calculer nos tables de codage. Au final nous auront un vecteur de suite de 1
et 0 qui reprsente limage compresse JPEG.
Img_comp = [0

1 0] ;

Dans le processus de dcodage, cest linverse de toutes les tapes prcdente en


commenant par le dcodage Huffman jusqu la DCT inverse (IDCT) pour reconstituer
finalement limage.

VI. Mise en uvre sous Matlab :


Jai utilis la boite outils de traitement dimages (Image Processing Toolbox) de Matlab
pour lopration de lecture, conversion et affichage des graphiques.
VI.1 Reprsentation dimages sous Matlab :
Dans la boite outils (Image Processing Toolbox) de Matlab,ils existent quatre type de base
dimages quon peut manipuler.
II.1.a Image Binaire (Binary):
Cest une image interprt par une matrice logique I de dimension MxN o chaque
lment ou pixel de limage peut prendre uniquement la valeur 1 (Blanc) ou la valeur 0
(Noir).
II.1.b Image de niveaux gris (Grayscale):
Elle est interprte par une matrice I[MxN] o chaque lment de la matrice I donne
le niveau dintensit sur une chelle de niveau de gris selon le type de la matrice,

pratiquement, cest le type prfr en traitement dimage non chromatiques (uint8 en


gnral la structure des donnes utilise).
II.1.c Image de couleur rel ou RVB (Truecolor RGB)
Cette image est interprt par une matrice multidimensionnelle I[MxNx3] chaque
pixel I(mi,nj) en a des composantes en couleurs RVB non indexes comme suit :
R : I(mi,nj,1)

V : I(mi,nj,2)

B : I(mi,nj,3)

Ce type peut tre dcompos en trois couches dimage de niveaux de gris o chaque
couche est traite comme une matrice distincte.
II.1.d Image indexe
Cest une image interprte par une matrice I * MxN+ qui contient lindices des pixels
de limage et une matrice K* Mx3+ qui contient la palette des couleurs de limage
(colormap).Chaque ligne de K donne le niveau dintensit du Rouge, du Vert, et du Bleu, de
chaque pixel pour reconstituer sa couleur unique. Ce type peut tre converti en RVB(RGB)
rel ou en niveau de gris (Grayscale) par les fonctions prtes de la boite outils image de
Matlab : ind2rgb et ind2gray
VI.2 Le code Matlab final :
Ce programme est modulaire, compos dun script dexcution principale : codec_jpeg.m et
des scripts suivants : init_jpeg.m init_indices_zigzag.m codage_jpeg.m decodage_jpeg.m .

codec_jpeg.m
% \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
% Programme basique sur la compression JPEG d'image fixe monochrome
% Version : 1.0
% Par: Azoug SeifEddine
% http://dynelectrons.net76.net
% dynelectrons@dynelectrons.net76.net
% Fait le: 01/01/2011
% \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
clear
% Chargement de la matrice image monochrome sur Matlab qui seras sous format entier
uint8
% et la convertir en double pour les calcul
img_originale = double(imread('zohrap.bmp'));
% Si Image a un espace de couleur RVB ou autre que monochrome,elle doit tre convertie
% img_originale = rgb2gray(img_originale);
dim_bloc = 8; %dimension 8x8 des sous blocs
init_jpeg;
% Dclaration et initialisation des variables ncssaires (voir:
init_jpeg.m)

%Dcodage et dcompression (Voir: codage_jpeg.m)


codage_jpeg
%Dcodage et dcompression (Voir: decodage_jpeg.m)
decodage_jpeg
%Affichage de l'image originale,de sa DCT,et de l'image dcompress.
figure(1)
subplot(1,3,1)
imshow(uint8(img_originale))
title('Image Originale');
subplot(1,3,2)
imshow(jpeg)
title('DCT');
subplot(1,3,3)
imshow(uint8(img_decompresse))
title('Image dcompresse');
figure(2)
subplot(2,2,1)
imshow(uint8(img_originale(112:120,120:128)))
title('Sous bloc de l''mage Originale');
subplot(2,2,2)
imshow(uint8(img_decompresse(112:120,120:128)))
title('Sous bloc de l''mage Compresse');
%Evalutation du Taux de compression
for i=1:8:m
for j=1:8:n
eval([ sprintf('taille_img_compresser = taille_img_compresser +
numel(hcode_%d_%d);',i ,j)]);
end
end
taille_originale = dim_img
taille_img_compresser
taux_compression =
taille_originale / taille_img_compresser
%Evaluation de l'erreur quandratique moyenne EQM
somme=0;
for(i=1:m)
for(j=1:n)
somme=somme + ((img_originale(i,j) - img_decompresse(i,j))^2);
end
end
EQM=somme/(m*n)
%Calcul de la valeur crte du rapport signal sur bruit Peak to noise ratio PSNR
bit=8;
PSNR=10*log10(((2^bit-1)^2)/EQM)
%Calcul des bits par pixel Bpp.
bpp = taille_img_compresser / dim_img % Fichier image compress / nombre de pixels

init_jpeg.m
% Dclaration des variables et initialisation des constantes
jpeg = ones(size(img_originale)); % Matrice JPEG qui va contenir l'image compresse
jpeg_deco = ones(size(jpeg)); % Matrice qui va contenir l'image dcompress
offset = ones(dim_bloc,dim_bloc)*128; %Matrice 8x8 pour "Level Shifting".
DCT = dctmtx(dim_bloc); % Matrice C pour le calcul de F
% rcupration des dimensions de l'image.
[m,n] = size(img_originale);
dim_img = m*n;
%Matrice ou table de quantification Q (Standard JPEG)
quantizer =...
[...
16 11 10 16 24 40 51 61; ...
12 12 14 19 26 58 60 55; ...
14 13 16 24 40 57 69 56; ...
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 ... ];
%Vecteur du scan Zigzag
zigzag = ones([1 dim_img]);
%Fonction de rcupration des indices du scan zigzag (voir init_indices_zigzag.m)
[col lig] = init_indices_zigzag(dim_bloc);
%Vecteur du codage/dcodage RLE et codage/dcodage Huffman
rle = [];
rle_deco = [];
huff_deco = [];
% Constantes utiles
taux_compression = 0;
taille_img_compresser = 0;
dec_l = 0;
dec_c = 0;
redondance = 0;
col_rle_p = 1;
k = 1;
z =1;
d=0;

init_indices_zigzag.m
%Cette fonction permet de crer deux matrices
%Une matrice ligne lig et une matrice colone "col"
%Chaque matrice va contenir respectivement indices ligne et colonnes
%Ces indices vont aid a faire le scan zig zag pour un sous bloc 8x8.
function [col,lig]=init_indices_zigzag(dim_bloc)
col = ones([1 (dim_bloc * dim_bloc)]);
lig = ones([1 (dim_bloc * dim_bloc)]);
lig(1) = 1;
k=2;
r=1;
for x=3:2:dim_bloc
for j=1:x
lig(k) = j;
k = k + 1;
end
for j=x-1:-1:1

lig(k) = j;
k = k + 1;
end
for j=1:x-1
col(r) = j;
r = r + 1;
end
for j=x-2:-1:1
col(r) = j;
r = r + 1;
end
if(x == 7 ),
x = x+1;
for j=1:x
lig(k) = j;
k = k + 1;
col(r) = j;
r = r + 1;
end
for j=x-1:-1:1
col(r) = j;
r = r + 1;
end
for z=2:2:x
for j=x:-1:z+1
lig(k) = j;
k = k + 1;
end
for j=z:x
lig(k) = j;
k = k + 1;
end
for j=z:x
col(r) = j;
r = r + 1;
end
if(z ~= dim_bloc)
for j=x:-1:z+1
col(r) = j;
r = r + 1;
end
end
end
end
end;

codage_jpeg.m
%Boucle gnral qui va parcourir l'image en sous bloc 8x8
for i=1:dim_bloc:m
dec_l = i-1; %Dcalage vertical des sous blocs
for j=1:dim_bloc:n
dec_c = j-1; %Dcalage vertical des sous blocs
jpeg(i:i+7,j:j+7) = img_originale(i:i+7,j:j+7) - offset; % Effectuer le "Level
Shifting".
jpeg(i:i+7,j:j+7) = DCT * jpeg(i:i+7,j:j+7) * DCT';
% Appliquer DCT
(cf.[7]).

jpeg(i:i+7,j:j+7) = jpeg(i:i+7,j:j+7) ./ quantizer;

% Division par la table

Q.
jpeg(i:i+7,j:j+7) = round(jpeg(i:i+7,j:j+7));
le plus prs.
for q =1:64
zigzag(k) = jpeg(lig(q)+dec_l,col(q)+dec_c);

% Arrondir l'entier

% Effectuer un scan

ZigZag.
k = k + 1;
end
d = k - 64;
q = 1;
while(q <= 64) % Boucle While qui effectue un codage RLC sur chaque
sous bloc
if (d < dim_img) && (zigzag(d) ~= zigzag(d+1))
rle(z) = zigzag(d);
d = d + 1;
q = q + 1;
z = z + 1;
elseif (d < dim_img) && (zigzag(d) == zigzag(d+1)) &&
(zigzag(d+1) ~= zigzag(d+2))
rle(z) = zigzag(d);
rle(z+1) = zigzag(d+1);
d = d + 2;
q = q + 2;
z = z + 2;
elseif (d < dim_img) && (zigzag(d) == zigzag(d+1)) &&
(zigzag(d+1) == zigzag(d+2))&& (zigzag(d+2) ~= zigzag(d+3))
rle(z) = zigzag(d);
rle(z+1) = zigzag(d+1);
rle(z+2) = zigzag(d+2);
d = d + 3;
q = q + 3;
z = z + 3;
elseif (d < dim_img) && (zigzag(d) == zigzag(d+1)) &&
(zigzag(d+1) == zigzag(d+2))&& (zigzag(d+2) == zigzag(d+3))
redondance = 4;
rle(z) = 257;
rle(z+1) = redondance;
rle(z+2) = zigzag(d);
d = d + 3;
q = q + 4;
while (q <= 64) && (d < dim_img) && (zigzag(d) == zigzag(d+1))
redondance = redondance + 1;
q = q + 1;
d = d + 1;
end
rle(z+1) = redondance;
d = d + 1;
z = z + 3;
end
if(q == 64)
q = q+1;
end
end
% Dbut du codage Entropique de Huffman.
col_rle = z-1;
%Extraction des symboles uniques prsent dans le vecteur
%RLC.
symboles = unique(rle(col_rle_p:col_rle));
nbr_symboles = numel(symboles);
taille_block = numel(rle(col_rle_p:col_rle));

%Calcul des probabilits de chaque symboles.


table_p = ones(1,nbr_symboles);
for q = 1:nbr_symboles
itter = 0;
for r = col_rle_p:col_rle
if(rle(r) == symboles(q))
itter = itter + 1;
end
end
table_p(q) = itter / taille_block;
end
%Dressage de l'arbre de huffman et codage de chaque
%symbole de chaque sous bloc.
eval([ sprintf('dico_%d_%d = huffmandict(symboles,table_p);', i ,j)]);
eval([ sprintf('hcode_%d_%d = huffmanenco(rle(col_rle_p:col_rle),dico_%d_%d);', i ,j,i
,j)]);
col_rle_p = col_rle+1;
end
end

decodage_jpeg.m
%Dcodage Huffman
for i=1:dim_bloc:m
for j=1:dim_bloc:n
eval([ sprintf('huff_deco = [huff_deco huffmandeco(hcode_%d_%d,dico_%d_%d)];', i
,j,i ,j)]);
end
end
%Dcodage RLE
i = 1;
k = 1;
while(k <= numel(huff_deco))
if(huff_deco(k) == 257)
rle_deco(i:(i-1+huff_deco(k+1))) = huff_deco(k+2);
i = i + huff_deco(k+1);
k = k +3;
else
rle_deco(i) = huff_deco(k);
i = i +1;
k = k +1;
end
end
k=1;
for i=1:dim_bloc:m
dec_l = i-1;
for j=1:dim_bloc:n
dec_c = j-1;
%Scan zigzag inverse
for q =1:64
img_decompresse(lig(q)+dec_l,col(q)+dec_c) = rle_deco(k);
k = k + 1;
end
%quantification inverse + IDCT + Remises des niveaux (Inverse
%Level Shifting)
img_decompresse(i:i+7,j:j+7) = img_decompresse(i:i+7,j:j+7) .* quantizer;
img_decompresse(i:i+7,j:j+7) = DCT' * img_decompresse(i:i+7,j:j+7) * DCT;
img_decompresse(i:i+7,j:j+7) = img_decompresse(i:i+7,j:j+7) + offset;
end

end

VI.3 Rsultats :

Voici les rsultats pour cette image de niveau de gris 8bit 232x256 pixels de format
BMP (volumineux) et de taille 59392 bits :

FigureVI.1 Compression JPEG


taille_originale = 59392bits

taux_compression = 1.2516

taille_img_compresser = 47453bits

EQM = 25.6932 PSNR = 34.0326 bpp = 0.7990

On remarque que la taille de limage a t compress avec un taux de compression de 1.25


ce qui est acceptable on aurait pu avoir plus si on aurait pris une image plus corrole que

celle-ci. On remarque aussi que la DCT dans chaque sous blocs elle fait une concentration
des coefficients basses frquences (en blanc).
Limage na pas perdu de sa fidlit apparente, cela tant seulement visuellement
apparent, parce que lerreur quadratique moyenne nest pas nulle et gale EQM = 25.69
cela veut dire quil ya une erreur dune diffrence moyenne de 25.7 environs entre les
lments des deux matrices images mais elle nest notable seulement lchelle dun sous
bloc 8x8, o on peut remarquer cette diffrence sur la figure

FigureVI.2 Comparaison des sous bloc 8x8 de limage originale et limage compresse

Certains pixel ne sont pas les mmes dans les deux sous blocs et non pas le mme niveau
de gris, cela est due au fait que ltape de la quantification est une tape avec perte, o on
a arrondit a lentier pr aprs avoir divis sur la table Q.
Le rapport crte signal sur bruit 34 dB est acceptable ,ce qui montre quon a fait une
compression efficace en matire de taille/qualit. Le nombre de bit par pixel a t rduit
0.799 cela nous a fait perdre du poids au fichier image. Si on veut aller plus loin, on ajoute
la fonction suivante qui va gnrer dautres tables de quantification en fonction de FQ:
function quantizer = quantificateur (FQ,dim_bloc)
for i=1:dim_bloc
for j=1:dim_bloc
quantizer(i,j) = 1 + ((1 + i + j)*FQ);
end
end
Nous obtiendrons les rsultats suivants pour diffrents facteur qualit :

Pour : FQ = 10
taille_img_compresser =20820bits
taux_compression = 2.8526
EQM = 65.7042

PSNR = 29.9549 dB

bpp = 0.3506

Pour : FQ = 50
taille_img_compresser = 8978bits
taux_compression =
EQM =240.4954

6.6153

PSNR = 24.3197 dB bpp = 0.1512

Pour : FQ = 100 (maximum)


taille_img_compresser = 7716bits
taux_compression =7.6973
EQM = 435.2725

PSNR =21.7432 dB bpp = 0.1299

FigureVI.3 Compression JPEG avec un FQ=10,50,100

On remarque que plus on choisis un facteur de qualit grand, plus le taux de compression
est meilleur du fait quon augmente le seuil de la table Q mais EQM augmente aussi ce qui
va influer lefficacit de la compression constat visuellement et aussi au vue du rapport
PSNR mdiocre du fait quon a perdus beaucoup de donnes pendant ltape de
quantification et cela est devenue trs visible, ce qui rend limage exploitable certaines
limites.
VII. Conclusion
La compression JPEG pour quelle soit efficace doit tre effectue de faon optimale afin de
ne pas perdre trop en qualit de limage et en parallle rduire le poids de limage, cest-dire trouver un compromis rapport taille/qualit quest le standard JPEG.
La compression JPEG en mode codage DCT squentielle est une compression avec perte
non adapt aux besoins de prcision, mais serait le format le mieux adapt pour les
mmoires (grace aux JPEG que les appareils photo numrique ont fait leurs apparition) ou
pour le web (rapidit de transmission ),cela dit,un format nouveau a t dvelopper pour
les applications qui demande une fidlit maximum de limage trait limage rel,comme
limagerie mdicale, cest le format JPEG2000 qui a les mmes avantage du JPEG mais bas

sur une compression sans perte en utilisant une nouvelle transform appele la transform
en ondelettes.
VIII. Rfrences :
-Grard Blanchet et Maurice Charbit, Signaux et images sous Matlab ,Hermes
science publications,2001
-Aide du logiciel Mathworks Matlab R2010
-Syed Ali Khayam, The Discrete Cosine Transform (DCT): Theory and Application
http://www.egr.msu.edu/waves/people/Ali_files/DCT_TR802.pdf
-Pascal Getreuer,Image Processing with Matlab
http://www.math.ucla.edu/~getreuer/matlabimaging.html
-P-O stberg, Ume University,Compression
http://www8.cs.umu.se/kurser/TDBC30/VT05/material/lecture8.pdf
-JPEG Image Compression,Rahul Garg, Varun Gulshan

http://www.cs.washington.edu/homes/rahul/data/JPEG.pdf
-VIDEO & IMAGE COMPRESSION TECHNIQUES
http://videocodecs.blogspot.com/2007/05/image-coding-fundamentals_08.html
-Wikipedia

http://fr.wikipedia.org/wiki/JPEG
-Institut des Systmes Intelligents et de Robotique
http://www.isir.upmc.fr/UserFiles/File/clady_homepage/EPU/matlab_ti.pdf
-Girod: Image and Video Compression
http://www.icg.isy.liu.se/courses/tsbk01/material/slides/TransformCoding_ee392c_Girod.pdf
-Compression dimage,E. LE PENNEC

http://www.math.jussieu.fr/~lepennec/papers/Image2006LePennec.pdf