霍夫曼编码
mat2huff函数
function y = mat2huff( x )
%MAT2HUFF 编码了一个矩阵
% Y = MAT2HUFF(X) Huffman使用符号概率在单位宽度的直方图bins上编码了
%矩阵X ,范围在X 的最大值和最小值之间。被编码的数据作为结构体Y 被
%返回:
%Y.code X被Huffman编码的值,存储在一个uint16的向量里。Y 的其他
% 领域包括额外的解码信息,包括:
% Y.min X的最小值+32768
% Y.size X的大小
% Y.hist X的直方图
%可以作为输入的X的类型:logical, uint8,uint16,uint32,int8,int16
%或double.X的最小值必须被表示为int16
%
%如果X是一个非整数值的double类,例如一幅值在0,1之间
%的图像,在调用之前,首先将x缩放到适当的整数范围。例如,使用Y =
%MAT2HUFF(255*X)对256灰度级进行编码
%
%注意:Huffman编码单词的数目在round(max(X(:)))-
%rount(min(X(:))) +1之间。你可能需要缩放输入X
%以生成合理长度的代码。X的最大行列尺寸为65535.
if ndims(x) = 2 | ~isreal(x) | (~isnumeric(x) & islogical(x))
error('X must be a 2-D real numeric or logical matrix');
end
%存储输入x的大小
y.size = uint32(size(x));
%寻找x值的范围并存储他的最小值为unit16格式
x = round(double(x));
xmin = min(x(:));
x