我正在尝试使用霍夫曼代码对我拥有的矩阵(在计算帧差异之后)进行编码,但我在完成它时遇到了困难
我希望用霍夫曼编码的矩阵称为“amp”
我发现的东西是这样的:
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, & 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) & ~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) > 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))';
...
但是在上面的代码中,我如何声明使用名为“amp”的矩阵?
提前致谢