📄 huffman.m
字号:
I=imread('lena256.bmp');
[m,n]=size(I);
p1=1;s=m*n;
for k=1:m
for L=1:n
f=0;
for b=1:p1-1
if (c(b,1)==I(k,L)) f=1;break;end
end
if (f==0) c(p1,1)=II(k,L);p1=p1+1;end
end
end
for g=1:p1-1
p(g)=0;c(g,2)=0;
for k=1:m
for L=1:n
if (c(g,1)==I(k,L)) 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)<g,tree(k,2)<g))
if (tree(k,1)<g)
c(tree(k,1),2)=c(tree(k,1),2)+m1;
m2=1;
while (tt<po-1)
m1=m1*2;
for L=tt:po-1
if (tree(L,1)==tt+g)
c(tree(k,1),2)=c(tree(k,1),2)+m1;
m2=m2+1;tt=L;break;
elseif (tree(L,2)==tt+g)
m2=m2+1,tt=L;break;
end
end
end
c(tree(k,1),3)=m2;
end
tt=k;m1=1;
if (tree(k,2)<g)
m2=1;
while (tt<po-1)
m1=m1*2;
for L=tt:po-1
if (tree(L,1)==tt+g)
c(tree(k,2),2)=c(tree(k,2),2)+m1;
m2=m2+1;tt=L;break;
elseif (tree(L,2)==tt+g)
m2=m2+1;tt=L;break;
end
end
end
c(tree(k,2),3)=m2;
end
end
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -