Un principe de compression d’image

Slides:



Advertisements
Présentations similaires
Un principe de compression d’image
Advertisements

TIPE : JPEG Romain Fliedel MP
SSII, séance n°13, bilan du cours 15 décembre 2015 Dernière séance 2015 Résumé des chapitres et notions abordées en 2015.
NUMERISATION DE L’INFORMATION Compétences exigibles: reconnaitre des signaux de nature analogique et numérique associer un tableau de nombres à une image.
 Conversion  Analogique  Numérique  Un signal analogique est un ensemble continu d’informations. Ex : une grandeur physique comme la tension électrique.
Comparing color edge detection and segmentation methods Projet TIM.
DUT INFORMATIQUE ET GÉNIE INFORMATIQUE UE2 CONNAISSANCES ET COMPÉTENCES COMPLÉMENTAIRES EGO 4 ORGANISATION et GESTION LA CAPITALISATION ET L’ACTUALISATION.
Chapitre 3 Les ondes périodiques. Exemple d’une onde périodique sinusoïdale La perturbation sinusoïdale se reproduit identique à elle-même à intervalles.
Codage et Protection contre les Erreurs M1/M2 ISV M2 IPS 2006/2007 Neilze Dorta UFR Mathématiques et Informatiques - Crip5.
Formats de données multimédias
Support et Maintenance SIAN : MDEL partenaires
Manuel de redimensionnement et de conversion de photos sur PAINT
I- ANALYSE DU BESOIN / Plan
Techniques de compression avec pertes
La Compression de Données
PRINCIPES D’INTEGRATION
13 Apprendre à rédiger Voici l’énoncé d’un exercice et un guide (en orange) ; ce guide vous aide : pour rédiger la solution détaillée ; pour retrouver.
Comprendre la définition de bit par seconde à partir
Préparer par : Intissare et kaoutare
Information, Calcul, Communication
Représentation de l'information en binaire:
Plan du cours Introduction : création de circuits
Etalonnage d’une caméra (on parle aussi de calibrage)
Activités algorithmiques
ECHANTILLONNAGE.
Mesure de température par radiométrie photothermique
Utiliser des caractéristiques de position et de dispersion
  EXCEL FORMATION d'introduction.
Extension de fichiers*
Stabilité des porteurs horizontaux (Poutres)
3- Nouvelles pages d’accueil
Divers procédés de modulation sont utilisés dans le domaine hertzien et dans le domaine câblé pour transporter les informations numériques Ces techniques.
Formation au Numérique Codage et programmation dans les nouveaux programmes Romorantin, le 23 janvier 2018.
ACP Analyse en Composantes Principales
Filtre en traitement du signal entrée filtre sortie e s h
Programmation Android Première application Android
Du signal audio numérique à l'image numérique
Du signal audio numérique à l'image numérique
Évaluation diagnostique
Analogique-numérique
Compresser avec un banc de filtres
NUMERATION et REPRESENTATION DES NOMBRES
LA DESCRIPTION DU DIAGRAMME ÉNERGÉTIQUE
Chapitre 3 suite Acoustique musicale
TENSION SINUSOIDALE.
Cours du Professeur TANGOUR
Question flash TSTI2D.
ANALYSE HARMONIQUE 1) Rappels et définitions 2) Lieux de Bode
Le signal audio numérique
Introduction du cours à partir d’extraits
LA COMPRESSION : SES ALGORITHMES, SES UTILISATIONS AUGERT Jean-Philippe.
Filière Génie Civil – 2018 Langage C Tableaux – Exercices de révision
Présentation 4 : Sondage stratifié
Présentation 9 : Calcul de précision des estimateurs complexes
Les signaux périodiques
Sous-échantillonner le signal audio pour compresser
Information, Calcul, Communication
Reconnaissance de formes: lettres/chiffres
Construire et utiliser un banc de filtres
Créer un filtre sur mesure (pour compresser)
S.S.I.I , SI3, cours n°9 : Du signal audio numérique à l'image numérique Page 1 Du signal audio numérique à l'image numérique Cours S.S.I.I.,
Opérateurs et fonctions arithmétiques Opérateurs de relation Opérateurs logiques Cours 02.
Présentation des nouveaux programmes de mathématiques de première des séries technologiques Jessica Parsis.
Sous-échantillonner le signal audio pour compresser
Exploiter la fonction fft(.) de Scilab
STS Web Services libres Gérer les services libres
Python Nicolas THIBAULT
Type Tableau Partie 1 : Vecteurs
Catherine Cyrot - bibliothèques numériques - cours 3
Dérivation – Fonctions cosinus et sinus
Transcription de la présentation:

Un principe de compression d’image Cours S.S.I.I. n° 10, décembre 2015, durée : 50 mn, Jean-Paul Stromboni pour les élèves SI3 Après cette séance, vous devriez savoir : Décrire le principe de la compression JPEG des images numériques Expliquer ce qu’on entend par composition fréquentielle d’une image Comparer transformée en cosinus discret et Transformée de Fourier Discrète Donner la signification des coefficients DCT Compresser une image en négligeant les coefficients DCT les plus faibles Ce cours a été rédigé à partir de plusieurs sources, dont le cours de Pierre Nerzic à l’Université de Rennes et à l’IUT de Lannion : ‘S3P3 – Codages et compression.html’ cliquer ici pour récupérer le document au format pdf TD 11 : Application avec SIVP et les scripts Scilab ‘madct.sci’ et ‘idct.sci’ au besoin On appliquera la DCT, puis une quantification et la DCT inverse, à une image de niveaux de gris tirée d’une image couleur à choisir librement, on veillera simplement à découper une image suffisamment petite (par exemple 64x64 pixels) pour alléger les calculs.

Schéma de principe de la compression JPEG (d’après Wikipédia) Découpage de l’image en blocs de 8x8 pixels Séparation de chaque bloc en plans Y (luminance), Cr et Cb (chrominances rouge et bleu) Sous échantillonnage de Cr et Cb dans un rapport 2 suivant la hauteur et suivant la largeur DCT (Discrete Cosine Transform) des blocs : pour chaque bloc, on obtient 8x8 coefficients qui définissent la composition fréquentielle spatiale du bloc Quantification : les coefficients DCT les plus faibles en valeur absolue sont annulés ou codés sur un nombre de bits plus faible (le pas de quantification augmente) Codage RLE (Run Length Encoding) et codage de Huffman (Variable Length Coding) pour compresser davantage

Transformation de couleurs et sous échantillonnage On a vu déjà (d’après Wikipédia) : De RVB à YUV : Y = 0,299⋅R + 0,587⋅G + 0,114⋅B U = Cb = 0,492⋅(B − Y) = −0,14713⋅R − 0,28886⋅G + 0,436⋅B V = Cr = 0,877⋅(R − Y) = 0,615⋅R − 0,51498⋅G- 0,10001⋅B De YUV à RVB : R = Y + 1,13983⋅V G = Y − 0,39465⋅U − 0,58060⋅V B = Y + 2,03211⋅U Compression par sous échantillonnage de Cb (U) et Cr (V) (d’après http://www-ljk.imag.fr/membres/Valerie.Perrier/SiteWeb/node8.html) C= 3/1.5= 2

DCT (Discrete Cosine Transform) est une forme de la Transformée de Fourier discrète (TFD) utilisée pour la compression JPEG (Joint Picture Expert Group) Ci-dessous un exemple fourni par Scilab dans l’aide de la fonction ‘dct’ (faire : help dct): noter que s est de taille 601 échantillons, d= dct(s) de même taille, contient la composition fréquentielle de s, et c’est un vecteur réel d(abs(d))<1)= 0 annule les composantes de ‘d’ inférieures à 1 en valeur absolue restent 20 composantes non nulles, le taux de compression C= 601/20 ‘dct(d,1)’ ou ‘idct(d)’ calculent la dct inverse du vecteur d. voir ci-dessous s en bleu et dct(d,1) en rouge //Frequency components of a signal //---------------------------------- // build a sampled at 1000hz containing // pure frequencies at 50 and 70 Hz sample_rate=1000; t = 0:1/sample_rate:0.6; N=size(t,'*'); //number of samples s=sin(2*%pi*50*t)+sin(2*%pi*70*t+%pi/4); d=dct(s); //dct // zero low energy components D(abs(d)<1)= 0;//compression par seuil size(find(d<>0),'*') // 20 nonzero coefficients out of 600 clf; plot(s,'b'), plot(dct(d,1),'r') //dct inverse plot2d(f,d) f=[0:N-1]*sample_rate/(2*N); xtitle('coefficients de dct(s)',... 'freq (Hz)', 'd') xgrid Page 4

Comparaison des fonctions dct et fft de Scilab Soit le signal s= [sn, n=0 .. N-1], avec sn=s(n/fe) S=fft(s)=[Sk, k=0..N-1], de taille N D= dct(s)= [Dm, m= 0 .. N-1], Comparaison : D est un vecteur réel, S est un vecteur complexe Les fréquences des termes Sk et Dm calculés sont différentes Pour fft, Sk=S(fk) : Pour dct, Dm=D(fm):

Fréquence spatiale dans une image (loi d’intensité sinusoïdale) h(x)=(1+cos(2*p*f*x))/2 N pixels sur la longueur L L/N =Te, période d’échantillonnage N/L= fe, fréquence d’échantillonnage (ou résolution en ppp ou dpi) Si P pixels dans une période de h(x) : (P*L)/N= T, période de h(x) N/(L*P)= f, fréquence de h(x) Fréquences normalisées: on choisit L= N unités de longueur fe= N/L= 1 pixel par unité de longueur Te=1 unité de longueur par pixel N/(L*P)= 1/P = f, fréquence de h(x) h(x)= (1+cos(2*p*x/P))/2, x= 0 … N-1, avec 0=< x < L (puisque N = L) Image élémentaire : Soit v(y) = (1+cos(2*p*y/Q))/2, y= 0 … M-1, avec 0=< y < H M/H=1, fréquence d’échantillonnage (ou résolution verticale en ppp ou dpi) Im= v’*h; définit une image élémentaire Im dotée d’une fréquence horizontale : 1/P et d’une fréquence verticale : 1/Q

Application : créer et afficher une image de niveaux de gris contenant une unique fréquence spatiale horizontale

Utilisation de la DCT 2D dans le principe de compression JPEG L’image à compresser est découpée en blocs de 8x8 pixels, auxquels on applique la DCT bidimensionnelle suivante, avec N=8 : C(i) vaut 1 pour i non nul, et sqrt(2) pour i = 0 (de même pour C(j) et j) pixel(x, y), avec x=0..7, et y=0.. 7 définit un bloc de 8x8 pixels DCT(i, j), i=0..7, j=0..7, contient la composition fréquentielle du bloc DCT(i, j) est l’amplitude de la composante fréquentielle du bloc aux fréquences normalisées j/16 horizontale et i/16 verticale (fréquences variant entre 0 et 0.5 -- fe/2= 0.5) 8x8 pixels donnent 8x8 coefficients DCT, le taux de compression est C=1 Calcul et tracé de la dct de l’image sinusoïdale précédente et calcul de la dct inverse

Une image de niveaux de gris avec une fréquence spatiale verticale

Une image ‘élémentaire’ dotée d’une fréquence horizontale et d’une fréquence verticale

La fonction DCT inverse (idct en Scilab) reconstitue le bloc de pixels initial en faisant une somme pondérée des 64 images élémentaires ci-dessous Chaque image élémentaire contient une fréquence horizontale et une fréquence verticale. Les coefficients de pondération sont les DCT(i,j), i=0..7, j=0 .. 7. Correspondance entre i, j et les fréquences normalisées : fv = i/(2*N)=j/16, et fh= j/(2N)=j/16. j=0 j=1 j=7 j i=0 0.5 fh i=1 0.5 fv i=7 i

Pour compresser un bloc, il faut négliger des coefficients DCT Les coefficients DCT diminuent quand la fréquence augmente, on parcourt le tableau DCT en zigzag pour s’éloigner progressivement de l’origine des fréquences en haut et à gauche : Codage en zigzag : on parcourt les coefficients DCT(i,j) à (i+j) croissant : i=j=0, le coefficient DCT(0,0) i=1, j=0, puis i=0, j=1, les coefficients DCT(1,0) puis DCT(0,1), i=2, j=0, puis i=1, j=1, puis i=0, j=2, etc … On note le dernier coefficient non nul, soit K, et on transmet uniquement les K coefficients non nuls : le taux de compression du bloc est alors C=64/K 0,0 j=0 j=1 j=7 j i=0 D(0,0) D(0,1) D(1,0) D(2,0) D(1,1) D(0,2) … i=1 i=7 i

Pour augmenter le taux de compression, il faut annuler les coefficients les plus faibles, ou augmenter le pas de quantification utilisé pour les coder en binaire j=0 j=1 j=7 j 0,0 Compression par zonage : on décrit la matrice D des coefficients en ‘zigzag’, et on annule les coefficients à partir d’une distance fixée : à partir du second, pour i+j >0 (C=64) à partir du quatrième, pour i+j >1 (C=64/3) à partir du septième (C=64/6), etc … on peut procéder en multipliant D par la matrice ci contre pour (i+j) > 2 Compression par seuil : D(abs(D)<seuil)=0; Compression par quantification : on crée une matrice Q contenant un pas de quantification Q(i,j) pour chacun des coefficients D(i,j), par exemple en faisant : Q(i,j)= 1+ (i+j)*q On fait la division entière de D par Q, soit Dq= floor(D./Q); On comptabilise les K coefficients non nuls restants, et C=64/K On décompresse en multipliant Dq par Q, puis en appliquant la DCT inverse i=0 i=0 1 .. i=1 i=1 i=7 i j=0 j=1 1+q 1+2q … i=0 i=1 Q

Application à l’aide de Scilab : un exemple sur une image de niveaux de gris // compressionTest.sce exec('quantzone.sci'); // test de compression fichier='cameraman.png'; im=imread(fichier); imshow(im); // image de niveaux de gris img=rgb2gray(im); // découper image 64x64 pixels ssim=imcrop(img,[96,32,64,64]); imshow(ssim) // format réel (0.0< intensité< 1.0) imd=im2double(ssim); imshow(imd) // ‘dct’ de blocs de 8x8 pixels // extraits de imd X=size(ssim,'c') Y=size(ssim,'r') D=zeros(X,Y); sim=[ ] dctim=[ ] for i=1:8:Y-1 for j=1:8:X-1 sim=imd(i:i+7,j:j+7); dctim=dct(sim); D(i:i+7,j:j+7)=dctim; end // affichage de D dans un plot X=size(D,'c'); Y=size(D,'r'); y=Y:-1:1; x=1: X; xset("colormap", jetcolormap(256)) grayplot(x, y, D, strf="041"); colorbar(min(abs(D)), max(abs(D))) // quantification par zonage [Q,C]=quantzone(sim,6); ssimrec=zeros(X,Y); for i=1:8:Y-1 for j=1:8:X-1 sim=D(i:i+7,j:j+7); sim=sim.*Q; // ici on approxime dctim=dct(sim,1); // dct inverse ssimrec(i:i+7,j:j+7)=dctim; end C // taux de compression // affichage de imd dans un plot X=size(ssimrec,'c') Y=size(ssimrec,'r') x=X:-1:1; y=1:Y; xset("colormap",graycolormap(256)) Sgrayplot(y,x,imd',strf="041"); colorbar(0,1) // affichage de l’image décompressée scf(2); xset("colormap",graycolormap(256)) Sgrayplot(y,x,ssimrec',strf="041");

Illustration sur l’image 64x64 suivante tirée de ‘cameraman.jpg ssim=imcrop(img,[96,32,64,64]); 64x 64 Coefficients DCT Résultat avec la fonction [Q,C]=quantzone(sim, 6), C= 3.047

Principe des codages RLE et VLC ( p. ex. code de Huffman) 1 2 3 Ici, la matrice des coefficients de Fourier décrite en zigzag vaut D=[1, 2 , 2, 3, 3, 3, 0, …, 0] avec 58 ‘0’ terminaux RLE (pour Run Length Encoding) propose de coder ainsi la matrice des 64 coefficients : D= [<1> 1, <2> 2, <3> 3, <58> 0] soient 8 octets au lieu de 64 en JPEG, on utilise même un caractère EoB au lieu du <58> 0 terminal VLC (pour Variable Length Code), compte les occurrences de chaque code nécessaire et module le nombre de bits en fonction de la fréquence d’apparition des codes, par exemple ici 0 apparaît 58 fois, 1 une fois, 2 deux fois et 3 trois fois on pourrait coder 0 sur deux bits, ‘1O’, puis 3 sur trois bits, ‘110’, 2 par ‘1110’ et 1 par ‘1111’ par exemple