Note that there are some explanatory texts on larger screens.

plurals
  1. POCreate image from Huffman code - Matlab
    primarykey
    data
    text
    <p>I have a project about image compression in Matlab. So far i have successfully implemented Huffman encoding to the image which gives me a vector of binary codes. After that i run Huffman decoding and i get a vector which contains the elements of the image compressed. My problem is that i can find how is possible from this vector to reconstruct the image and create the image file.</p> <p>Any help would be grateful</p> <p><strong>Update</strong></p> <p>Based on Ben A. help i have made progress but i still have some issues. To be more exact. I have an image matrix. After finding unique symbols(elements) on this image matrix, i calculate the probabilities and then with this function:</p> <pre><code>function [h,L,H]=Huffman_code(p,opt) % Huffman code generator gives a Huffman code matrix h, % average codeword length L &amp; entropy H % for a source with probability vector p given as argin(1) zero_one=['0'; '1']; if nargin&gt;1&amp;&amp;opt&gt;0, zero_one=['1'; '0']; end if abs(sum(p)-1)&gt;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&gt;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&gt;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) </code></pre> <p>i calculate the huffman codes for the image.</p> <p>Now i use this function:</p> <pre><code>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)&lt;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 </code></pre> <p>where in src i put my image (matrix) and i get a coded sequence for my image.</p> <p>Last is this function:</p> <pre><code>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&gt;=lc&amp;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 </code></pre> <p>Which is used to decode the coded sequence. The problem is that finally as coded sequence i get a 1x400 matrix where i should get a 225x400 which is my image dimensions. Am i missing something? Maybe should i replace something because i have a matrix and not a number sequence (for which the code is written)?</p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload