Projet C - Décodeur JPEG

De Ensiwiki
Aller à : navigation, rechercher
Char-shaun.png

Cette page tente de rassembler les questions les plus fréquentes pour le sujet « Décodeur JPEG ». Vous pouvez ajouter vos questions en bas de la page, et éventuellement répondre aux questions de vos collègues, tant que vous le faites en respectant les règles du jeu : ne donnez pas de solutions explicites au sujet, n'échangez pas de code, et en cas de doutes, demandez à vos enseignants !

Retour à la page d'accueil principale du Projet C.

Encadrants JPEG

Voici la liste des encadrants pour le sujet JPEG, auxquels vous pourrez poser vos questions pendant les séances encadrées (Bat E 3e étage, camp de base en E301) :

Ressources projet

Archive initiale

Commencez par télécharger l'archive suivante : squelette-jpeg.tar.gz

Cette archive contient tout ce qu'il faut pour démarrer, à savoir :

  • Le sujet, au format PDF (sujet_jpeg.pdf) qui doit être votre source principale d'information
  • Les fichiers d'entête huffman.h, bitstream.h et jpeg_reader.h
  • Les fichiers objet binaires huffman, bitstream et jpeg_reader huffman.o, bitstream.o et jpeg_reader.o
  • Un fichier Makefile de départ
  • Les images de test de difficulté progressive, comme présentées dans le sujet
  • La spec JPEG, si vous ressentez le besoin d'approfondir les notions abordées par le sujet (dans le répertoire docs)
Attentionle squelette a été généré pour l'architecture x86_64 des machines de l'école. Les objets distribués ne sont donc pas utilisables sur une machine perso configurée différemment (32 bits, MacOS, ...).

Dans ce cas, la (seule) solution est de travailler via la virtualisation, accessible via un navigateur.

La page de connexion est https://pcvirtuel.ensimag.fr, avec une doc explicative ici. En cas de problème lié à la virtualisation, merci de contacter le service informatique: support.info@ensimag.fr (ou même dans ce cas aller directement les voir, tout fond à droite du bâtiment E 2ème étage).


iDCT rapide

Article de référence sur l'algorithme de Loeffler: Loeffler.pdf

Il y a quelques typos dans le papier original (!) :

  • en figure 1: la rotation de l'étape 3 entre les coefficients 2 et 3 \sqrt{2} c_1 doit être remplacée par \sqrt{2} c_6
  • en figure 2, les sorties du butterfly et de la rotation sont bien sûr O_0 (1ère ligne) et O_1 (deuxième ligne), et pas deux fois O_0.

Les indices à droite du schéma de l'article ne sont valides que pour un étage de l'algorithme. Dans le sens DCT, on effectue donc les 3 premiers étages avec les indices normaux, puis on écrit le résultat du dernier étage aux indices réordonnés. Dans le sens IDCT, on lit les entrées du premier étage avec les indices réordonnés, mais les résultats de cet étage (et des suivants) s'écrivent avec les indices normaux (de 0 à 7 dans l'ordre).

De même, l'IDCT est une inversion de la DCT. La rotation ne s'effectue donc pas dans le même sens :

0_0 = I_0 . k . \cos\left(\frac{n\pi}{16}\right) - I_1 . k . \sin\left(\frac{n\pi}{16}\right)

0_1 = I_1 . k . \cos\left(\frac{n\pi}{16}\right) + I_0 . k . \sin\left(\frac{n\pi}{16}\right)