Source
Source
Compte Rendu
Travaux Pratiques
Thèmes abordés :
• Codage RLE (Run Length Encoding)
• Entropie et Information propre
• Codage de Huffman
• Codage Arithmétique
• Codage par dictionnaire LZW
Encadrant : F. ABDI
Année universitaire : 2023–2024
Table des matières
2 Codage RLE 5
2.1 Principe du codage RLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.2 Code MATLAB – Fonction rle.m . . . . . . . . . . . . . . . . . . . . . . . 5
2.3 Code MATLAB – Décodage RLE . . . . . . . . . . . . . . . . . . . . . . . 6
2.4 Application et résultats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
4 Codage Arithmétique 15
4.1 Principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
4.2 Code MATLAB – Encodage arithmétique entier . . . . . . . . . . . . . . . 15
4.3 Code MATLAB – Décodage arithmétique . . . . . . . . . . . . . . . . . . . 16
4.4 Application et comparaison avec Huffman . . . . . . . . . . . . . . . . . . 17
5 Codage LZW 19
5.1 Principe de l’algorithme LZW . . . . . . . . . . . . . . . . . . . . . . . . . 19
5.2 Code MATLAB – Encodage LZW . . . . . . . . . . . . . . . . . . . . . . . 19
5.3 Code MATLAB – Décodage LZW . . . . . . . . . . . . . . . . . . . . . . . 20
5.4 Programme de démonstration lzw_demo1.m . . . . . . . . . . . . . . . . . 21
5.5 Application à la séquence [Link] : ABCDABCBEB . . . . . . . . . . . . . . . 22
5.5.1 Déroulement manuel de l’encodage LZW . . . . . . . . . . . . . . . 22
1
TP – Théorie de l’Information et Codage Source SICOM S6 – FST Fès
2
1. Introduction et rappels théoriques
1.1 Objectifs du TP
Ce TP a pour objectif de mettre en œuvre les principaux algorithmes de compression
de données sans perte (lossless) étudiés en cours. Ces méthodes constituent la base des
formats de compression courants (ZIP, GZIP) et sont intégrées dans les standards d’image
(PNG, GIF, JPEG). Nous étudierons successivement :
— Le codage RLE appliqué à des images binaires ;
— Le calcul de l’entropie d’une source discrète ;
— Le codage de Huffman (code à longueur variable optimal) ;
— Le codage arithmétique (approche par intervalles) ;
— Le codage LZW (algorithme à dictionnaire).
avec la convention 0 · log2 (0) = 0. L’entropie est maximale lorsque tous les symboles
sont équiprobables : Hmax = log2 (m).
Remarque
L’entropie est la limite inférieure théorique du nombre moyen de bits nécessaire
pour coder une source sans perte (théorème de Shannon). Tout code sans perte a une
longueur moyenne L̄ ≥ H(S).
3
TP – Théorie de l’Information et Codage Source SICOM S6 – FST Fès
L̄ − H(S)
R= × 100% (redondance) (1.4)
H(S)
4
2. Codage RLE
5
TP – Théorie de l’Information et Codage Source SICOM S6 – FST Fès
6 L = prod ( img_size ) ;
7 image = zeros (1 , L ) ;
8 x = 0; % On commence par les ’0 ’
9 pos = 1;
10
11 for i = 1: length ( code )
12 run = code ( i ) ;
13 if run > 0
14 image ( pos : pos + run -1) = x ; % Remplir avec la valeur courante
15 pos = pos + run ;
16 end
17 x = 1 - x; % Alterner 0 <-> 1
18 end
19
20 image = reshape ( image , img_size (2) , img_size (1) ) ’; % Reformatage
5 % Codage RLE
6 cr = rle ( c ) ;
7 cr = uint16 ( cr ) ; % Conversion en uint16 ( max 65535 repetitions )
8 whos c cr % Comparaison des tailles
Résultats
Pour une image binaire telle que [Link] (image de cercles sur fond noir) :
— Si l’image est de taille 256 × 256 = 65 536 pixels, le vecteur c occupe 65 536
octets.
— Après codage RLE, le vecteur cr peut ne contenir que quelques centaines d’élé-
ments uint16 (2 octets chacun), soit environ 500–1000 octets dans le meilleur
cas.
— Taux de compression typique : τc ≈ 30 à 100, soit une réduction de 97–99%
pour une image très redondante.
6
TP – Théorie de l’Information et Codage Source SICOM S6 – FST Fès
Interprétation
Pourquoi uint16 ? Le type uint8 ne peut représenter que des valeurs jusqu’à 255.
Si une plage de 0 ou de 1 dépasse 255 pixels consécutifs, il faut uint16 (max 65535).
La commande whos confirme que cr a une taille mémoire nettement inférieure à c.
Efficacité du RLE : Elle est maximale pour des images avec de longues plages ho-
mogènes (images binaires, fax). Elle est nulle ou négative pour des images naturelles
(textures, photographies) où les valeurs changent fréquemment.
7
3. Entropie et Codage de Huffman
Calcul de l’entropie :
X
H(f ) = − pi log2 (pi )
i
= − (0,5 log2 (0,5) + 2 × 0,1875 log2 (0,1875) + 0,125 log2 (0,125))
= − (0,5 × (−1) + 2 × 0,1875 × (−2,415) + 0,125 × (−3))
= 0,5 + 0,9056 + 0,375
≈ 1,906 bits/symbole (3.1)
8
TP – Théorie de l’Information et Codage Source SICOM S6 – FST Fès
11
12 % Masque pour eliminer les zeros ( log2 (0) = - Inf )
13 i = find ( xh ) ;
14 p = xh ;
15 h = - sum ( xh ( i ) .* log2 ( xh ( i ) ) ) ; % Formule de Shannon
1 % Definition de la matrice
2 f = [119 123 168 119; 123 119 168 168];
3 f = [ f ; 119 119 107 119; 107 107 119 119];
4
5 % Calcul de l ’ entropie
6 [h , p ] = entropy ( f ) ;
7 fprintf ( ’ Entropie de f = %.4 f bits / symbole \ n ’ , h ) ;
8
9
TP – Théorie de l’Information et Codage Source SICOM S6 – FST Fès
30 codebook (1: lp ) = { ’ ’ };
31 ps = npos ;
32 np = lp ;
33 cb = zeros ([ lp -1 3]) ;
34 cnt = lp + 1;
35 prb = prs ;
36
37 for i = 1: lp -1
38 fst = ps ( np -1) ;
39 sec = ps ( np ) ;
40
41 % Affectation des bits 0 et 1
42 if fst <= lp
43 codebook ( fst ) = strcat ( ’0 ’ , codebook ( fst ) ) ;
44 else
45 codebook = encod ( fst , cb , codebook , ’0 ’ , lp ) ;
46 end
47
48 if sec <= lp
49 codebook ( sec ) = strcat ( ’1 ’ , codebook ( sec ) ) ;
50 else
51 codebook = encod ( sec , cb , codebook , ’1 ’ , lp ) ;
52 end
53
10
TP – Théorie de l’Information et Codage Source SICOM S6 – FST Fès
11
TP – Théorie de l’Information et Codage Source SICOM S6 – FST Fès
21 lp = length ( prob ) ;
22 fprintf ( ’\ n % -6 s % -8 s % s \ n ’ , ’ Symbole ’ , ’ Prob ’ , ’ Code Huffman ’) ;
23 fprintf ( ’% s \ n ’ , repmat ( ’ - ’ , 1 , 40) ) ;
24 for i = 1: lp
25 fprintf ( ’ % s : %.4 f : % s \ n ’ , ...
26 huf ( i ) . sym , huf ( i ) . prob , huf ( i ) . code ) ;
27 end
28
29 fprintf ( ’\ nEntropie = %.4 f bits / symbole \ n ’ , entropie ) ;
30 fprintf ( ’ Longueur moy = %.4 f bits / symbole \ n ’ , longmoyen ) ;
31 fprintf ( ’ Redondance = %.2 f %%\ n ’ , redondance ) ;
32
12
TP – Théorie de l’Information et Codage Source SICOM S6 – FST Fès
Entropie :
H = 0,4644 + 0,5288 + 0,4644 + 0,3322 + 0,3322 = 2,122 bits/symbole (3.2)
Longueur moyenne :
L̄ = 0,2 × 2 + 0,4 × 1 + 0,2 × 2 + 0,1 × 3 + 0,1 × 3 = 2,0 bits/symbole (3.3)
Taille avant codage : 10 × 8 = 80 bits (ASCII 8 bits)
Taille après codage : 10 × 2,0 = 20 bits
Taux de compression : 80/20 = 4
Interprétation
4 % Calcul de l ’ entropie
5 [ h_img ] = entropy ( I ) ;
6 fprintf ( ’ Entropie de l image = %.4 f bits / pixel \ n ’ , h_img ) ;
7
8 % Histogramme sur 256 niveaux de gris
9 freq = hist ( double ( I (:) ) , 256) ;
10 prob_img = freq / sum ( freq ) ;
11
12 % Supprimer les niveaux absents
13 mask = prob_img > 0;
14 alpha_img = num2cell ( find ( mask ) ) ;
15 prob_img2 = prob_img ( mask ) ;
16
17 % Codage Huffman
18 [ huf_img , entr , lmoy , red ] = huffman ( alpha_img , prob_img2 ) ;
19 fprintf ( ’ Longueur moyenne Huffman = %.4 f bits / pixel \ n ’ , lmoy ) ;
20 fprintf ( ’ Redondance = %.2 f %%\ n ’ , red ) ;
21
13
TP – Théorie de l’Information et Codage Source SICOM S6 – FST Fès
Interprétation
Pour une image naturelle telle que [Link] (image de niveaux de gris), l’entropie est
typiquement comprise entre 6 et 7,5 bits/pixel (à comparer à 8 bits/pixel en PCM).
Le codage de Huffman permet d’atteindre une longueur moyenne proche de l’entropie,
réalisant un taux de compression de l’ordre de 1,1 à 1,3. Ce gain est modeste car
l’image a une distribution des niveaux de gris relativement étalée.
14
4. Codage Arithmétique
4.1 Principe
Le codage arithmétique représente la totalité d’un message par un seul nombre en
virgule flottante appartenant à l’intervalle [0, 1[. L’algorithme raffine successivement un
intervalle de travail [l, u[ :
1. Calculer la largeur : w = u − l
2. Pour chaque symbole s avec intervalle [as , bs [ :
lnew = l + w · as (4.1)
unew = l + w · bs (4.2)
15
TP – Théorie de l’Information et Codage Source SICOM S6 – FST Fès
27 scale = 0;
28
29 for i = 1: ls
30 p = find ( seq ( i ) == alpha ) ; % Indice du symbole courant
31 l1 = l + floor ((( u - l +1) * CC ( p ) ) / totcount ) ;
32 u = l + floor ((( u - l +1) * CC ( p +1) ) / totcount ) - 1;
33 l = l1 ;
34
35 lb = dec2bin (l , m ) ;
36 ub = dec2bin (u , m ) ;
37 E2 = 1; E3 = 1;
38
39 % Renormalisation E1 , E2 , E3
40 while ( E2 | E3 )
41 fbl = lb (1) ; fbu = ub (1) ;
42 if fbl == fbu
43 E2 = 1;
44 tag = [ tag fbl ];
45 lb = [ lb (2: end ) ’0 ’ ];
46 ub = [ ub (2: end ) ’1 ’ ];
47 sc = char ( ’0 ’ + ’1 ’ - fbl ) ;
48 while scale > 0
49 tag = [ tag sc ];
50 scale = scale - 1;
51 end
52 else
53 E2 = 0;
54 end
55 sbl = lb (2) ; sbu = ub (2) ;
56 if sbl == ’1 ’ && sbu == ’0 ’
57 lb = [ lb (2: end ) ’0 ’ ]; lb (1) = ’0 ’;
58 ub = [ ub (2: end ) ’1 ’ ]; ub (1) = ’1 ’;
59 scale = scale + 1;
60 E3 = 1;
61 else
62 E3 = 0;
63 end
64 end
65 l = bin2dec ( lb ) ;
66 u = bin2dec ( ub ) ;
67 end
68
69 % Emission finale
70 f = lb (1) ; lb (1) = ’ ’;
71 sc = char ( ’0 ’ + ’1 ’ - f ) ;
72 tag = [ tag f ];
73 while scale > 0
74 tag = [ tag sc ];
75 scale = scale - 1;
76 end
77 tag = [ tag lb ];
16
TP – Théorie de l’Information et Codage Source SICOM S6 – FST Fès
22 % Identification du symbole
23 k = 1;
24 s = floor ((( t - l + 1) * totcount - 1) / ( u - l + 1) ) ;
25 while s >= CC ( k )
26 k = k + 1;
27 end
28 seq = [ seq alpha (k -1) ];
29
30 % Mise a jour de l ’ intervalle
31 l1 = l + floor ((( u - l +1) * CC (k -1) ) / totcount ) ;
32 u = l + floor ((( u - l +1) * CC ( k ) ) / totcount ) - 1;
33 l = l1 ;
34
35 lb = dec2bin (l , m ) ;
36 ub = dec2bin (u , m ) ;
37 % ... ( renormalisation identique a l ’ encodeur )
38 end
17
TP – Théorie de l’Information et Codage Source SICOM S6 – FST Fès
13
14 % Codage Huffman ( pour comparaison )
15 prob = cnt / sum ( cnt ) ;
16 [ huf , entr , lmoy ] = huffman ( num2cell ( alpha ) , prob ) ;
17 taille_huffman = length ( seq ) * lmoy ;
18
Interprétation
Le codage arithmétique approche l’entropie de manière plus précise que Huffman,
notamment pour des sources avec des probabilités inégales. Pour un alphabet de 5
symboles et une séquence courte (10 caractères), les différences restent faibles. Pour
de grandes séquences, le codage arithmétique est systématiquement plus proche de
H(S) × N bits (limite théorique de Shannon).
Avantage du codage arithmétique : Il peut atteindre des longueurs moyennes
inférieures à 1 bit/symbole (impossible avec Huffman classique), particulièrement utile
pour des symboles très probables (p → 1).
18
5. Codage LZW
19
TP – Théorie de l’Information et Codage Source SICOM S6 – FST Fès
31 if isempty ( code )
32 % La sequence n ’ est pas dans le dictionnaire
33 output ( outputindex ) = getcodefor ( substr , table ) ;
34 [ table , code ] = addcode ( table , [ substr element ]) ; % Ajouter au
dico
35 outputindex = outputindex + 1;
36 startindex = index ;
37 end
38 end
39
40 % Derniere sequence
41 substr = vector ( startindex : index ) ;
42 output ( outputindex ) = getcodefor ( substr , table ) ;
43 output (( outputindex +1) : end ) = []; % Supprimer les positions
inutilisees
44
45
46 % Fonctions internes
20
TP – Théorie de l’Information et Codage Source SICOM S6 – FST Fès
21
TP – Théorie de l’Information et Codage Source SICOM S6 – FST Fès
Codes émis : [65, 66, 67, 68, 257, 67, 66, 69, 66] (9 codes uint16)
22
TP – Théorie de l’Information et Codage Source SICOM S6 – FST Fès
Grandeur Valeur
Taille originale (8 bits/char ASCII) 80 bits
Taille codée LZW (9 codes × 16 bits) 144 bits
Taux de compression 80/144 ≈ 0,56
Interprétation
Pour cette courte séquence, le codage LZW est moins efficace que le codage original
ASCII ! Cela s’explique par le fait que LZW nécessite des codes sur 16 bits (uint16)
pour indexer le dictionnaire, alors que les caractères ASCII n’occupent que 8 bits.
Le bénéfice du LZW apparaît pour des fichiers longs présentant des répétitions de
sous-chaînes : le dictionnaire s’enrichit et les codes remplacent des séquences de plus
en plus longues.
Pour un fichier d’une page (quelques milliers de caractères), on obtient typiquement
un taux de compression τc ≈ 1,5 à 2,5 selon la redondance du texte.
23
6. Synthèse et Comparaison des mé-
thodes
24
TP – Théorie de l’Information et Codage Source SICOM S6 – FST Fès
Remarque
Ces valeurs sont typiques et dépendent fortement des données. Le LZW est désavantagé
sur les courtes séquences mais devient compétitif sur les grands fichiers. Le codage
arithmétique et Huffman produisent des résultats très proches pour les textes courants.
25
Bibliographie
26