title: Matlab Huffman Encoding in matrix
body: <p>I am trying to encode a matrix that i have (after calculating frame differences) with Huffman code but i am having difficulties completing it</p>
  
  <p>The matrix i wish to encode with huffman is called "amp"</p>
  
  <p>Something that i found is this:</p>
  
  <pre><code>function y = mat2huff(x)
  %MAT2HUFF Huffman encodes a matrix.
  %   Y = MAT2HUFF(X) Huffman encodes matrix X using symbol
  %   probabilities in unit-width histogram bins between X's minimum
  %   and maximum values. The encoded data is returned as a structure
  %   Y: 
  %      Y.code   The Huffman-encoded values of X, stored in
  %               a uint16 vector.  The other fields of Y contain
  %               additional decoding information, including:
  %      Y.min    The minimum value of X plus 32768
  %      Y.size   The size of X
  %      Y.hist   The histogram of X
  %
  %   If X is logical, uint8, uint16, uint32, int8, int16, or double,
  %   with integer values, it can be input directly to MAT2HUFF. The
  %   minimum value of X must be representable as an int16.  
  %
  %   If X is double with non-integer values---for example, an image
  %   with values between 0 and 1---first scale X to an appropriate
  %   integer range before the call. For example, use Y =
  %   MAT2HUFF(255*X) for 256 gray level encoding.   
  %
  %   NOTE: The number of Huffman code words is round(max(X(:))) -
  %   round(min(X(:))) + 1.  You may need to scale input X to generate
  %   codes of reasonable length.  The maximum row or column dimension
  %   of X is 65535. 
  %
  %   See also HUFF2MAT.
  
  %   Copyright 2002-2004 R. C. Gonzalez, R. E. Woods, &amp; S. L. Eddins
  %   Digital Image Processing Using MATLAB, Prentice-Hall, 2004
  %   $Revision: 1.5 $  $Date: 2003/11/21 15:21:12 $
  
  if ndims(x) ~= 2 | ~isreal(x) | (~isnumeric(x) &amp; ~islogical(x))
     error('X must be a 2-D real numeric or logical matrix.');
  end
  
  % Store the size of input x.
  y.size = uint32(size(x));
  
  % Find the range of x values and store its minimum value biased
  % by +32768 as a UINT16.
  x = round(double(x));
  xmin = min(x(:));
  xmax = max(x(:));
  pmin = double(int16(xmin));
  pmin = uint16(pmin + 32768);    y.min = pmin;
  
  % Compute the input histogram between xmin and xmax with unit
  % width bins, scale to UINT16, and store.
  x = x(:)';
  h = histc(x, xmin:xmax);
  if max(h) &gt; 65535
      h = 65535 * h / max(h);
  end
  h = uint16(h);   y.hist = h;
  
  % Code the input matrix and store the result.
  map = huffman(double(h));          % Make Huffman code map
  hx = map(x(:) - xmin + 1);         % Map image
  hx = char(hx)';                    % Convert to char array
  hx = hx(:)';
  hx(hx == ' ') = [];                % Remove blanks
  ysize = ceil(length(hx) / 16);     % Compute encoded size
  hx16 = repmat('0', 1, ysize * 16); % Pre-allocate modulo-16 vector
  hx16(1:length(hx)) = hx;           % Make hx modulo-16 in length
  hx16 = reshape(hx16, 16, ysize);   % Reshape to 16-character words
  hx16 = hx16' - '0';                % Convert binary string to decimal
  twos = pow2(15:-1:0);
  y.code = uint16(sum(hx16 .* twos(ones(ysize, 1), :), 2))';
  
   ...
  </code></pre>
  
  <p>But in the above code how do i declare to use my matrix called "amp"?</p>
  
  <p>Thanks in advance</p>