LP SEICOM – TP : Transformation DCT & Compression JPEG
Objectifs du TP
- Analyser les 64 fonctions de base de la DCT 8×8 pour comprendre la décomposition fréquentielle spatiale.
- Représenter une image par blocs DCT et évaluer la concentration d’énergie.
- Mettre en œuvre et quantifier l’effet de la quantification sur la qualité reconstruite (PSNR).
1. Fonctions de base de la DCT
1.1 Méthodologie
Nous générons l’ensemble des bases DCT 8×8 via basisgrid(8).
Chaque bloc 8×8 correspond à une paire de fréquences spatiales (u,v) :
u horizontal, v vertical.
Ces bases sinusoïdales permettent de décomposer tout motif image en composantes orthogonales.
1.2 Extrait MATLAB
% 1. Fonctions de base DCT 8×8
N = 8;
B = basisgrid(N);
figure; imshow(B, []);
title('64 fonctions de base DCT 8×8');
1.3 Résultats & Analyse
Les basses fréquences portent l’essentiel de l’énergie visuelle (zones uniformes), tandis que les hautes fréquences codent les détails et contours. Cette séparation justifie la quantification plus agressive sur les composantes élevées.
2. Décomposition et analyse par blocs
2.1 Chargement et DCT
Nous chargeons « lena.pgm » en double précision puis appliquons
la DCT 2D sur chaque bloc 8×8 via blockproc.
2.2 Extrait MATLAB
im = double(imread('lena.pgm'));
imdct = blockproc(im, [8 8], @(b) dct2(b.data));
figure; imshow(log(abs(imdct)), []);
title('Coefficients DCT (échelle logarithmique)');
2.3 Résultats & Analyse
Le coefficient DC (u=v=0) correspond à la moyenne de chaque bloc. La décroissance rapide des coefficients AC illustre la forte corrélation spatiale.
2.4 Nombre de coefficients pour 99 % de l’énergie
imci = blockproc(imdct, [8 8], @(b) nbcoef(b.data));
b = imci(1:8:end, 1:8:end);
avg_nb = mean(b(:));
fprintf('Moyenne ≈ %.2f coefficients pour 99%% de l''énergie\n', avg_nb);
Résultat : en moyenne 11 coefficients suffisent sur 64 pour restituer 99 % de l’énergie.
3. Reconstruction par DCT inverse
3.1 Extrait MATLAB
imrec = blockproc(imdct, [8 8], @(b) idct2(b.data));
err = im - imrec;
figure; imshow(uint8(imrec));
title('Image reconstruite (IDCT)');
3.2 Résultats & Analyse
La reconstruction IDCT restitue exactement l’original pour un quantificateur unitaire, validant l’orthogonalité et l’exactitude numérique de la DCT.
4. Quantification des coefficients DCT
4.1 Méthodologie
On applique la quantification uniforme :
F’(u,v) = round( F(u,v) / (λ·Q(u,v)) ),
avec Q la table standard luminance et λ le facteur qualité.
4.2 Extrait MATLAB
Q = stdQ();
lambdas = [0.25 0.5 2 4 8];
psnr = zeros(size(lambdas));
for k = 1:length(lambdas)
L = lambdas(k);
P = L * Q;
imq = blockproc(im, [8 8], @(b) round(dct2(b.data) ./ P));
imdq= blockproc(imq,[8 8], @(b) idct2(b.data .* P));
mse = mean((im - imdq).^2, 'all');
psnr(k) = 10*log10(255^2 / mse);
fprintf('λ=%.2f → PSNR=%.2f dB\n', L, psnr(k));
end
figure;
plot(lambdas, psnr, '-o', 'LineWidth',1.5);
xlabel('\lambda'); ylabel('PSNR (dB)');
title('Évolution du PSNR en fonction de \lambda');
grid on;
4.3 Résultats & Analyse
- λ=0.25 : PSNR élevé (~40 dB) → quasi imperceptible.
- λ=8 : PSNR faible (~20 dB) → artefacts visibles.
La courbe confirme la relation inverse entre le pas de quantification et la qualité perçue.