retour projet universitaire

CoDec Image

Encodeur/Décodeur d'images conçu en C pur. Le but ? Comprendre les fondamentaux de la compression numérique en implémentant un algorithme 'Near-Lossless' basé sur le codage différentiel et une table VLC (Variable Length Coding). Pas de bibliothèques magiques, juste de la manipulation de bits.

C

Langage

pur et dur

DIFF

Format

binaire custom

VLC

Méthode

huffman statique

vue d'ensemble

L'objectif de ce projet est de créer un utilitaire de compression capable de transformer une image PGM (niveaux de gris) ou PPM (couleur) en un format binaire optimisé (.dif).

L'algorithme repose sur le principe que les pixels voisins ont souvent des valeurs proches. Au lieu de stocker la valeur brute (ex: 180), on stocke la différence avec le précédent (ex: +2).

Ces différences sont ensuite encodées via une table VLC (codes courts pour petites différences, codes longs pour grandes différences) pour réduire la taille finale.

Outils bas niveau
  • Langage C (C99)
  • Graphisme libg2x (OpenGL/Glut wrapper)
  • Build Makefile
  • Image NetPBM (PGM/PPM)
  • Binaire Hex Editor
Architecture logicielle

Flux de données

imgdif.c

Le cœur du réacteur. Contient toutes les fonctions de manipulation d'images, de gestion mémoire, et surtout les routines bit-à-bit pour l'écriture du fichier compressé.

Encodage Différentiel

Transformation des pixels en écarts par rapport à leurs voisins. Repliement mathématique pour transformer les écarts signés en entiers positifs.

Quantificateur VLC

Table de compression statique à 4 niveaux. Les petites variations (le bruit de fond de l'image) sont codées sur très peu de bits.

Interfaces Graphiques

pgmtodif et diftopgm offrent une visualisation temps réel de l'image, de sa version différentielle et de son histogramme.

Démonstration Interactive

Essayez le CoDec

J'ai porté l'algorithme C original en TypeScript pour vous permettre de le tester directement dans le navigateur.

Déposez une image, et voyez comment l'algorithme 'voit' les différences entre les pixels.

apprentissages clés

hard skills
1

Manipulation de fichiers binaires et écriture bit-à-bit (Bitwise operations).

2

Gestion manuelle de la mémoire (malloc/free) et arithmétique des pointeurs.

3

Compréhension profonde des formats d'images et de la compression sans perte.

4

Création d'outils en ligne de commande robustes (arguments, I/O, erreurs).

Technos utilisées

Langage

CMakefile

Librairies

libg2xOpenGL

Concepts

VLCHuffmanBinary I/O

Galerie

Aperçu de l'interface graphique originale en C/OpenGL.

Coming soon