partie 1 : Compression :

 

Traitement Huffman2 pour une image en RVB

function [code_huff_y,code_huff_cb,code_huff_cr,dico_y,dico_cb,dico_cr]=traitement_huff2_rvb(matrice3,qualite)

%Codage HUFFMAN2 pour RVB

%Récupérer les matrices rouge,vert et blue

R=matrice3(:,:,1);V=matrice3(:,:,2);B=matrice3(:,:,3);

%Transformation du RVB > YCBCR

[Y,CB,CR]=toycbcr (R,V,B);

%DCT

Y=double(Y)-128; CB=double(CB)-128; CR=double(CR)-128;

Ydct=dct2dim (Y);CBdct=dct2dim (CB);CRdct=dct2dim (CR);

%Quantification

Yquantifie=quantification (Ydct,qualite,0);

CBquantifie=quantification (CBdct,qualite,1);

CRquantifie=quantification (CRdct,qualite,1);

%Zigzag

Yzig=zigzag (Yquantifie);

CBzig=zigzag (CBquantifie);

CRzig=zigzag (CRquantifie);

%Encodage rle

yrle=encodage_rle (Yzig);

CBrle=encodage_rle (CBzig);

CRrle=encodage_rle (CRzig);

%Transformation en cell array

clear codey;clear codecb;clear codecr;clear dico_y;clear dico_cb;clear dico_cr;

for i=1:length(yrle)

    codey{i}= yrle(i);

end % end for 

for i=1:length(CBrle)

    codecb{i}= CBrle(i);

end % end for

for i=1:length(CRrle)

    codecr{i}= CRrle(i);

end % end for 

[code_huff_y,dico_y]=huffman_2 (codey);

code_huff_y=[code_huff_y 'e']; %FIN code

dico_y{1,end+1}='#';dico_y{2,end}='#'; % FIN dico

[code_huff_cb,dico_cb]=huffman_2 (codecb);

code_huff_cb=[code_huff_cb 'e']; %FIN code

dico_cb{1,end+1}='#';dico_cb{2,end}='#'; %FIN dico

[code_huff_cr,dico_cr]=huffman_2 (codecr);

code_huff_cr=[code_huff_cr 'e']; %FIN code

dico_cr{1,end+1}='#';dico_cr{2,end}='#'; %FIN dico