- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
成绩 评阅人
中国矿业大学2015-2016学年第一学期
《数字视频技术》课程小设计考核
设计题目:图像的算术编码研究
专业班级:
学生姓名:
学生学号:
指导教师:
成 绩:
本人郑重声明:本人认真、独立完成了查找资料、完成作业、编写程序等考核任务,无抄袭行为。
签字:
日期:
一、设计任务、目的和要求:
1.1设计任务:
图像的算术编码
1.2设计目的:
1.了解图像压缩的意义方法,对比不同的压缩方法;
2.熟悉算术编码的基本原理和特点;
3.掌握改进的算术编码的方法与具体实例应用;
4.掌握利用MATLAB编程实现数字图像的算术编码。
1.3设计要求:
要求实现灰度图像的算术编码和解码恢复图像;处理结果要求最终图像显示,且计算图像的信息熵,平均码字长度,编码效率,压缩比。
二、总体方案设计
2.1 算术编码简介
算术编码,是图像压缩的主要算法之一。 是一种无损数据压缩方法,也是一种熵编码的方法。和其它熵编码方法不同的地方在于,其他的熵编码方法通常是把输入的消息分割为符号,然后对每个符号进行编码,而算术编码是直接把整个输入的消息编码为一个数,一个满足(0.0 ≤ n 1.0)的小数n。
算术编码是一种到目前为止编码效率最高的统计熵编码方法,它比著名的Huffman编码效率提高10%左右,但由于其编码复杂性和实现技术的限 制以及一些专利权的限制,所以并不象Huffman编码那样应用广泛。算术编码有两点优于Huffman码: ①它的符号表示更紧凑; ②它的编码和符号的统计模型是分离的,可以和任何一种概率模型协同工作。后者非常重要, 因为只要提高模型的性能就可以提高编码效率。
2.2 软件运行环境
系统运行环境:windows 操作系统。
软件编程平台:Matlab 2014a。
2.3 编解码算法原理
2.3.1编码
算术编码将整个要编码的数据映射到一个位于[0,1)的实数区间中。并且输出一个小于1同时大于0的小数来表示全部数据。利用这种方法算术编码可以让压缩率无限的接近数据的熵值,从而获得理论上的最高压缩率。
算术编码进行编码时,从实数区间[0,1)开始。按照符号的频度将当前的区间分割成多个子区间。根据当前输入的符号选择对应的子区间,然后从选择的子区间中继续进行下一轮的分割。不断的进行这个过程,直到所有符号编码完毕。对于最后选择的一个子区间,输出属于该区间的一个小数。这个小数就是所有数据的编码。
子区间计算的迭代递推公式:
StartN=StartB+LeftC * L
EndN=StartB+RightC * L
其中StartN表示新子区间的起始位置,EndN表示新子区间的结束位置,StartB表示前子区间的起始位置,LeftC表示当前符号的区间左端,RightC表示当前符号的区间右端,L表示前子区间宽度。
2.3.2 解码
算术编码进行解码时仅输入一个小数。解码前首先需要对区间[0,1)按照初始时的符号频度进行分割。然后观察输入的小数位于那个子区间。输出对应的符号,选择对应的子区间,然后从选择的子区间中继续进行下一轮的分割。不断的进行这个过程,直到所有的符号都解码出来。整个过程相当于编码时的逆运算。
2.3.3 算术编码的改进
以上描述的算法,在当前的计算机系统上是很难实现的。尤其是无限精度的实数运算。所以在实现的时候,需要对算法做一些改进。使得它可以在当前的计算机系统上较快的运行。当然,这种改进是以降低运算精度为代价的。也就是说,这种改进实际上会降低算法的压缩率。但是,它会使算法的实现成为可能。
观察前面描述的算法过程可以发现,运算时区间的上下沿都是小于1的小数。那么我们可以省略0和小数点,仅仅使用小数的尾数来表示小数。省略0和小数点后的尾数,实际上就是一个无限大的整数。使用无限整数的部分高位来表示整数,并在这些整数上进行整数运算就可以模拟出实数运算。
另外,分割区间、选择子区间的过程,相当于将一个区间映射到另一个更小的区间中(以下简称“映射区间”)。如果我们知道一个符号的频度。以及符号值小于该符号的其它符号的频度总计(以下简称“累积频度(Cumulative Frequency)”)。还有到目前为止所有符号频度的总计(以下简称“总计频度(Total Frequency)”)。那么就可以根据这些频度信息,从当前区间中计算出映射区间。计算的公式如下:
Range = High - Low + 1
High = Low + Range * (CumFreq + Freq) /Total – 1
Low = Low + Range * Cum
文档评论(0)