Projet réalisé dans le cadre du cours "Algorithmique Avancée" (Premier semestre 2024-2025) à l'Université Paris 8, sous la direction de BD. Ce projet explore et compare deux algorithmes de compression sans perte : Lempel-Ziv-Welch (LZW) et Run-Length Encoding (RLE), avec une application particulière aux images.
Le projet est divisé en deux parties principales, chacune implémentant un algorithme de compression différent:
-
LZW (Lempel-Ziv-Welch)
compress_txt/lzw.c: Implémentation de la compression/décompression LZW pour du texteImages/img_lzw.c: Application à la compression d'images
-
RLE (Run-Length Encoding)
compress_txt/rle.c: Implémentation de la compression/décompression RLE pour du texteImages/modif.c: Fonctions pour la compression/décompression d'images utilisant RLE
# Compiler et exécuter LZW sur du texte
cd compress_txt/
gcc lzw.c -o lzw_compression_txt
./lzw_compression_txt
# Compiler et exécuter RLE sur du texte
gcc rle.c -o rle_compression_txt
./rle_compression_txt# Accéder au dossier Images et compiler
cd Images/
make clean
make
# Exécuter sur une image PPM
./palette requin_leopard.ppmAprès avoir lancé l'application avec une image:
Pour LZW:
- Cliquer sur le bouton gauche de la souris
- Sélectionner "Trier image LZW"
- Les composantes RGB seront triées dans le dossier
tri_lzw/(rouge.txt, vert.txt, bleu.txt)
Pour RLE:
- Cliquer sur le bouton droit de la souris
- Sélectionner "Compresser image RLE"
- Les composantes compressées seront dans le dossier
compress_rle/(rouge.ppm, vert.ppm, bleu.ppm)
Pour décompresser (RLE):
- Cliquer sur le bouton gauche de la souris
- Sélectionner "Décompresser image RLE"
- L'image reconstruite sera dans
decompress_rle/image_reconstituee.ppm - Visualiser avec
./palette decompress_rle/image_reconstituee.ppm
Structure de données:
- Dictionnaire dynamique (
Dico_Entree) - Table de hachage pour optimiser les recherches
Fonctions principales:
LZW: CompressionLZWD: Décompression- Fonctions auxiliaires:
initDico,findDico,addDico, etc.
Fonctions principales:
RLE: CompressionRLED: Décompression- Pour les images:
tri_color_rle,compress_color_rle,decompress_rle, etc.
Les tests montrent que:
-
LZW est plus efficace pour les données avec des motifs variés et complexes
- Ex: "ababcbababaaaaaaa" → 41.18% de compression
- Avantages: Bonne performance générale, adaptabilité aux motifs
- Inconvénients: Plus complexe à implémenter, gestion du dictionnaire
-
RLE excelle avec les longues séquences de caractères identiques
- Ex: "aaaaaaaaaaaaaaaaaaaaaaaaabc" → 74.07% de compression
- Avantages: Simple, rapide, très efficace sur séquences répétitives
- Inconvénients: Peut augmenter la taille des données sans répétitions
-
Sur les images, RLE s'est révélé inefficace car les pixels varient constamment, conduisant à une augmentation de taille (de 2.3Mo à 11.9Mo pour l'image "requin_leopard.ppm")
Bademba SANGARE - L3 Informatique - Université Paris 8