Skip to content

nclv/ensimag-encodeur_jpeg

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Encodeur JPEG

Les consignes du projet sont ici.

Pour gérer le projet voir ici.

Quelques commandes utiles...

alias valgrind-o="valgrind --leak-check=full --show-leak-kinds=all --track-origins=yes --verbose --log-file=valgrind-out.txt"

compare -verbose -metric RMSE images/gris.jpg images/my-gris.jpg difference.jpg
compare -verbose -metric MAE images/gris.jpg images/my-gris.jpg difference.jpg

compare -verbose -fuzz 5% images/gris.jpg images/my-gris.jpg difference.jpg

time ./bin/ppm2jpeg images/complexite.pgm > /dev/null

Ce que nous avons implémenté:

  • Traitement à la volée des MCU et des DU. Nous avons ainsi une empreinte mémoire très faible.
  • Implémentation d'un algorithme de DCT 2D rapide (AAN) avec représentation en nombre à virgule fixe. Nous avons uniquement des opérations sur des entiers.
  • Implémentation de l'algorithme de Huffman donnant les codes canoniques. Ce dernier remplace l'arbre de Huffman que nous avions aussi implémenté. On ne stocke pas un array de 0 et de 1 mais un entier sur 32 bits. Il serait intéressant d'implémenter une table de hachage permettant de renvoyer, pour une valeur à encoder donnée, le code ainsi que sa longueur en bits.
  • Implémentation de l'écriture dans un fichier. On reçoit une suite de bits à regrouper en bytes. Ils sont stockés puis écrit dans le fichier binaire avec un unique (buffer statique de 2048 bytes adapté à la plupart des images) appel à fwrite (meilleur gestion mémoire). Il serait envisageable de calculer la taille du buffer en fonction du taux de compression de l'image d'entrée.
  • Gestion d'arguments en ligne de commande avec argp. Implémentation d'un mode verbose avec une variable globale.
  • Codes d'erreur personnalisés.

Ce qui reste à corriger:

  • Nous rencontrons un problème lors du traitement de l'image zig-zag en 1x4,1x2,1x2.

Outils:

  • Compilation de l'exécutable final avec clang ou gcc avec les flags adaptés,
  • Tests unitaires de nos modules,
  • Utilisation de valgrind, gprof, strace, cppcheck et flawfinder

About

Encodage d'une image au format PPM ou PGM en JPEG.

Topics

Resources

Stars

Watchers

Forks