- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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、ep=[0.2 0.3 0.1 0.15 0.25];%字符的概率分布,sum(p)=1n=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):aaabdeda b c d e0.2 0.3 0.1 0.15 0.25输入第1符号的间隔左右边界:00.200000000000000输入第2符号的间隔左右边界:00.040000000000000输入第3符号的间隔左右边界:00.008000000000000输入第4符号的间隔左右边界:0.0016000000000000.004000000000000输入第5符号的间隔左右边界:0.0030400000000000.003400000000000输入第6符号的间隔左右边界:0.0033100000000000.003400000000000输入第7符号的间隔左右边界:0.0033640000000000.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)