Académique Documents
Professionnel Documents
Culture Documents
Travail préparatoire:
1
2 3 4 5
Coefficients Coefficients
Mot
d'Huffm ann
Coeff. DC Coeff. AC
BF
HF
Un seul bloc de
8x8 pixels ou
Suivant une table de Ordonnem ent des coefficients
coefficients
quantification: suivant un ordre prédéfini:
b)
1ère étape:
On divise l'image en blocs de 8x8 pixels.
2ème étape:
On applique une Transformée en Cosinus Discrète à chacun des blocs. On obtient alors des
coefficients représentant les différentes fréquences de l'image pour un canal donné. En haut à
gauche se trouve les basses fréquences, en bas à droite les hautes fréquences.
3ème étape:
On quantifie différement les coefficients suivant la fréquence. Dans la norme JPEG il existes 4
tables de quantification différentes suivant la compression voulue. Cette technique a pour but de
supprimer les hautes fréquences, qui sont moins visibles par l'oeil humain ( voir courbe Nill).
4ème étape:
On classe les coefficients suivant un ordre en zig-zag.
5ème étape:
On procède au codage entropique, c'est à dire que l'on passe d'une suite de coefficients à une suite
de zéros et de uns:
On code le coefficient DC du bloc traité en le soustrayant au coefficient DC du bloc précédent. On
appelle ça un codage différentiel.
Après zig-zag
On obtient désormais le mot d'Huffman différentiel. Pour le décodage on effectue les mêmes étapes
dans le sens inverse.
c) Les pertes sont dûes à la quantification où l'on est obligé d'arrondire à l'entier le plus proche,
lorsque l'on fait le décodage, les valeurs de l'image d'origine ne sont donc pas retrouvées. On
exploite les redondances fréquentielles de l'images ainsi que les redondances entre chaque bloc des
coefficients DC.
Il s'agit d'implémenter la DCT à une dimension de taille 8, sous forme de produit matrice-vecteur.
Questions:
1.La propriété utilisée dans la fonction dct2.m est que l'on applique deux DCT unidimensionnelle,
une suivant les lignes, puis suivant les colonnes.
2.Dans la fonction dct.m (voir fichier dct,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.
[X]=[phi].[x].transposée[phi]
On veut retrouver la matrice de transformation (ou noyau) phi sans calcul, en utilisant la fonction
idct2 pour faire ressortir chaque vecteur en fonction de k,l .
Pour trouver phi(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 8*8 pixels qui correspondent à chaque idct2(X(k,l)).
On obtient:
BF
HF
TP3 de com pression – Master 1 DREAM Valenciennes – Avril 2008 – page 3
Traitement de l'image par bloc (voir fichiers dctprog, filtrepdc, filtrepdc3ac, energie.m)
L'image est découpées en blocs de tailles 8x8 pixels pour appliquer à chacun d'entre eux une DCT.
On obtient:
DCT
L'image étant très uniforme dans les noirs, on observe des pics « blancs » pour les basses fréquences
de chaque bloc.
2. On veut maintenant représenter l'énergie moyenne de chaque bloc, pour cela on créer une
fonction 'energie' qui fait la moyenne du carré de la DCT:
function[z]= energie(x)
xcarr=x.^2;
z=mean(mean(xcarr)); %deux fois à cause de la 2D
DC AC AC AC... DC 0 0 0...
Image DCT
AC AC AC 0 0 0
DCT-1 Affichage
AC AC FILTRE 0 0
originale AC 0
... ...
Filtre PB: on
ne laisse que
le coeff . DC
z=zeros(8,8);
z(1,1)=x(1,1);
energie:
>> z3 = blkproc(y,[8 8],'energie'); %energie coeff. DC + AC
>> mean(mean(z3)) %moyenne
ans =
337.7911
ans =
282.5740
*De la même manière on filtre en gardant les coeff. DC mais en gardant aussi les 3 coefficients AC
voisins du DC.
ans =
316.4551
3. On réalise maintenant un programme dctprog.m qui va afficher au fur à mesure l'image avec plus
de détails. C'est à dire en prenant 1 puis 4, 9, 16, 25, 36, 49, 64 premiers coefficients en fréquences
de chaque bloc, séparé par une temporisation pour mieux visualiser l'influence des coefficients.
Lignes de commandes:
>>load lena512
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
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, 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.
ligne de commande:
>>load lena512
>>codec(lena512,8)
5-6. On reporte les mesures du rapport signal à bruit calculé par le programme dans un tableau
comparant trois images avec 4 facteurs de table de quantif' différents.
Le psnr est donné par la formule:
où
En matlab cela donne:
>>d=255; %amplitude max d'un pixel
>>eqm=mean(mean((abs(originale-reconstruite))^2)); %moyenne sur 2 dimensions
>>psnr=10*log10((d^2)/eqm)
Le tableau:
Facteur qualité psnr(LENA)
0,5 13,35
1 11,50
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.
Résultats:
Facteur qualité débit(bits/pixel)
0,1 2,19
0,5 1,03
1 0,66
2 0,37
4 0,30
8 0,29