DIIC - INC, 3 e année. Module COMV TP 1 - Introduction au codage d image : manipulation des outils



Documents pareils
Formats d images. 1 Introduction

TD : Codage des images

Codage hiérarchique et multirésolution (JPEG 2000) Codage Vidéo. Représentation de la couleur. Codage canal et codes correcteurs d erreur

TP : Gestion d une image au format PGM

Approche par marquage pour l évaluation de la qualité d image dans les applications multimédias

Analyse d images. Edmond.Boyer@imag.fr. Edmond Boyer UFRIMA 1

Projet d informatique M1BI : Compression et décompression de texte. 1 Généralités sur la compression/décompression de texte

Transmission d informations sur le réseau électrique

Structure du format BMP, sa lecture, sa construction et son écriture

TP SIN Traitement d image

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Programmation système I Les entrées/sorties

Quantification Scalaire et Prédictive

Livrable 2.1 Rapport d analyse et de restructuration de code monothread des modules P, T, Q et F de l encodage MPEG-4 AVC

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

Hiver 2013 IMN 259. Introduction à l analyse d images. Par Pierre-Marc Jodoin

3IS - Système d'exploitation linux - Programmation système

Introduction à MATLAB R

Le prototype de la fonction main()

Programmation C. Apprendre à développer des programmes simples dans le langage C

Chap III : Les tableaux

Chapitre 18 : Transmettre et stocker de l information

Introduction au langage C

Conventions d écriture et outils de mise au point

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

Adobe Premiere Pro Exportation

Algorithmique et Programmation, IMA

Le langage C. Séance n 4

Outils pour la pratique

Chapitre 13 Numérisation de l information

Arguments d un programme

Synthèse d images Edmond Boyer

TP: Représentation des signaux binaires. 1 Simulation d un message binaire - Codage en ligne

Capacité d un canal Second Théorème de Shannon. Théorie de l information 1/34

Compression et Transmission des Signaux. Samson LASAULCE Laboratoire des Signaux et Systèmes, Gif/Yvette

Quelques éléments de compilation en C et makefiles

Guide Numériser vers FTP

6 - Le système de gestion de fichiers F. Boyer, UJF-Laboratoire Lig, Fabienne.Boyer@imag.fr

Mesure agnostique de la qualité des images.

Compression de Données - Algorithme de Huffman Document de Conception

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Optimisations des SGBDR. Étude de cas : MySQL

Initiation à linfographie

Manuel d'installation

Les images numériques. 1. Le dessin vectoriel

Le logiciel de création de site internet IZISPOT est un outil très puissant et qui est assez simple après quelques temps d utilisation.

Bases de programmation. Cours 5. Structurer les données

ISO/CEI NORME INTERNATIONALE

Chapitre 22 : (Cours) Numérisation, transmission, et stockage de l information

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License,

Cours Programmation Système

JPEG, PNG, PDF, CMJN, HTML, Préparez-vous à communiquer!

UE Programmation Impérative Licence 2ème Année

Projet Matlab : un logiciel de cryptage

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Cours de numérisation sur Epson Perfection

Chapitre 22 Optimisation pour diffusion à l'écran, pour le web

Manuel d utilisation du module Liste de cadeaux PRO par Alize Web

Stockage du fichier dans une table mysql:

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu.

Technique de codage des formes d'ondes

Chap17 - CORRECTİON DES EXERCİCES

Mon premier rpm. 7 juin Avant de commencer RPM URPMI RPMBUILD... 2

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

LES TYPES DE DONNÉES DU LANGAGE PASCAL

Avertissement. La Gestion Electronique de Documents

L espace de travail de Photoshop

Théorie et codage de l information

Chapitre I La fonction transmission

Optimisation et formats d images standards pour le Web Par Thierry Goulet Web Designer, ministère de la Sécurité publique. Plan de conférence

Cours d initiation à la programmation en C++ Johann Cuenin

Programmation Web TP1 - HTML

Manuel Utilisateur Version 1.6 Décembre 2001

1 Modélisation d être mauvais payeur

Capture, Filtrage et Analyse de trames ETHERNET avec le logiciel Wireshark. Etape 1 : Lancement des machines virtuelles VMWARE et de Wireshark

Windows Live Movie Maker

Comment reproduire les résultats de l article : POP-Java : Parallélisme et distribution orienté objet

Guide de correction et d optimisation des images en vue de leur publication sous Marcomedia Contribute. Logiciel utilisé : Adobe PhotoShop 7

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

INFO-F-404 : Techniques avancées de systèmes d exploitation

TP réseaux 4 : Installation et configuration d'un serveur Web Apache

Les algorithmes de base du graphisme

Utiliser le logiciel Photofiltre Sommaire

LES DIFFÉRENTS FORMATS AUDIO NUMÉRIQUES

Initiation à l algorithmique

TP 1. Prise en main du langage Python

La mémoire. Un ordinateur. L'octet. Le bit

LES CARACTERISTIQUES DES SUPPORTS DE TRANSMISSION

Plan du cours. Historique du langage Nouveautés de Java 7

INFO 2 : Traitement des images

NIMEGUE V3. Fiche technique 3.07 : Sauvegarde / Restauration manuelle

03/04/2007. Tâche 1 Tâche 2 Tâche 3. Système Unix. Time sharing

Programmation stochastique

FOIRE AUX QUESTIONS PAIEMENT PAR INTERNET. Nom de fichier : Monetico_Paiement_Foire_aux_Questions_v1.7 Numéro de version : 1.7 Date :


TP3 : Manipulation et implantation de systèmes de fichiers 1

Transcription:

DIIC - INC, 3 e année Module COMV TP 1 - Introduction au codage d image : manipulation des outils Gaël Sourimant, Luce Morin 18 octobre 2006 1 Introduction Le but de ce TP est d observer et de comparer les performances respectives de deux algorithmes de compression. Le premier objectif est d avoir une idée des taux de compression, des distorsions et des artefacts associés à chacun des algorithmes. Le second consiste à appréhender correctement la mesure de distorsion utilisée : son fonctionnement et ses limites. Avant de commencer à programmer, il vous est demandé de lire attentivement ce qui suit dans cette introduction. 1.1 Algorithme LZW L algorithme de Lempel-Ziv-Welch 1 (LZW) est un algorithme très populaire. Il permet une compression sans pertes et peut donc être utilisé pour la compression de données quelconques, comme du texte ou du code exécutable. On peut donc aussi l utiliser pour la compression d images sans pertes lorsque le contexte le requiert, par exemple en imagerie médicale, où la compression avec pertes est souvent interdite. Si le message à coder est vu comme une source de caractères, la technique de l algorithme LZW consiste à coder non pas les caractères eux-mêmes mais des séquences de chaînes de caractères successives. Lors du codage, une table de correspondance (un dictionnaire), construite en ligne (à la volée), permet d associer à chaque chaîne de caractères un mot de code de longueur fixe. La chaîne des codes est alors transmise. Plus les chaînes codées sont longues, plus le taux de compression est élevé. Le principe de codage est tel que le dictionnaire n a pas besoin d être transmis : il est reconstitué dynamiquement lors du décodage. Pour que l algorithme soit performant, il faut que le message comporte des chaînes qui présentent des caractéristiques particulières, c est-à-dire que certains types d images pourront être avantageusement compressées par cet algorithme, alors que d autres pourront même 1 voir, par exemple, http://www.alphabeta-net.com/lzw.html 1

subir une augmentation de volume. Sous Unix, la commande compress implante une variante du LZW. En image, le LZW est à la base du format de fichier 2 (GIF), figure parmi les algorithmes du format 3 (TIFF) et est utilisé dans le format POSTSCRIPT (Level 2). 1.2 Algorithme JPEG Le standard 4 JPEG définit une norme pour la compression des images. Cette norme utilise la DCT (transformée en cosinus discrète) suivie d une quantification des coefficients. En pratique, on utilise une DCT par blocs de taille 8 8 et une quantification uniforme des coefficients DCT. Aucun coefficient n est explicitement abandonné, mais l annulation de certains coefficients provient des termes d une matrice qui définit la quantification. Les coefficients, en vue de la transmission, sont disposés dans un ordre dit zig-zag. On obtient une suite monodimensionnelle de coefficients, rangés selon un ordre tel que, en moyenne, cette suite est décroissante. Ceci permet d effectuer de nombreux regroupements de coefficients nuls, et ainsi de coder efficacement chaque bloc par codage de plages (run-length). Ce schéma de compression est à peu près symétrique : les temps de compression et de décompression sont semblables. 1.3 Évaluation de la distorsion à l aide du PSNR Dans le but de fournir une mesure objective de la distorsion introduite par la compression, on utilisera le PSNR (Peak Signal to Noise Ratio). Soient respectivement I o et I r les images originale et reconstruite, de même taille M N. La valeur de l intensité lumineuse associée au pixel de coordonnées (i, j) d une image I est noté I(x, y). Le calcul du PSNR fait intervenir le calcul de l erreur quadratique moyenne, l EQM (ou MSE pour Mean Square Error) : EQM(I o, I r ) = Le PSNR est donné par l expression 1 M N M 1 i=0 N 1 j=0 [I o (i, j) I r (i, j)] 2. PSNR(I o, I r ) = 10 log 10 D 2 EQM(I o, I r ), où D est la dynamique couverte par les variations de l intensité lumineuse. Les pixels des images à traiter sont codés sur 8 bits, donc D = 2 8 1 = 255. L unité du PSNR est le décibel et est noté db. Plus celui-ci est important, plus les images comparées sont semblables. 1.4 Présentation de la librairie libit Tous les TP utiliseront la librairie libit 5. Celle librairie est écrite en C et permet de manipuler des objets et structures couramment utilisés en codage. Elle permet également de manipuler 2 http ://lappweb.in2p3.fr/infographie/gif.html 3 http ://lappweb.in2p3.fr/infographie/tiff.html 4 http ://lappweb.in2p3.fr/infographie/jpg.html 5 http://libit.sourceforge.net 2

des images, qui sont représentées comme des matrices (ou des tableaux à deux dimensions, selon l usage qui en est fait). Vous trouverez une documentation succincte à l URL http://libit.sourceforge.net/doc/libit.pdf Parcourez les sections 2.2 (Vectors) à 3.4 (Parser) de cette documentation (la section 3.3 ne vous servira pas). Cette librairie est installée dans le répertoire /share/diic3/local. Afin de pouvoir l utiliser, suivez les étapes suivantes. 1. Ajouter le répertoire /share/diic3/local/bin dans votre variable d environnement PATH. export PATH=$PATH:/share/diic3/local/bin 2. Ajouter le répertoire /share/diic3/local/man dans la variable d environnement MANPATH. export MANPATH=$MANPATH:/share/diic3/local/man Considérer ensuite l exemple ci-dessous. Il charge une image au format PGM 6 et en affiche le nom, les éventuels commentaires et les dimensions. Il le recopie sans modification sur le disque. #include <it/io.h> #include <it/mat.h> #include <it/parser.h> int main( int argc, char ** argv ) { /* Declaration and initialization of a parser with default values */ parser_t * parser = parser_init( argc, argv, "tp1.param", NULL ); } const char * filename_in = parser_get_string( parser, "-i" ); const char * filename_out = parser_get_string( parser, "-o" ); char pnm_type, comments[1000]; int width, height, maxval; imat m; /* Use the image file header */ pnm_info( filename_in, &pnm_type, &width, &height, &maxval, comments, 1000 ); printf( "Input file name = %s\npnm type = %c\n%dx%d -> maxval=%d\ncomments=%s\n", filename_in, pnm_type, width, height, maxval, "" ); /* Read the image from a file and display its dimensions */ m = imat_pgm_read( filename_in ); printf( "height = %5d\tmaxheight = %5d\nwidth = %5d\tmaxwidth = %5d\n", imat_height(m), imat_height_max(m), imat_width(m), imat_width_max(m) ); /* Write the image as a pgm into a file */ imat_pgm_write( filename_out, m ); /* Free the memory and return */ imat_delete(m); return 0; 6 Le format PGM(Portable GreyMap), est l un des formats PNM. Pour une description succincte de format, voir par exemple http ://astronomy.swin.edu.au/ pbourke/dataformats/ppm 3

Note : ce fichier ainsi que les fichiers associés sont disponibles dans le répertoire /share/diic3/inc_tpcomv/tp1. Remarquez que le programme nécessite la présence d un fichier de paramètres nommé /share/diic3/inc_tpcomv/tp1/tp1.param. En clair, récupérez les fichiers suivants et copiez les sur votre compte : tp1.c ; tp1.param ; Makefile. Regardez le fichier Makefile. Il vous servira pour voir comment compiler avec la librairie libit. 2 Manipulations à effectuer Vous allez compresser et décompresser (aux formats GIF/LZW et JPEG) des images brutes en niveaux de gris (au format PGM). Vous utiliserez pour cela des outils de manipulation d images disponibles en ligne de commande, tels que mogrify, pnmtojpeg ou jpegtopnm. Vous pouvez également utiliser si vous le souhaitez le logiciel xv. Les images de test sont les suivantes : simple.pgm (300 300) : image synthétique simple, sati.pgm (400 400) : image MétéoSat, cornouaille.pgm (720 576) : photo numérisée, barbara.pgm (512 512) : photo numérisée, lena.pgm (512 512) : photo numérisée. Ces images sont disponibles dans le répertoire /share/diic3/share/inc_tpcomv/images. 2.1 Compression sans pertes LZW Question 2.1. Copier les images d origine, listées ci-dessus, sur votre compte, puis enregistrez-les en GIF. Vous pouvez pour cela utiliser la ligne de commande : mogrify -format gif nom_image.ppm Question 2.2. Vérifiez visuellement que la compression se fait apparemment sans pertes et comparez les taux de compression selon les types d images. Question 2.3. Concluez sur le domaine d utilisation de cette méthode. 2.2 Compression avec pertes JPEG Question 2.4. Reprenez les images originales en PGM et enregistrez-les au format JPEG, en utilisant la commande : pnmtojpeg -baseline -quality=n image_in.pgm > image_out.jpg Nous ne nous intéresserons pas au paramètre -baseline utilisé ici, mais plus particulièrement à -quality=n, puisque N est un paramètre de qualité, qui détermine la matrice de quantification, et donc le taux de compression. N est un entier à valeurs dans {1... 100}. Pour avoir une idée de quels paramètres de qualité utiliser, reportez-vous à la question suivante. Question 2.5. Pour différentes images, notez dans un tableau les informations suivantes : le paramètre de qualité utilisé (on fixe dans le cadre de ce Tp N {2, 10, 20, 40, 60, 85}) ; 4

5 Imperceptible 4 Perceptible mais non gênant 3 Légèrement gênant 2 Gênant 1 Très gênant TAB. 1 Notes de qualité subjective la taille de fichier ; le taux de compression ; la qualité subjective de l image. Pour la mesure de qualité subjective de l image, attribuez une note entre 1 et 5 en fonction de l échelle fournie dans la table 1. Note : Conservez les images au format JPEG que vous avez obtenues. Elle vous serviront par la suite. Question 2.6. Déduisez les taux de compression limites correspondants à une erreur de reconstruction que vous jugerez imperceptible (et gardez ces images quelque part). Question 2.7. Décrivez et expliquez l effet visuel obtenu lorsque la qualité est mauvaise. 2.3 Autour du PSNR Dans cette partie, vous allez remplacer la mesure subjective précédemment utilisées par la mesure objective du PSNR. Question 2.8. Implantez 7 un programme psnr qui prend en entrée deux noms de fichiers au format PGM et qui renvoie la mesure du PSNR. Question 2.9. Complétez le tableau de la partie précédente en y ajoutant le PSNR calculé par votre programme. Note : Pour gagner du temps, transformez vos fichiers JPEG en fichiers PGM en utilisant le programme jpegtopnm : jpegtopnm image.jpg > image.pgm Question 2.10. Commentez votre tableau d une manière détaillée. En particulier, après avoir comparé les valeurs obtenues pour différentes images, concluez sur l interprétation de la valeur absolue de PSNR. Question 2.11. Tracez la courbe débit/distorsion pour les images simple.pgm, sati.pgm et lena.pgm. Note : Dans le cas présent le "débit" est considéré comme étant représenté par la taille des fichiers JPEG que vous avez généré. il vous est donc demandé de tracé la courbe psnr = f(taille_f ichier). Question 2.12. Une version "décalée" de lena.pgm vous est fournie dans /share/diic3/inc_tpcomv/tp1/lena_offset.pgm. Par rapport à l image originale, la première colonne disparaît, la deuxième devient la première, etc. sauf la dernière qui est dupliquée. Calculez le PSNR entre l original et sa version décalée. Commentez. 7 Utilisez pour cela le squelette de programme tp1.c et le Makefile qui sont fournis 5