简单短序列的算术编码的MATLAB实现.doc

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
简单短序列的算术编码的MATLAB实现

简单短序列的算术编码的MATLAB实现 正确实现的算术编码算法压缩能力Shannond定理描述的理论极限,是目前已知的压缩能力最强的无损压缩算法。 ???不过,由于算术编码算法的实现比较复杂,使用它作为默认压缩算法的应用程序还相当少。在Unix平台上非常流行的bzip2(这个工具有命令行模式的Windows版本)使用的就是经过修改的算术编码算法。 ???目前为止还没有使用算术编码作为默认压缩算法的Windows应用程序,WinRAR和WinIMP能够支持bzip2的解压。除此之外,在最新的JPEG标准中也用到了经过修改的算术编码压缩算法,但JPEG所用的那种算法受专利保护,因此使用时必须获得授权。 ????在之后的文章会很好的研究这个算法的实现: 现在给出一个简单的实例: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 算术编码过程实例ssbm.m %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% about={... 本实例说明: 字符串不能太长,程序不加判断,请注意溢出; 本实例只限定少数字符串 a b c d e; 实例只是说明一下算术编码过程。}; disp(about); str=input(请输入编码的字符串(本程序仅仅是一个实例,请仅输入a b c d e):); l=0;r=1;d=1; %初始间隔 %程序限定字符为:a、b、c、d、e p=[0.2 0.3 0.1 0.15 0.25]; %字符的概率分布,sum(p)=1 n=length(str); disp(a b c d e) disp(num2str(p)) for i=1:n ??switch str(i) ????case a ??????m=1; ????case b ??????m=2; ????case c ??????m=3; ????case d ??????m=4; ????case e ??????m=5; ????otherwise ??????error(请不要输入其它字符!); ????end ????%判断字符 ????pl=0;pr=0; ?????for j=1:m-1 ????????pl=pl+p(j); ?????end ?????for j=1:m ????????pr=pr+p(j); ?????end ?????%概率统计 ??????l=l+d*pl; ??????r=l+d*(pr-pl); ??????strl=strcat(输入第,int2str(i),符号的间隔左右边界:); ??????disp(strl); ??????format long ??????disp(l);disp(r); ??????d=r-l; end 运行过程如下: 本实例说明: 字符串不能太长,程序不加判断,请注意溢出; 本实例只限定少数字符串 a b c d e; 实例只是说明一下算术编码过程。 请输入编码的字符串(本程序仅仅是一个实例,请仅输入a b c d e):aaabded a b c d e 0.2 0.3 0.1 0.15 0.25 输入第1符号的间隔左右边界: 0 0.200000000000000 输入第2符号的间隔左右边界: 0 0.040000000000000 输入第3符号的间隔左右边界: 0 0.008000000000000 输入第4符号的间隔左右边界: 0.001600000000000 0.004000000000000 输入第5符号的间隔左右边界: 0.003040000000000 0.003400000000000 输入第6符号的间隔左右边界: 0.003310000000000 0.003400000000000 输入第7符号的间隔左右边界: 0.003364000000000 0.003377500000000 ? %I=imread(001.bmp) %imshow(I); clear I=[3 3 1 1 3 3 1 2;2 3 3 1 3 2 3 2;1 2 3 3 3 3 1 2]; %I=[1 1 1 1 0 0 1 0 1 1 1 0]; [m,n]=size(I); % 第一列为灰度值,第二列为个数,第三列为概率百分数,应该也可以用imhist table = tabulate(I(); ?% 注意的是,tabulate要求I的元素必须为非负整数 % 否则,以采用如下方法求解 % 如[1 2 3;1 2 2],则统计出结果1是2个,2是3个,3是1个 % sortM=sort(M(); ??????????????????????????????

文档评论(0)

zilaiye + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档