Image erzeugen von Huffman-code - Matlab

Habe ich ein Projekt über die Bild-Komprimierung in Matlab. Bisher habe ich erfolgreich umgesetzt Huffman-Codierung, um das Bild, das gibt mir einen Vektor von binären codes. Nach, dass ich die Huffman-Decodierung und ich bekomme ein Vektor enthält die Elemente des Bildes komprimiert. Mein problem ist, dass ich finden kann, wie möglich von diesem Vektor um das Bild zu rekonstruieren und erstellen der image-Datei.

Jede Hilfe wäre dankbar

Update

Basierend auf Ben A. helfen, ich habe Fortschritte gemacht, aber ich habe noch einige Fragen.
Um genauer zu sein. Ich habe eine Bild-matrix. Nach der Suche nach einzigartigen Symbole(Elemente) auf diesem Bild-matrix, berechne ich die Wahrscheinlichkeiten und dann mit dieser Funktion:

function [h,L,H]=Huffman_code(p,opt)
% Huffman code generator gives a Huffman code matrix h, 
%  average codeword length L & entropy H
% for a source with probability vector p given as argin(1) 
zero_one=['0'; '1']; 
if nargin>1&&opt>0, zero_one=['1'; '0']; end
if abs(sum(p)-1)>1e-6
  fprintf('\n The probabilities in p does not add up to 1!');
end  
M=length(p);  N=M-1; p=p(:); % Make p a column vector
h={zero_one(1),zero_one(2)};
if M>2
  pp(:,1)=p;
  for n=1:N
     % To sort in descending order
     [pp(1:M-n+1,n),o(1:M-n+1,n)]=sort(pp(1:M-n+1,n),1,'descend'); 
     if n==1, ord0=o; end  % Original descending order
     if M-n>1, pp(1:M-n,n+1)=[pp(1:M-1-n,n); sum(pp(M-n:M-n+1,n))]; end
  end
  for n=N:-1:2
     tmp=N-n+2; oi=o(1:tmp,n);
     for i=1:tmp, h1{oi(i)}=h{i}; end
     h=h1;   h{tmp+1}=h{tmp};
     h{tmp}=[h{tmp} zero_one(1)]; 
     h{tmp+1}=[h{tmp+1} zero_one(2)];
  end
  for i=1:length(ord0), h1{ord0(i)}=h{i}; end
  h=h1;
end
L=0; 
for n=1:M, L=L+p(n)*length(h{n}); end  % Average codeword length
H=-sum(p.*log2(p)); % Entropy by Eq.(9.1.4)

ich berechnen Sie die huffman-codes für das Bild.

Nun verwende ich diese Funktion:

function coded_seq=source_coding(src,symbols,codewords)
% Encode a data sequence src based on the given (symbols,codewords).
no_of_symbols=length(symbols);  coded_seq=[];
if length(codewords)<no_of_symbols
  error('The number of codewords must equal that of symbols');
end
for n=1:length(src)
   found=0;
   for i=1:no_of_symbols
      if src(n)==symbols(i), tmp=codewords{i}; found=1; break; end
   end
   if found==0, tmp='?'; end
   coded_seq=[coded_seq tmp];
end

wo in src-lege ich mein Bild (matrix) und ich bekomme eine codierte Sequenz, die für mein Bild.

Letzten ist diese Funktion:

function decoded_seq=source_decoding(coded_seq,h,symbols)
% Decode a coded_seq  based on the given (codewords,symbols).
M=length(h);  decoded_seq=[];
while ~isempty(coded_seq)
  lcs= length(coded_seq); found=0;
  for m=1:M
    codeword= h{m};
    lc= length(codeword);
    if lcs>=lc&codeword==coded_seq(1:lc)
      symbol=symbols(m); found=1;  break;
    end
    if found==0, symbol='?'; end
  end 
  decoded_seq=[decoded_seq symbol]; 
  coded_seq=coded_seq(lc+1:end); 
end

Welche verwendet wird zum decodieren der codierten Sequenz. Das problem ist, dass schließlich als codierte Sequenz bekomme ich einen 1x400 matrix, wo sollte ich bekommen eine 225x400 das ist mein Bild-Dimensionen.
Bin ich etwas fehlt? Vielleicht sollte ich etwas ersetzen, weil ich eine matrix und nicht eine Zahlenfolge (für den der code geschrieben ist)?

InformationsquelleAutor astralreb | 2012-06-28
Schreibe einen Kommentar