?? huffman.m
字號:
%function a=huffman[b]
%%%%%%%%數(shù)字圖像Huffman壓縮編碼實現(xiàn)%%%%%%%%%%%%%%%%%%%
clc
clear
J=imread('0.bmp');
%title('原始圖象');
%imshow(J);
I=double(J);
% load I;
[m,n]=size(I);
%%%%%%將矩陣的不同數(shù)統(tǒng)計在數(shù)組c的第一列中%%%%%%%%%%%%
p1=1;
s=m*n;
for i=1:m
for j=1:n
c(j+512*(i-1),1)=I(j,i);
end
end
% f=0;
% for b=1:p1-1
% if(c(b,1) == I(k,L))
% f=1;
% break;
% end
% if(f==0)
% c(p1,1)=I(k,L);
% p1=p1+1;
% end
% end
% end
%end
%%%%%%%%%%%將相同的數(shù)占站整個數(shù)組總數(shù)的比例統(tǒng)計在數(shù)組p中%%%%%%%
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
p11=p;
%%%%%%%%找到最小的概率,相加直到等于1,把最小概率的序號存在tree第一列中,次小放在第二列,和放在p像素比例之后%%%%%%%
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
%%%%%%%%%C數(shù)組第一維表示值,第二維表示代碼數(shù)值大小,第三維表示代碼的位數(shù)po=8 g=8
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
%%%%%%%%%把概率小的值為1標識,概率大的值為0標識%%%%%%
[M,N]=size(c);
disp('編碼')
A1=dec2bin(c(1,2),c(1,3)) %%%說明:這里可以把編碼存在高維數(shù)組或構(gòu)架數(shù)組、元胞數(shù)組同時顯示。
A2=dec2bin(c(2,2),c(2,3))
A3=dec2bin(c(3,2),c(3,3))
A4=dec2bin(c(4,2),c(4,3))
A5=dec2bin(c(5,2),c(5,3))
A6=dec2bin(c(6,2),c(6,3))
A7=dec2bin(c(7,2),c(7,3))
A8=dec2bin(c(8,2),c(8,3))
for m=1:M
if (p11(m)~=0)
H(m)=-p11(m)*log2(p11(m));
end
end
disp('信源的熵')
H1=sum(H) %信源的熵
NN=0;
for i=1:M
NN=NN+p11(1,i)*c(i,3); %平均碼長
end
disp('平均碼長')
NN
disp('編碼效率')
yita=H1/(NN*log2(2)) %效率
disp('冗余度')
Rd=1-yita %冗余度
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -