0% ont trouvé ce document utile (0 vote)
113 vues4 pages

Compression d'images : TP sur JPEG

Le document décrit les étapes de la compression d'images JPEG. Il présente les étapes de codage avec perte incluant la DCT, la quantification et le codage sans perte tel que le codage RLE et de Huffman. Le but est de programmer ces étapes et d'analyser leur effet sur le taux de compression et la qualité de l'image.

Transféré par

zatara
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
113 vues4 pages

Compression d'images : TP sur JPEG

Le document décrit les étapes de la compression d'images JPEG. Il présente les étapes de codage avec perte incluant la DCT, la quantification et le codage sans perte tel que le codage RLE et de Huffman. Le but est de programmer ces étapes et d'analyser leur effet sur le taux de compression et la qualité de l'image.

Transféré par

zatara
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Master GE Compression d’images TP1

COMPRESSION JPEG
Objectif
L’objectif du TP est l’étude et la réalisation des différents blocs du codeur JPEG. On demande
de programmer les différents blocs réalisant une compression de l’image et analyser leurs effet
sur le taux de compression et sur la qualité de l’image.

Principale étape de compression


La chaine de compression/décompression JPEG peut être regroupée en deux classes : le
codage/décodage avec perte et le codage/décade sans perte.

Partie I : Codage avec perte


Le principe de base de la compression JPEG consiste à effectuer sur chaque bloc LxL de l’image
(L=8) les opérations représentées sur le schéma suivant :

1) Ecrire une fonction, que l’on appellera "coder.m" qui regroupe les étapes suivantes :
• Calculer la DCT d’une image Img (pour cela on utilisera
la fonction Matlab "dct2.m"). Le calcul se fait par fenêtre
de 8x8.
• Calculer les indices de quantification sur les blocs
transformés de taille LxL. Pour cela on divise les coefficients par une matrice Q, et
on conserve uniquement la partie entière
• Retourner l’ensemble des blocs transformés indicés (dans une matrice de mêmes
dimensions que l’image originale).
La syntaxe d’appel de cette fonction devra être : [ImgTr] = coder(Img,L,Q).

2) Donner un script de programme principal pour faire les tests. On écrira un programme
principal qui utilise la fonction coder de la question précédente. On définira dans ce
programme une matrice de quantification standard de la norme JPEG, donnée par :
Master GE Compression d’images TP1

Q_Stand=
[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]

3) Ecrire la fonction de décodage : [ImgRec] =decoder(ImgTr,L,Q) qui :


• pour chaque bloc d’indices (pixels transformés), multiplie
ceux-ci par les pas de quantification correspondants
(multiplication de matrices point à point) pour obtenir le
bloc transformé quantifié,
• puis on calcule la DCT inverse (idct2.m).

4) Compléter le programme principal pour faire des tests des fonctions coder et decoder

5) Ecrire la fonction [D]=distimage(Img,Imgrec) qui calcule la distorsion moyenne (écart


quadratique moyen) entre l’image originale et l’image reconstituée.

6) On demande de tester les fonctions définies précédemment sur une image pour différentes
matrices de quantification Q :
• avec une quantification optimale utilisant la matrice de ‘pas’ définie dans le standard
JPEG.
• avec une quantification uniforme : Q= q*ones(L,L) où q=5.
• avec des versions dégradées de ces matrices (c'est-à-dire avec des pas de
quantification multipliés par un facteur 2p, à essayer pour p = 1 (réduction d’un bit
par pixel a priori) et p=2 (réduction de 2 bits par pixel).

7) Tracer les histogrammes des indices de quantification obtenus dans chaque cas de la
question précédente.
Interpréter ces histogrammes en mettant l’accent sur les points suivants :
• estimation du nombre de bits nécessaires (sans faire appel à une technique de codage
sans pertes) pour transmettre à priori les indices de quantification (pixels
transformés).
• remarque sur le nombre de valeurs nulles.
Master GE Compression d’images TP1

Partie II : Codage sans perte


On trouve dans le codeur JPEG deux blocs qui permettent d’effectuer une compression sans
perte : le codage RLC « Run Length Coding » (ou RLE « Run-Length Encoding ») et le
codage de Huffman.

1) Lecture en zigzag et Run Length Coding


Chacun des blocs DCT quantifiés obtenus est lu en zigzag, de manière à regrouper les
coefficients non nuls.

La fonction donnée ci-après permet d’effectuer un zigzag sur les indices d’une matrice carrée
M de NxN éléments, pour l’utiliser on écrit R = M(zigzag(N)).
function ind = zigzag(N);
K = 2;
M = N-1;
ind = zeros(1,N*N);
for i=[1:M];
ind(K:K+i) = [(1+M*rem(i,2)), (-1)^i*M*ones(1,i)];
K = K+i+1;
end
for i=[M-1:-1:0]
ind(K:K+i) = [(N-M*rem(i,2)), (-1)^i*M*ones(1,i)];
K = K+i+1;
end
ind = cumsum(ind)+1;
return

a. expliquer les étapes de cette fonction


b. introduire cette fonction dans le programme de compression
c. écrire une fonction pour réaliser le codage RLC (de type {longueur plage nulle, valeur})
d. appliquer le RLC sur les coefficients calculés par la fonction coder( ) de la partie I
Master GE Compression d’images TP1

2) Codage sans pertes – Codage de Huffman


Le programme suivant permet de faire un codage de Huffman des coefficients d’un vecteur
Im_dctq
temp=1
temp2=0
[row, col] = size(Im_dctq);
pixel_count = row*col;
symbol = reshape(Im_dctq,[1,row*col]);

symbol1 = unique(symbol);
len = length(symbol1);
for i = 1:len
k = Im_dctq==symbol1(i);
count(temp) = sum(k(:));
prob_pix(temp) = double(count(temp)/pixel_count);
temp2 = temp2 + prob_pix(temp);
prob_cum(temp) = temp2;
temp = temp+1;
end
[dict,avg_len] = huffmandict(symbol1,prob_pix);

a. Expliquer les étapes de cette fonction.


b. Introduire cette fonction dans le programme de codage complet.
c. Faire des expérimentations sur des images pour vérifier l’effet de la compression
JPEG.

Vous aimerez peut-être aussi