mat2huff.m

本文详细解析MATLAB脚本mat2huff.m,该脚本用于将矩阵数据转换为哈夫曼编码。主要内容包括哈夫曼编码的基本原理、mat2huff的实现过程以及使用示例,帮助读者理解如何利用MATLAB进行数据压缩。
摘要由CSDN通过智能技术生成
%mat2huff源函数
function =mat2huff(x)
%mat2huff编码一个矩阵
%使用符号概率在最大值和最小值之间建立单位宽度直方图。
%编码数据返回一个结构y
%y:
%y.code     x的Huffman编码值,储存在16比特向量。y的其他领域包括额外的解码信息,包括:
%y.min       x的最小值加32768
%y.size       x的大小
%y.hist       x的直方图

%如果x是logical,uint8,uint16,uint32,int8,int16,或者double的整数值,可以直接输入到mat2muff中。
%x的最小值必须是int16.

%如果x是非整值的double。例如:一个图像的值在0和1之间,首先x的大小应该接近整数的范围。
%例如y=mat2huff(255*x)是256灰度级编码

%note:
%Huffman的编码数是round(max(x(:)))-round(min(x(:)))+1.输出x的产生合理的长度.x的行数和列数的最大维数和最小维数是65535.

if ndims(x)~=2 | ~isreal(x) | (~isnumeric) & ~islogical(x))
    error('X must be a 2-D real numeric or logical matrix.');
end

%输入x的类型
 y.size=uint32(size(x));
 
 %找到x的范围并储存最小值+32768作为一个uint16.
 x=round(double(x));
 xmin=min(x(:));
 xmax=max(x(:));
 pmin=double(int16(xmin)); y.min=pmin;
 
 %使用x的最小值和最大值之间之间的单位宽度bin计算x的直方图h,并缩放该直方图,以使其为uint16向量。
 x=x(:)';
 h=histc(x,xmin,xmax);
 if max(h)>65535
     h=65535*h/max(h);
 end
 h=uint16(h);y.hist=h;
 
 %编码输入矩阵和储存结果
 map=huffman(double(h));%做Huffman编码图
 hx=map(x(:)-xmin+1);%产生单元数组
 hx=hx(:)';%转成字符数组
 hx(hx=='')=[];%删除空格符
 ysize=ceil(length(hx)/16);%计算编码大小
 hx16(1:length(hx))=hx;%分配模16向量
 hx16=hx16'-'0';%在长度上做hx模16
 twos=pow2(15:-1:0);%重建
 y.code=uint16(sum(hx16.*twos(ones(ysize,1),:),2))';%转变二维字符串为十进制
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值