📄 haffuman.m
字号:
function g=haffuman(data)
%haffuman() use to code the data
%the input data is the sign and their probability !
%进行哈夫曼编码,
%输入data为二维灰度图象数据,输出为g:2维元胞矩阵,里面第一列为符号(像素值),第二列为:输出的哈夫曼编码
sgailv=getsignpro(data);
paixu=paixuhuff(sgailv)
n=size(paixu);
n1=n(1);
paixu2=paixu;
for v=1:n1
paixu2(v,1)=v;
end
b=0;
n1=n1-1;
for k=n1:-1:1
paixu2(k,2)= paixu2(k,2)+ paixu2(k+1,2);
b=b+1;
dt(1,b)= paixu2(k,1);
dt(2,b)= paixu2(k+1,1);
paixu2(k+1,:)=[] ;
paixu2=paixuhuff( paixu2);
end
%下面对dt进行编码 dt矩阵的长为 n1 按上面的初始的排序顺序,建立一个元胞矩阵返回。
ret(dt(1,n1),2)={0};
ret(dt(2,n1),2)={1};
for k=n1:-1:1
for t=1:2
if dt(t,k)~=-1
for k2=(k-1):-1:1
if dt(1,k2)~=-1 & dt(2,k2)~=-1
if dt(t,k)==dt(1,k2)
bn=ret{dt(t,k),2};
ret(dt(1,k2),2)={[0 bn]};
ret(dt(2,k2),2)={[1 bn]};
dt(1,k2)=-1;
elseif dt(t,k)==dt(2,k2)
bn=ret{dt(t,k),2};
ret(dt(1,k2),2)={[0 bn]};
ret(dt(2,k2),2)={[1 bn]};
dt(2,k2)=-1;
end
end
end
end
end
end
n1=n1+1;
for k=1:n1
ret(k,1)={paixu(k,1)};
sign=paixu(k,1);
mazi=ret{k,2}
end
g=ret;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -