La Compression JPEG d Images Fixes

download La Compression JPEG d Images Fixes

of 25

Transcript of La Compression JPEG d Images Fixes

  • 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. Introduction

    II. Rappel sur limage numrique

    II.1 Dfinition

    II.2 Notions de pixel et espace de couleur

    III. Rappel sur la compression des images

    III.1 Compression sans pertes

    III.2 Compression avec pertes

    III.3 Processus gnral dun codec dimages fixes

    IV. 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

    V. 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

    VI. Mise en uvre sous Matlab

    VI.1 Reprsentation des images sous Matlab :

    VI. 2 Code final

    VI.3 Rsultats

    VII. Conclusion

    VIII. 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.

  • Compression Dcompression

    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

    Ligne de transmission

    Image reconstitue

    Mmoriser Demander

    Figure III.1 Principe de la compression image

    Mmoire

  • 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.

  • Canal de transmission

    Dcodage Canal

    Dcodage Source

    Image reconstitue

    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

    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).

    Image originale

    Codage Source

    Codage Canal

    Canal de transmission

  • Image originale

    dcompose en sous blocs

    NxN

    Codage par transformation Quantificateur

    Codage des symboles

    Vers Codage Canal

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

    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.

    Fig III.3 Codage source dimages fixes

  • 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.

  • 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 sous-

    bloc 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.

    Image originale

    Divisision de l'image en sous-bloc 8x8

    (ou 16x16)

    DCT 2D 8x8

    (ou 16x16) Quantificateur

    Cofficients DC: Codage prdctive

    DPCM

    Coffcients AC: scan Zig-Zag +

    codage RLC

    Codage entropique:

    Huffman

    Canal de transmission

    Dcodage entropique: Huffman

    Coffcients AC: dcodage RLC+

    scan Zig Zag inverse

    Coffcients DC: inverse DPCM

    Quantificateur inverse

    IDCT 8x8

    (ou 16x16)

    Fusion des sous blocs 8x8

    (ou16x16)

    Image dcompresse

    Table de

    quantification

    Table de quantification Table codage Huffman

    Offset

    Offset

  • 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 :

    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 2 2 2 1 0 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 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

    RLC : -25 @ 5 2 1 0 1 @ 5 0 -1 EOB

    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.

    Coefficient DC

  • 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]

    -3 [0,1,1,0]

    -1 [0,0,0,1]

    0 [1,0]

    1 [0,1,0]

    2 [0,0,0,0]

    5 [0,0,1,1]

    EOB [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 1 1 0 1 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 % [email protected] % 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)); % Arrondir l'entier

    le plus prs.

    for q =1:64 zigzag(k) = jpeg(lig(q)+dec_l,col(q)+dec_c); % Effectuer un scan

    ZigZag. k = k + 1; end

    d = k - 64; q = 1; while(q

  • %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

  • 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

    taille_img_compresser = 47453bits

    taux_compression = 1.2516

    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 = 6.6153

    EQM =240.4954 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