BE 1 –Transformation DCT – Compression d`image

Transcription

BE 1 –Transformation DCT – Compression d`image
François Tassin / Guillaume Dutertre 1
BE 1 –Transformation DCT – Compression d’image
BE ‐ La transformation en cosinus
discrète (DCT, inverse DCT) et son
application à la compression d’image
Le but de ce BE est d’étudier la compression JPEG, tout du moins une partie de la compression, à
savoir la transformation en cosinus discrète puis quantification.
Dans un premier temps, on codera une fonction MATLAB permettant d’effectuer une transformation
DCT sur une matrice de taille 8*8. Ensuite, on intègrera cette fonction dans un ensemble permettant
la compression d’images. On s’intéressera à l’influence du facteur de quantification (qui détermine la
matrice de quantification utilisée dans le processus de compression) sur le taux de compression (on
se contentera de compter le nombre de coefficients non nuls dans les matrices) et sur l’erreur entre
une image avant et après compression/décompression.
Les étapes de la compression d’une image sont les suivantes :
1) La fonction « lecture_image_bmp » renvoie les 3 matrices de dimensions 2 contenant les valeurs
de chaque composante RGB des pixels de l’image.
2) La fonction « conversion_spatial_frequantiel » convertit chaque bloc 8*8 de la matrice en
appliquant la DCT sur ces blocs, puis divise ces blocs par une matrice de quantification dont les
coefficients dépendent du facteur de quantification demandé (on utilise ici des facteurs entre 1 et
25).
3) La fonction « ecriture_jpg » se charge d’enregistrer les coefficients calculés dans un fichier.
Ajout de la fonction « m_DCT2 » dans MATLAB
On se charge d’insérer une fonction « m_DCT2 » permettant de renvoyer la transformée en cosinus
discrète d’une matrice. La formule est la suivante :
Avec DCT la matrice de sortie (après transformation), pixel celle d’entrée de taille N*N.
Voici le code MATLAB de cette fonction :
function [a] = m_DCT2(m)
[N,N] = size(m);
a = zeros(N,N);
for i=0:N-1
for j=0:N-1
if i==0
c1=1/sqrt(2);
else
c1=1;
François Tassin / Guillaume Dutertre 2
BE 1 –Transformation DCT – Compression d’image
end
if j==0
c2=1/sqrt(2);
else
c2=1;
end
for u=0:N-1
for v=0:N-1
a(i+1,j+1)=a(i+1,j+1)+1/sqrt(2*N)*c1*c2*m(u+1,v+1)*cos(pi*i/N*(u+1/2))*cos(pi*j/N*(v+1/2));
end
end
end
end
end
Application de la compression DCT à une image
On intègre cette fonction dans le processus de compression DCT, puis on applique cette compression
à une image de 352*288 pixels avec un facteur de quantification allant de 1 à 25. On observe l’image
décompressée, on calcule le facteur de compression (nombre de termes non nuls après compression
divisé par le nombre de termes au départ (353*288*3)) ainsi que l’erreur (on calcule la norme 2 de la
matrice de différence entre la matrice initiale et celle décompressée).
Voici l’image originale :
François Tassin / Guillaume Dutertre 3
BE 1 –Transformation DCT – Compression d’image
Voici quelques images obtenues après compression puis décompression pour différents facteurs de
quantification :
1
5
10
15
20
25
On remarque que plus le facteur de quantification augmente, plus la qualité diminue. En effet,
l’image paraît de plus en plus « floue » lorsque le facteur augmente, et on visualise de plus de plus le
découpage de l’image par bloc de 8*8 pixels. En effet, plus le facteur de quantification est élevé, plus
les termes de la matrice de quantification sont grands, et donc plus de termes de la matrice DCT
François Tassin / Guillaume Dutertre 4
BE 1 –Transformation DCT – Compression d’image
après quantification (division par la matrice de quantification) sont négligés, il y a donc plus de
données perdues.
Les matrices de coefficients DCT ne contiennent pas de zéros après l’application de l’algorithme de
quantification. Il faut donc choisir la valeur minimale des coefficients à garder dans la matrice et
utiliser un algorithme qui va remplacer les coefficients inférieurs à cette valeur par zéro. On choisit
de ne garder que les valeurs absolues supérieures à 1. On obtient les résultats suivants :
Compression en fonction de la quantification
Taux de compression
0,6
0,5
0,4
0,3
0,2
0,1
0
0
5
10
15
20
25
30
Indice de quantification
On remarque que le taux de compression diminue lorsque le facteur de quantification augmente,
mais non linéairement. En effet, les termes de la matrice de quantification dépendent du facteur de
quantification (de façon affine), donc lorsque l’on divise les termes de la matrice DCT par ceux de la
matrice de quantification, ces derniers évoluent de manière inversement proportionnelle au facteur
de quantification. On peut supposer que c’est la raison pour laquelle la courbe de compression
évolue de cette manière.
On observe ensuite l’erreur entre l’image originale et l’image compressée puis décompressée :
Erreur en fonction de la quantification
7000000
Norme de l'erreur
6000000
5000000
4000000
3000000
2000000
1000000
0
0
5
10
15
Indice de quantification
20
25
30
François Tassin / Guillaume Dutertre 5
BE 1 –Transformation DCT – Compression d’image
On calcule de même l’erreur moyenne que l’on divise par la valeur moyenne des termes de la
matrice de départ, on obtient le pourcentage d’erreur moyen :
Pourcentage d'erreur moyenne
Pourcentage d'erreur en fonction de la
quantification
20
15
10
5
0
0
5
10
15
20
25
30
Indice de quantification
On remarque que l’erreur augmente avec le facteur de quantification. En effet, plus on compresse
l’image de départ, plus on perd une partie de l’information, c’est pourquoi l’évolution de l’erreur est
complémentaire à celle de la compression.
Conclusion
Le procédé de compression JPEG permet en général de compresser l’image sans perte significative de
qualité. Cependant, si on cherche à diminuer de façon plus importante la taille de l’image, la perte de
qualité devient visible par l’œil humain. D’après les courbes obtenues plus haut, on peut trouver un
taux de compression optimum permettant d’effectuer un bon compromis entre une erreur faible et
une bonne compression.

Documents pareils