Vous êtes sur la page 1sur 2

M1 RSD - TP Multimédia USTHB 2022/2023

TP N° 4 - La compression jpeg

Appliquer la DCT sur une image :

Nous allons appliquer la DCT sur une image, en utilisant OpenCV.


Les étapes à suivre sont :
- Charger une image avec « imread » en faisant attention à mettre le 2ème paramètre à zéro afin
d’avoir une image à un seul canal.
- Convertir l’image en une matrice de float : img32 =img.astype('float')
- Appliquer la DCT sur l’image avec la fonction OpenCV : imgDCT = cv.dct(img32).
- Afin d’afficher l’image transformée avec la DCT, on normalise la matrice « img32 » dans
l’intervalle [0,1] en la divisant par 255 et après avoir appliquer la DCT, on convertit la matrice résultat
en 8 bits qu’on multiplie par 255 pour avoir des niveaux de gris :
img32 = img.astype('float') / 255.0
imgDCT = cv.dct(img32)
imgDCT = imgDCT.astype('uint8') * 255.0

Appliquer la DCT inverse sur une image transformée :


Afin de retrouver l’image originale :
- On applique la DCT inverse sur l’image transformée de type « float » : img2 = cv.idct(imgDCT)
- On convertit le résultat en 8 bits et on affiche l’image : img2 = img2.astype('uint8')

La compression Jpeg :
Nous allons appliquer les deux premières étapes de la compression jpeg, la transformation et la
quantification, faire leurs inverses et afficher l’image résultat en testant des facteurs de quantification
différents.
1- On commence par diviser l’image en blocks 8x8.
On calcule le nombre de blocks sur la largeur et la hauteur de l’image. Dans le cas où le nombre de
blocks n’est pas un entier, compléter avec des zéros en utilisant la fonction numpy :
pad(img, ( (haut, bas) , (gauche, droite)), ‘constant’).
2- Parcourir l’image block par block pour y appliquer la DCT.
M1 RSD - TP Multimédia USTHB 2022/2023

3- Créer une matrice de quantification de taille 8x8 afin de diviser les coefficient DCT. On
peut utiliser la fonction numpy : fromfunction(lambda i, j : 1+(1+i+j) * Fq , (8,8) , dtype =int).
Fq étant le facteur de quantification.
4- Diviser chaque block par la matrice de quantification. Ne pas oublier de ne garder que la
partie entière de la division.
5- Reconstituer l’image originale en multipliant les données quantifiés par la matrice de
quantification, puis appliquer la DCT inverse pour chaque block.
Penser à convertir l’image en « float » avant d’appliquer la DCT et à le convertir en « uint » après
avoir appliqué la DCT inverse (comme vu précédemment).
6- Tester différents facteur de quantification.

Vous aimerez peut-être aussi