- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数字图像处理实验六压缩编码
实验六 统计压缩编码
实验目的:
1,掌握不等长编码的基本原理及方法
2,掌握衡量压缩效果的技术指标
3,掌握Huffman编码的方法
二,实验条件
1,MATLAB
2,典型的灰度、彩色图像文件
三,原理
1.去除数据冗余度可以有效的压缩数据
2.图像编码的主要技术指标:压缩比、客观评价值SNR、主观评价值
四,实验内容:
1,通过MATLAB编程,对8*8图像子块实施Hiffman编码并计算平均码长
2,计算上述编码的效率,压缩比并对相应数据作出解释。
五,实验步骤
1,Huffman编码的方法与步骤如下所示:
(1)将概率按从小到大的顺序排列
(2)给两个概率最小的信源符号和各分配一个码位“0”和“1”,将这两个信源符号合并成一个新符号,并用这两个最小的概率之和最为新符号的概率,结果得到一个只包含(n-1)个信源符号的新信源,称为信源的第一次缩减信源,用S1表示。
(3)将缩减信源S1的符号仍按概率从大到小的顺序排列,重复步骤2,得到只含(n-2)个符号的缩减信源S2。
(4)重复上述步骤,直至缩减信源只剩两个符号为止,此时所剩的两个符号的概率之和为1。然后从最后一级缩减信源开始,依编码路径向前返回,就得到各信源符号所对应的码字。
2,假设这个8*8的字块是由0-5这六个像素组成,对这个字块进行概率统计,并按概率从小到大的顺序排列,如下所示:
P=(0.25 0.25 0.2 0.15 0.1 0.05)
则对于假设的字块进行Huffman编码的matlab程序如下所示:
n=input(N=);%
L=0; H=0;
for i=1:n
P(i)=input(P=);%输入像素概率分布
s=s+P(i);
end
if s~=1
error(不符合概率分布);
end
P=sort(P);
p=P;
mark=zeros(n-1,n); %mark为n-1行,n列矩阵,用来记录每行概率排列次序
for i=1:n-1
[P,num]=sort(P); %对输入元素排序并记录
mark(i,:)=[num(1:n-i+1),zeros(1,i-1)];
P=[P(1)+P(2),P(3:n),1];
end
for i=1:n-1
table(i,:)=blanks(n*n); %blanks 创建空格串
end
table(n-1,n)=1;
table(n-1,2*n)=0
for i=2:n-1
table(n-i,1:n-1)=table(n-i+1,n*(find(mark(n-i+1,:)==1))-(n-2):n*(find(mark(n-i+1,:)==1))); %按mark的记录依次赋值
table(n-i,n)=1;
table(n-i,n+1:2*n-1)=table(n-i,1:n-1);
table(n-i,2*n)=0;
for j=1:i-1
table(n-i,(j+1)*n+1:(j+2)*n)=table(n-i+1,n*(find(mark(n-i+1,:)==j+1)-1)+1:n*find(mark(n-i+1,:)==j+1));
%mark的记录依次赋值
end
end
%得到编码后的码字
for i=1:n
W(i,1:n)=table(1,n*(find(mark(1,:)==i)-1)+1:find(mark(1,:)==i)*n);
l(i)=length(find(abs(W(i,:))~=32));
%32表示空字符,要找不是空字符的个数,即为每个数编码的个数
L=L+p(i)*l(i); %计算平均码长
H=H-p(i)*log2(p(i));%计算信源熵
end
xiaolv=H/L; %计算编码效率
disp(输出每个概率的编码);
disp(W);
disp(输出平均码长L:);
disp(L);
disp(输出编码效率xiaolv:);
disp(xiaolv);
3,计算结果如下:
(1)输出每个灰度级的编码
0001
0000
001
11
10
01
(2)计算其平均码长和编码效率
平均码长 L= 2.4500
编码效率 xiaolv= 0.9891
图一 运行及结果
实验总结:
在实验中,假设了灰度级为6,即像素值为0-5。同时,只是简单的对一个8*8字块进行概率统计,然后进行Huffman编码,这相对于
文档评论(0)