📄 haffman.m
字号:
function c=haffman(I) %定义Huffman编码子程序
[m,n]=size(I);
p1=1;s=m*n;
for k=1:m
for h=1:n
f=0;
for b=1:p1-1
if(c(b,1)==I(k,h)) f=1;break;
end
end
if(f==0) c(p1,1)=I(k,h);p1=p1+1;
end
end
end
for g=1:p1-1
p(g)=0;c(g,2)=0;
for k=1:m
for h=1:n
if(c(g,1)==I(k,h)) p(g)=p(g)+1;
end
end
end
p(g)=p(g)/s;
end
pn=0;po=1;
while(1)
if(pn>=1.0) break;
else
[pm p2]=min(p(1:p1-1));p(p2)=1.1;
[pm2,p3]=min(p(1:p1-1));p(p3)=1.1;
pn=pm+pm2;p(p1)=pn;
tree(po,1)=p2;tree(po,2)=p3;
po=po+1;p1=p1+1;
end
end
for k=1:po-1
tt=k;m1=1;
if(or(tree(k,1)<9,tree(k,2)<9))
if(tree(k,1)<9)
c(tree(k,1),2)=c(tree(k,1),2)+m1;
m2=1;
while(tt
m1=m1*2;
for h=tt:po-1
if(tree(h,1)==tt+g)
c(tree(k,1),2)=c(tree(k,1),2)+m1;
m2=m2+1;tt=h;break;
elseif(tree(h,2)==tt+g)
m2=m2+1;tt=h;break;
end
end
end
c(tree(k,1),3)=m2;
end
tt=k;m1=1;
if(tree(k,2)<9)
m2=1;
while(tt
m1=m1*2;
for h=tt:po-1
if(tree(h,1)==tt+g)
c(tree(k,2),2)=c(tree(k,2),2)+m1;
m2=m2+1;tt=h;break;
elseif(tree(l,2)==tt+g)
m2=m2+1,tt=h;break;
end
end
end
c(tree(k,2),3)=m2;
end
end
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -