Laboratoire #4 Cours GPA-787 Session Hiver 2013 Guy Gauthier Ph.D., ing.
Table des matières Informations générales... 3 Objectifs:... 3 Évaluation:... 3 Détails sur l évaluation du laboratoire... 3 Contenu du rapport de laboratoire:... 3 Évaluation:... 3 I. Traitement d image... 4 I-1. De l image à la DCT quantifiée... 4 I-2. Opérations inverses pour revenir à l image... 7 I-3. Test du programme sur une image réelle... 7 Retour sur les livrables :... 8 Page 2
Informations générales Objectifs: Traitement d une image JPEG. Évaluation: Ce laboratoire représente 10 des 40 de contribution des laboratoires dans la note finale. Détails sur l évaluation du laboratoire Contenu du rapport de laboratoire: Le rapport de laboratoire doit se conformer le plus possible au format suivant : Page de présentation; Buts et objectifs du laboratoire; Pour chaque programme : o Explication du fonctionnement de chaque programme; o Ordinogramme de chaque programme; o «Listing» des fichiers sources. Réponses aux questions et discussion; Problématiques rencontrées; Conclusion. Évaluation: Voici la grille d évaluation : Présentation globale du rapport... 05 Résultats obtenus... 15 Explications et procédures d utilisation... 10 Fonctionnement... 20 TOTAL...................... 50 Page 3
I. Traitement d image I-1. De l image à la DCT quantifiée Le programme ci-dessous vous est fourni. En lire les commentaires pour comprendre ce que fait le programme. Programme initial du laboratoire #4 labo4.m Initialisation clear; Effacer la mémoire clc; Effacer ce qui est affiché dans la zone de commande close all; Fermer les fenêtre d images/figures ouvertes Matrice d image 14 x 12 x 3 Format RGB Composante rouge de l image Ired = [ 0 0 20 40 60 80 100 120 140 160 200 220 240 255]; Composante verte de l image Igre = [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0; 25 25 25 25 25 25 25 25 25 25 25 25 25 25; 50 50 50 50 50 50 50 50 50 50 50 50 50 50; 75 75 75 75 75 75 75 75 75 75 75 75 75 75; 100 100 100 100 100 100 100 100 100 100 100 100 100 100; 125 125 125 125 125 125 125 125 125 125 125 125 125 125; 150 150 150 150 150 150 150 150 150 150 150 150 150 150; 175 175 175 175 175 175 175 175 175 175 175 175 175 175; 200 200 200 200 200 200 200 200 200 200 200 200 200 200; 225 225 225 225 225 225 225 225 225 225 225 225 225 225; 250 250 250 250 250 250 250 250 250 250 250 250 250 250; 255 255 255 255 255 255 255 255 255 255 255 255 255 255]; Page 4
Composante bleue de l image Ible = [ 0 20 40 60 80 100 120 140 180 200 220 240 255 255; 20 40 60 80 100 120 140 180 200 220 240 255 255 240; 40 60 80 100 120 140 180 200 220 240 255 255 240 220; 60 80 100 120 140 180 200 220 240 255 255 240 220 200; 80 100 120 140 180 200 220 240 255 255 240 220 200 180; 100 120 140 180 200 220 240 255 255 240 220 200 180 160; 120 140 180 200 220 240 255 255 240 220 200 180 160 140; 140 180 200 220 240 255 255 240 220 200 180 160 140 120; 200 220 240 255 255 240 220 200 180 160 140 120 100 80; 220 240 255 255 240 220 200 180 160 140 120 100 80 60; 240 255 255 240 220 200 180 160 140 120 100 80 60 40; 255 255 240 220 200 180 160 140 120 100 80 60 40 20]; Construction de l image I(:,:,1) = Ired; I(:,:,2) = Igre; I(:,:,3) = Ible; Obtention de la taille de l image n = size(i); n1 = largeur; n2 = hauteur; n3 = 3. m = ceil(n(1:2)/8)*8; m1= largeur ajustée; m2= hauteur ajustée Génération de l image ajustée pour être d une taille qui est un multiple de 8, car elle est découpée en bloc de taille 8 par 8. On comble la partie manquante avec du noir (couleur = 0). Étape 1, une image noire Im = zeros(m(1),m(2),3); Étape 2, on ajoute notre image sur l image noire Im(1:n(1),1:n(2),:) = I; Affichage de l image à l écran figure; imshow(im/256); Résultat, une image avec une bordure noire sur le coté droit et sur le bas de l image si la taille de l image n est pas un multiple de 8. Calcul des DCT du coin supérieur gauche Im_1_1_dct_rouge = dct2(im(1:8,1:8,1)); Im_1_1_dct_vert = dct2(im(1:8,1:8,2)); Page 5
Im_1_1_dct_bleu = dct2(im(1:8,1:8,3)); Calcul des DCT du coin inférieur droit Im_2_2_dct_rouge = dct2(im(9:16,9:16,1)); Im_2_2_dct_vert = dct2(im(9:16,9:16,2)); Im_2_2_dct_bleu = dct2(im(9:16,9:16,3)); Le programme calcule donc la DCT en 2D de deux des blocs d image est les stocke dans les variables Im_x_y_dct_couleur. Écrire dans le rapport les DCT de la couleur rouge pour les deux coins calculés (Im_1_1_dct_rouge et Im_2_2_dct_rouge). Modifier ce programme en ajoutant des boucles «for» pour calculer l ensemble des DCT des trois couleurs sur l ensemble des blocs. Cette boucle doit pouvoir s adapter à diverses tailles d image. Stocker les DCT de la couleur rouge dans la matrice Im_DCT_Rouge, ceux de la couleur verte dans la matrice Im_DCT_Vert et ceux de la couleur bleue dans la matrice Im_DCT_Bleu. Ces trois matrices auront la même taille que l image. La suite du programme précédent montre ce qui se passe en lors de la quantification : Partie quantification de l image - Paramètre qualite (>= 0) qui servira à déterminer le niveau de quantification. Si égal à 0, image en pleine qualité (pas de composantes quantifiées) Si supérieur à zéro, image en moindre qualité mais plus facilement compressable qualite = 5; Construction de la matrice de quantification for k1 = 1: 8 for k2 = 1: 8 Qua(k1,k2) = 1 + (k1+k2+1)*qualite; end end Quantification des parties d images dont on a calculé la DCT. Calcul des DCT du coin supérieur gauche ImQua_1_1_dct_rouge = Im_1_1_dct_rouge./Qua; ImQua_1_1_dct_vert = Im_1_1_dct_vert./Qua; ImQua_1_1_dct_bleu = Im_1_1_dct_bleu./Qua; Page 6
Calcul des DCT du coin inférieur droit ImQua_2_2_dct_rouge = Im_2_2_dct_rouge./Qua; ImQua_2_2_dct_vert = Im_2_2_dct_vert./Qua; ImQua_2_2_dct_bleu = Im_2_2_dct_bleu./Qua; Une fois ce bout de code exécuté, on obtient les matrices des DCT quantifiées (qui seront codées, compressées et transmises. Écrire dans le rapport les DCT quantifiées de la couleur rouge pour les deux coins calculés (ImQua_1_1_dct_rouge et ImQua_2_2_dct_rouge). Modifier ce programme en ajoutant des boucles «for» pour quantifier l ensemble des DCT des trois couleurs sur l ensemble des blocs. Cette boucle doit pouvoir s adapter à diverses tailles d image. Stocker les DCT quantifiées de la couleur rouge dans la matrice ImQua_DCT_Rouge, ceux de la couleur verte dans la matrice ImQua_DCT_Vert et ceux de la couleur bleue dans la matrice ImQua_DCT_Bleu. Ces trois matrices auront la même taille que l image. I-2. Opérations inverses pour revenir à l image Ajouter le code nécessaire pour faire les opérations inverses, qui seront dans l ordre : 1. Déquantifier les DCT (en utilisant «.*» la matrice de quantification Qua). 2. Faire les DCT inverses (avec la fonction idct). 3. Afficher l image résultante (avec la fonction imshow). Comparer l image avec l image source. Essayer pour qualite = 1, 10 et 100. Comparer les images obtenues avec l image source. I-3. Test du programme sur une image réelle Modifier le programme pour pouvoir aller chercher une image réelle (0000679.jpg montrée en page suivante). Essayer pour qualite = 1, 10 et 100. Comparer les images obtenues avec l image source. Page 7
Retour sur les livrables : Le listing du programme final en MATLAB (fournir une version électronique); DCT et DCT quantifiée pour la couleur rouge; Images originales et images suite au traitement; Discussion sur les résultats obtenus. Note importante : Fournir une version électronique de votre programme. Votre professeur la testera avec la figure suivante (orage.jpg) : Merci de votre patience que vous avez eu tout au long de la session. Guy Gauthier. Page 8