partie 2 :DeCompression :

 

Décodage Huffman1 pour un bloc de pixels en RVB

function Matrice3=decodhuff_rvb(code_huffman,Y_dico,CB_dico,CR_dico)

% Récupérer la matrice de pixels après la décompression HUFFMAN1 (couleurs)

%Récupérer la qualité

qualite=CR_dico{end};

x=1;

%Récupérer les chaînes Y CB et CR

for i=1:length(code_huffman)

   if strcmp(code_huffman{i},'y')==1

   Y=code_huffman(1:i);

   x=1+i;

   end % end if

   if strcmp(code_huffman{i},'c')==1

   CB=code_huffman(x:i);

   x=1+i;

   end % end if

   if strcmp(code_huffman{i},'r')==1

   CR=code_huffman(x:i);

   end % end if

end % end for

Y=Y(1:end-1);CB=CB(1:end-1);CR=CR(1:end-1);

%Répérer chaque ligne de code

x=1;t=1;

for i=1:length(Y)

    if strcmp(Y{i},'e')==1

    eval([ 'y' num2str(x)  '=Y(t:i);']);

    t=i+1;x=x+1;

    end % end if

end % end for

 

x=1;t=1;

for i=1:length(CB)

    if strcmp(CB{i},'e')==1

    eval([ 'cb' num2str(x)  '=CB(t:i);']);

    t=i+1;x=x+1;

    end % end if

end % end for

x=1;t=1;

for i=1:length(CR)

    if strcmp(CR{i},'e')==1

    eval([ 'cr' num2str(x)  '=CR(t:i);']);

    t=i+1;x=x+1;

    end % end if

end % end for

%Répérer chaque ligne du dictionnaire

x=1;t=1;f=1;oo=1;

for i=1:length(Y_dico)

    if strcmp(Y_dico{1,i},'#')==1

        for f=t:i

           variable{1,f}=Y_dico{1,f};

           variable{2,f}=Y_dico{2,f};

        end % end for

     variable=enlever_vide (variable);

     eval([ 'w' num2str(x)  '=variable;']);

     t=i+1;x=x+1; clear variable;

    end % end if

end % end for 

x=1;t=1;f=1;oo=1;

for i=1:length(CB_dico)

    if strcmp(CB_dico{1,i},'#')==1

        for f=t:i

           variable{1,f}=CB_dico{1,f};

           variable{2,f}=CB_dico{2,f};

        end % end for

      variable=enlever_vide (variable);

      eval([ 'q' num2str(x)  '=variable;']);

      t=i+1;x=x+1; clear variable;

    end % end if

end % end for

x=1;t=1;f=1;oo=1;

for i=1:length(CR_dico)

    if strcmp(CR_dico{1,i},'#')==1

       for f=t:i

           variable{1,f}=CR_dico{1,f};

           variable{2,f}=CR_dico{2,f};

       end % end for

     variable=enlever_vide (variable);

     eval([ 's' num2str(x)  '=variable;']);

     t=i+1;x=x+1; clear variable;

    end % end if

end % end for

save fichiers_mat/vect;

%Récupérer les blocs de pixels

x=x-1;load fichiers_mat/vect;i=1;

while i<x

    code_huff_y=eval([ 'y' num2str(i)]);

    code_huff_cb=eval([ 'cb' num2str(i)]);

    code_huff_cr=eval([ 'cr' num2str(i)]);

    dico_y=eval([ 'w' num2str(i)]);

    dico_cb=eval([ 'q' num2str(i)]);

    dico_cr=eval([ 's' num2str(i)]);

    [r,v,b]=traitement_huff_rvb_inverse(code_huff_y,code_huff_cb,code_huff_cr,dico_y,dico_cb,dico_cr,qualite);

    eval([ 'r' num2str(i) '=r;']);

    eval([ 'v' num2str(i) '=v;']);

    eval([ 'b' num2str(i) '=b;']);

i=i+1;

end % end while

%Recoller les blocs

load fichiers_mat/dim;load fichiers_mat/matrices;

G=xx;P=nn/8;

RR=ret_bloc ('r',G,P);

VV=ret_bloc ('v',G,P);

BB=ret_bloc ('b',G,P);

R=eval(['[' RR ']']);

V=eval(['[' VV ']']);

B=eval(['[' BB ']']);

%Redimensionner l'image

load fichiers_mat/indices;

R=decomp_block (R,indL,indC);

V=decomp_block (V,indL,indC);

B=decomp_block (B,indL,indC);

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