一、实验目的
(1)了解图像编码的目的及意义,加深对图像编码的感性认识。
(2)熟练掌握哈夫曼编码的实现与应用。
(3)掌握行程长度编码的实现与应用,尤其是BMP和PCX文件的行程长度编码*。
二、实验内容
(1)选择图像,对其进行哈夫曼编码,总结哈夫曼编码的压缩思想。
(2)选择图像,对其进行行程编码,观察将图像保存为PCX文件后,图像占用空间的变化,并总结PCX的编码特点*三、实验代码及结果、分析
三、实验原理、代码、结果、分析
(1)哈夫曼编码
- 原理:η
哈夫曼编码是一种无损编码,依据信源符号出现的概率来构造其码字,对出现概率大的字符使用较短的码字,对出现概率低的字符则使用较长的码字,从而达到压缩数据的目的,哈夫曼编码又称为最佳编码。
编码的基本步骤:
- 统计信源字符中各符号出现的概率,将各字符出现的概率由大到小的顺序排列;
- 将最小的两个概率相加,合并成新的概率,与其他概率重新按由大到小的顺序排列;
- 重新排列后将两个最小概率合并相加合并为新的概率,即重复步骤b),直到最后两个概率之和为1;
- 将每个相加的组合中,概率大的指定为0,概率小的指定为1,相等则任意指定
- 找出由每一个信源字符到达概率为1.0处的路径,顺序记录路径的每一个1和0的数字编码
- 反向写出编码,即为该信源字符的哈夫曼编码
- 代码:
HuffmanCode.m:
I=imread('lena.jpg');
Gray=rgb2gray(I);
[zipped,info]=huffencode(Gray);%调用哈夫曼编码程序进行压缩
unzipped=huffdecode(zipped,info);%调用哈夫曼解码程序进行解码
disp('平均码长');L=info.avalen
disp('压缩比');CR=info.ratio
disp('信息熵');H=info.h
disp('编码效率');CE=info.ce
subplot(131);imshow(Source);title('原始图