ACADEMIE MILITAIRE DIRECTION DE L’ENSEIGNEMENT
FONDOUK JEDID UNIVERSITAIRE
Spécialité Télécommunications Classé 1
ème
année Télécom
Matiéré Codage image et vidéo Daté Avril 2026
TP n° 1 Codage JPEG par Matlab
Objectif général
L’objectif de ce TP est de comprendre les principales étapes du standard JPEG à travers la réalisation d’un
code MATLAB permettant :
- le codage d’une image couleur RGB
- la génération d’un fichier compressé .jpg
- le décodage JPEG
- l’analyse de la qualité après compression
Partie 1 : Codage JPEG
1) Travail demandé : Réaliser sous MATLAB une fonction : codage_jpg(), ayant comme paramètre
d’entrée : une image couleur de type RGB.
2) Prototype proposé : function codage_jpg(imgRGB, nom_fichier)
Exemple d’utilisation de la function programmée.
img = imread('image_test.bmp');
codage_jpg(img,'[Link]');
3) Les étapes de programme
Étape 1 : Lecture de l’image
Lire l’image RGB : img = imread('image_test.bmp');
Afficher les dimensions (H,W).
Étape 2 : Transformation RGB → YCbCr
Convertir l’image vers l’espace :
Y : luminance
Cb : chrominance bleue
Cr : chrominance rouge
Boucle sur les 3 composantes.
Étape 3 : Découpage en blocs 8×8
Pour chaque composante, parcourir l’image par blocs 8×8 (prendre les mesures nécessaires si les dimensions
ne sont pas multiples de 8)
𝑓𝑜𝑟 𝑖 = 1: 8: 𝐻
𝑓𝑜𝑟 𝑗 = 1: 8: 𝑊
Étape 4 : Appliquer la DCT 2D
Pour chaque bloc : 𝐷 = 𝑑𝑐𝑡2(𝑏𝑙𝑜𝑐)
Étape 5 : Quantification
Utiliser la matrice JPEG standard : 𝑄
Puis : 𝐶𝑞 = 𝑟𝑜𝑢𝑛𝑑(𝐷./𝑄)
Étape 6 : Zigzag
Transformer la matrice 8×8 en vecteur 1×64.
Étape 7 : Codage entropique
Appliquer :
- RLE sur les zéros
- puis codage arithmétique (ou Huffman simplifié)
Étape 8 : Génération du fichier JPEG
Créer un fichier : nom_fichier.jpg
Enregistrer :
- entête JPEG minimal
- tables de quantification
- données compressées
Étape 9 : Vérification
Sous Windows/Linux :
- vérifier que le fichier s’ouvre
- comparer avec image originale
Code Matlab :
%% ===============================================================
% TP JPEG - Version MATLAB 2015
% Codage JPEG simplifié + Décodage JPEG
% Fichiers :
% codage_jpg.m
% decodage_jpg.m
%
% Remarque :
% Ce programme reproduit les étapes JPEG :
% RGB -> YCbCr -> blocs 8x8 -> DCT -> Quantification
% puis reconstruction.
%
% Il génère aussi un vrai fichier JPG via imwrite().
% ===============================================================
%% ===============================================================
% Fichier : codage_jpg.m
% ===============================================================
function codage_jpg(imgRGB, nom_fichier)
clc;
if nargin < 2
nom_fichier = '[Link]';
end
imgRGB = uint8(imgRGB);
[H,W,C] = size(imgRGB);
fprintf('\n===== CODAGE JPEG =====\n');
fprintf('Taille image : %d x %d\n',H,W);
fprintf('Nombre voies : %d\n',C);
%% Matrice de quantification JPEG standard
Q = [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];
%% Conversion RGB -> YCbCr
imgYCbCr = rgb2ycbcr(imgRGB);
imgRec = zeros(H,W,3);
for k = 1:3
comp = double(imgYCbCr(:,:,k));
% Padding si nécessaire
H8 = ceil(H/8)*8;
W8 = ceil(W/8)*8;
temp = zeros(H8,W8);
temp(1:H,1:W) = comp;
for i = 1:8:H8
for j = 1:8:W8
bloc = temp(i:i+7,j:j+7);
% Décalage JPEG
bloc = bloc - 128;
D = dct2(bloc); % Calcul DCT
Cq = round(D./Q); % Quantification
imgRec{i:j,:k} =Cq;
end
end
end
%% Sauvegarde JPG réel
imwrite(imgRec,nom_fichier,'jpg');
fprintf('Fichier cree : %s\n',nom_fichier);
%% Taille fichier
info = dir(nom_fichier);
fprintf('Taille fichier JPEG : %.2f Ko\n',[Link]/1024);
end