一种快速有效的自适应算术编码
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
[!]
/4+ 算法建立模型的过程是这样的: (#) 由 于 英 文 字 符 一 共 有 .-9 个 , 建立两个 其 中 第 .-: .-: 个 元 素 的 数 组 123456’7 ;< 和 56’7 ;<, 个元素是结束标志。 123456’7 ;<是将输入符号按照出 现概率的大小进行顺序排列, 56’7 ;< 用于积累输入符
5!6
码, 初始化阶段可以预先设置一个大概率 #! 和一个 小概率 ’! , 然后对被编码比特流符号 (; 或 ! ) 进行 判断, 以 78$ (7(<= 8>(?&?+@ $A0?(+ ) 表示大概率的 符号, 以 B8$ (B@&<= 8>(?&?+@ $A0?(+ ) 表示小概率的 符号。每个符号对应一个概率, 即 78$ 对应 #! , B8$ 对应 ’! 。 当 ; 对应 78$ (#! ) 时, (’! ) ; 反之 ! 对应 B8$ (#! ) 时, (’! ) 。随着被编码 当 ! 对应 78$ ; 对应 B8$ 符号串中 ;, 上述对应关系可自适应 ! 的出现概率, 改变。 设 定 ()* , +,-+ 分 别 对 应 符 号 到 来 之 前 的 区 间 下界和上界。初始化时 (! ) ()*.;, +,-+)! 随着符号 (;, 的输入, !) ()*, +,-+ 按以下规律修 正: 小概率符号 B8$ 到来时 (+,-+0()* ) ()*.()* , +,-+.()*/ 1’! 大概率符号 78$ 到来时 (" )
’=>>51
;*<
, 对于数据比 ?23@0AB ;-< 通过试验表明 ,
提出了一种建立模型的方法 (/4+ 算法) 来改进算 术 编 码 的 性 能 。 由 于 在 英 文 中 最 多 只 有 .-9 个 字
较集中的数据集,这种算法有着非常出色的性能, 但是如果该数据集中的数据有着均匀一致的概率
电视技术
整个编码器的框图见示意图 7 。
%#A0/22BC-D"2 A0/L0B"#&-D" %#FE0BAGCH-2 M"A "#&-D"BAGCH-2 EFD/0"BC-D"2 D-#"B"#&-D"
数 字 电 视 与 数 字 视 频 ! "#$#%&’ %( &)" "#$#%&’ (#"*+
文章编号: (";;") !;;"*CDE" !;*;;!;*;:
一种快速有效的自适应算术编码
王 琪,郭 雷 (西北工业大学 自动控制系,陕西 西安 F!;;F")
【摘
・ 论文 ・
要 】 介绍了算术编码的原理和基于模型的自适应算术编码算法, 并利用二进制索引树这样一个高效率
【()* +,%-#】 &>I=%0@=IJ J(KI’,; +(<<+@<< J(0H>@<<I(’; ?I’&>A I’K@P@K =>@@ ; &K&H=IM@
!
引言
无损压缩的一个基本思路就是分解一个数据
["] 中 一代的运动图像及其伴音的压缩标准 7894*:
也充分运用了算术编码来对形状信息进行编码。本 文从算术编码的基本原理入手, 介绍了一种基于模 型的自适应算术编码算法,并对其缺点进行了讨 论, 结合一种比较有效的数据结构— — —二进制索引 树, 提出了一种改进的自适应算术编码算法。试验 表明此算法有着很好的效果, 可以直接应用到很多 领域。
号的出现频率。初始化时由于每个符号的出现概率 是一样的, 56’7 ;< 均 为 #, 123456’7 ;< 按 照 从 .-9 到 " 的顺序排列。 (. ) 更 新 模 型 的 时 候 首 先 要 判 断 是 否 积 累 的 频率超出了预定的范围, 如果超出了的话, 就需要 将每个符号的出现频率减少一半; 如果没有超出就 进行下一步。接下来是重新排序, 保证当前输入符 号按照出现频率有着正确的顺序, 最后就可以增加 输入符号的出现概率了, 此时不但需要增加对应的 而 且 需 要 增 加 对 应 的 123456’7 ;< 之 前 的 所 有 56’7 ;<, 值。因为 123456’7 ;< 是最终利用来计算输入符号的 概率的。 可以看出, 更新每个符号的时候, 几乎需要对 这个符号之前的每个符号所对应的频率均要一一 进行修正, 其计算量是非常大的。
集 (例如 , 一个文本文件或一幅图像) 到一些事件, 然后用尽可能少的比特来编码这些事件。统计编码 技术就是利用事件的概率估计来分配码字, 给出现 概率大的事件分配较短的码字, 出现概率小的事件 分配较长的码字。 给定一个相互不同的事件集合 ! !,
! ", ! #… ! " 和这些事件的概率分布 #, $%&’’(’ 证明了 编码一个事件所需的最小比特数是 # 的熵
!""! 年 第 #" 期 总 第 !$$ 期
!!
万方数据
数 字 电 视 与 数 字 视 频 ! "#$#%&’ %( &)" "#$#%&’ (#"*+
分布时, 编码器的性能就急剧下降了。 为此, !"#$%&’ 介绍了一种新的数据结构 ( 二进制索引树 ()*+) , 来 存储这些符号的积累频率。 ,-../0 , 1"/2 和 3%00"# 456 中就利用这个 )*+ 结构进行了算术编码,但它们的 算法过于复杂。笔者的改进算法是在参考文献476的 算法基础上利用二进制索引树对输入的字符进行 算术编码, 算法的整个流程不但简单, 而非常适用。
9@ 9= 98 97 99 ; 9> K < 5 8 @ 7 = 9 >
图=
)*+ 更新示意图
8
改进的基于二进制索引树的自适 应算术编码
二进制索引树的数据结构, 如图 9 所示。 根据二进制索引树可以 建立这样的一个前后关系, 称 节点 ! 是节点 " 的前节点, 它 (" ) , 节点 ( 是 们满足: !#$%&’ 节点 ) 的后节点是指它们满 足 (#"!(* ()) ,其中 $%&’ () , () 如下 "!(* 图 9 )*+ 树 (+ ) (-+) $%&’ #+,+: (+) (+-9) "!(* #+: 例如 8 是 7 的前节点, 也就是 ; 是 < 的前节点,
!
基于模型的自适应算术编码
从以上的算法原理可以看出, 这种方法主要存
在两个缺点: (# ) 在 整 个 算 术 编 码 的 过 程 中 会 产 生 一 个 位 数逐步增加的实数, 该实数对应的概率区间对应着 编码信息。这个实数的值稍有变化, 其对应的概率 区间就会改变, 导致解不出原来的信息, 后面译出 的码字全部错误。但是由于计算机的精度有限, 所 以在实际的计算时是不可能无限地划分下去的, 也 就是说到了一定的时候, 计算机已经无法识别两个 区间的范围了。这样就给算术编码的最终结果带来 误差。 (. ) 只 有 当 信 源 完 整 地 把 一 段 符 号 序 列 发 送 完之后,编码器才能确定一段子区间与之对应, 编 出相应的码字。这不但要占用相当大的存储空间, 还增加了编码延时,这对实时系统是十分不利的, 而且也非常不利于解码方的接受。因为编码时是根 据所有的这些符号计算出每个符号对应的概率, 然 后利用这些概率信息进行编码的。所以必须有一种 可以增加输出的算法来更好的完成这个要求。 为了解决这两个问题, /01123, 4256 和 +62578
无论对于高度集中的数据集还是对于分布较为 的数据结构对传统的 ; 阶自适应算术编码进行了改进。实验表明, 均匀的数据集, 在运行时间上新算法都有极大的改进。 【关 键 词 】算术编码;无损压缩;二进制索引树;自适应 【 !"#$%&’$ 】 G%@ H>I’JIH+@ (/ &>I=%0@=IJ J(KI’, I< I’=>(K.J@K &= /I><=L G%@ 0(K@+ *?&<@K &K&H=IM@ &>I=%0@=IJ
"
"
算术编码的工作原理
假 设 事 件 集 是{ , 即只对 " 值符号进行编 ;, !}
(#) $ )!*& " !% # +(," & " !% $
% )!
其中 & % 是事件 ! % 发生的概率,这样编码一 !% $ 个概率为 & 的事件最短需要*+(," & 位。如果一个符 号的出现概率已知,则 -.//0&’ 编码技术能用最小 的比特数来对其进行编码。但是 -.//0&’ 码字必定 是整数比特数长, 这样使得它的编码效率还不能完 全接近事件的熵。 在近些年有一种已经被成功地证明了的相当 好的方法来代替 -.//0&’ 编码,这种方法就是算术 编码。算术编码避开用一个特定码字代替一个输入 符号的思想, 用一个单独的浮点数来代替一串输入 符号, 这样就可以获得更加有效地压缩。 算术编码是目前很有发展前途的一种无损压 缩的方法之一,国内外许多学者都对其进行了研 究。在二值图像的压缩标准 1234 标准 中, 差分层
J(KI’, I< I’=>(K.J@K =((L N’ @//@J=IM@ K&=& <=>.J=.>@ O%IJ% I< ?I’&>A I’K@P@K =>@@ %&< ?@@’ .<@K /(> I0H>(MI’, Q@R >(*(>K@> &K&H=IM@ &>I=%0@=IJ J(KI’,L 3=S< <%(O@K =%&= =%@ ’@O 0@=%(K J&’ K@J>@&<@ =%@ >.’’I’, =I0@ K>&<=IJ&++A /(> ?(=% J@’=>&+IQ@K K&=& <@= &’K .’I/(>0 K&=& <@=L
和底层编码器的核心就是自适应算术编码, 另外新
收 稿 日 期 : ";;"*;:*!D 责任编辑:哈宏疆
!"
源自文库万方数据
电视技术
!""! 年 第 #" 期 总 第 !$$ 期
数 字 电 视 与 数 字 视 频 ! "#$#%&’ %( &)" "#$#%&’ (#"*+
(()*(,!"# ) (! ) !"#$!"#%&’ , ()*($!"#+ %-’ 算术编码的最终结果落在子区间 [!"#.()*( ] 内, 在该区间的任何一个数都可以作为编码结果。输入 符号串中大概率的符号出现概率愈大, 对应的子区 间愈宽, 最终的码字越短; 相反, 输入符号串中小概 率符号出现的概率增大,则对应的子区间变窄, 需 要较长的码字表示。 解码是编码的逆过程。首先将区间 [" , 分割 #] 成两个子区间, &’ (与 $%& 对应)靠近 " 侧, -’ (与 靠近 # 侧。判断被解码的码字值落在哪 ’%& 对应) 个区间, 赋以对应符号。 设 / 是被解码的值, 按照式 (# ) 初始化, 接下来 当 / 落在 [", (()*(,!"# ) 之间, 解码符号 0)"; (&’ ] (()*(,!"# ) (* ) /$/, ()*($!"#+ (&’ 当 + 落在 [ (()*(,!"# ) (()*(,!"# ) ] 之间, 解码符 (&’ , 号 0)# ; (()*(,!"# ) +)/, (&’ , (()*(,!"# ) (- ) ()*($!"#+ (-’ 上述步骤多次重复, 便可得到解码字符串。 符, 也就是符号所对应的数组最多只需要 .-: 个元 素。在初始化这个数组后, /4+ 算法利用输入符号 动态更新这个数组, 假设数组的积累频率就是它的 出现频率, 完成编码的操作。虽然这些积累频率是 一个局部的频率, 但是如果解码方以同样的操作进 行, 则这个过程是完全可逆的。通过这个模型的建 立就可以解决上面的第一个问题。另外由于 /4+ 算法是采用模型的方法, 不需要考虑符号的全局概 率, 而只需要根据该符号现在的积累情况, 就可以 利用与第二节算法近似的方法, 采用增加传输和接 收的方法, 完成当前符号的编码, 并且将其传输出 去,而解码方就可以根据完全类似的过程进行解 码, 得出这个符号来。这样就可以解决上面的第二 个问题。由于解码算法是编码算法的逆过程, 有着 近似相同的动作,所以在文章后面只介绍编码算 法, 而不深入讨论解码算法。 虽然 /4+ 算法可以很好地解决第二节算法的 问题, 但是它又不可避免的带来了新的问题, 就是 关于模型更新以及查找该符号时所带来的庞大计 算量的问题。
/4+ 算法建立模型的过程是这样的: (#) 由 于 英 文 字 符 一 共 有 .-9 个 , 建立两个 其 中 第 .-: .-: 个 元 素 的 数 组 123456’7 ;< 和 56’7 ;<, 个元素是结束标志。 123456’7 ;<是将输入符号按照出 现概率的大小进行顺序排列, 56’7 ;< 用于积累输入符
5!6
码, 初始化阶段可以预先设置一个大概率 #! 和一个 小概率 ’! , 然后对被编码比特流符号 (; 或 ! ) 进行 判断, 以 78$ (7(<= 8>(?&?+@ $A0?(+ ) 表示大概率的 符号, 以 B8$ (B@&<= 8>(?&?+@ $A0?(+ ) 表示小概率的 符号。每个符号对应一个概率, 即 78$ 对应 #! , B8$ 对应 ’! 。 当 ; 对应 78$ (#! ) 时, (’! ) ; 反之 ! 对应 B8$ (#! ) 时, (’! ) 。随着被编码 当 ! 对应 78$ ; 对应 B8$ 符号串中 ;, 上述对应关系可自适应 ! 的出现概率, 改变。 设 定 ()* , +,-+ 分 别 对 应 符 号 到 来 之 前 的 区 间 下界和上界。初始化时 (! ) ()*.;, +,-+)! 随着符号 (;, 的输入, !) ()*, +,-+ 按以下规律修 正: 小概率符号 B8$ 到来时 (+,-+0()* ) ()*.()* , +,-+.()*/ 1’! 大概率符号 78$ 到来时 (" )
’=>>51
;*<
, 对于数据比 ?23@0AB ;-< 通过试验表明 ,
提出了一种建立模型的方法 (/4+ 算法) 来改进算 术 编 码 的 性 能 。 由 于 在 英 文 中 最 多 只 有 .-9 个 字
较集中的数据集,这种算法有着非常出色的性能, 但是如果该数据集中的数据有着均匀一致的概率
电视技术
整个编码器的框图见示意图 7 。
%#A0/22BC-D"2 A0/L0B"#&-D" %#FE0BAGCH-2 M"A "#&-D"BAGCH-2 EFD/0"BC-D"2 D-#"B"#&-D"
数 字 电 视 与 数 字 视 频 ! "#$#%&’ %( &)" "#$#%&’ (#"*+
文章编号: (";;") !;;"*CDE" !;*;;!;*;:
一种快速有效的自适应算术编码
王 琪,郭 雷 (西北工业大学 自动控制系,陕西 西安 F!;;F")
【摘
・ 论文 ・
要 】 介绍了算术编码的原理和基于模型的自适应算术编码算法, 并利用二进制索引树这样一个高效率
【()* +,%-#】 &>I=%0@=IJ J(KI’,; +(<<+@<< J(0H>@<<I(’; ?I’&>A I’K@P@K =>@@ ; &K&H=IM@
!
引言
无损压缩的一个基本思路就是分解一个数据
["] 中 一代的运动图像及其伴音的压缩标准 7894*:
也充分运用了算术编码来对形状信息进行编码。本 文从算术编码的基本原理入手, 介绍了一种基于模 型的自适应算术编码算法,并对其缺点进行了讨 论, 结合一种比较有效的数据结构— — —二进制索引 树, 提出了一种改进的自适应算术编码算法。试验 表明此算法有着很好的效果, 可以直接应用到很多 领域。
号的出现频率。初始化时由于每个符号的出现概率 是一样的, 56’7 ;< 均 为 #, 123456’7 ;< 按 照 从 .-9 到 " 的顺序排列。 (. ) 更 新 模 型 的 时 候 首 先 要 判 断 是 否 积 累 的 频率超出了预定的范围, 如果超出了的话, 就需要 将每个符号的出现频率减少一半; 如果没有超出就 进行下一步。接下来是重新排序, 保证当前输入符 号按照出现频率有着正确的顺序, 最后就可以增加 输入符号的出现概率了, 此时不但需要增加对应的 而 且 需 要 增 加 对 应 的 123456’7 ;< 之 前 的 所 有 56’7 ;<, 值。因为 123456’7 ;< 是最终利用来计算输入符号的 概率的。 可以看出, 更新每个符号的时候, 几乎需要对 这个符号之前的每个符号所对应的频率均要一一 进行修正, 其计算量是非常大的。
集 (例如 , 一个文本文件或一幅图像) 到一些事件, 然后用尽可能少的比特来编码这些事件。统计编码 技术就是利用事件的概率估计来分配码字, 给出现 概率大的事件分配较短的码字, 出现概率小的事件 分配较长的码字。 给定一个相互不同的事件集合 ! !,
! ", ! #… ! " 和这些事件的概率分布 #, $%&’’(’ 证明了 编码一个事件所需的最小比特数是 # 的熵
!""! 年 第 #" 期 总 第 !$$ 期
!!
万方数据
数 字 电 视 与 数 字 视 频 ! "#$#%&’ %( &)" "#$#%&’ (#"*+
分布时, 编码器的性能就急剧下降了。 为此, !"#$%&’ 介绍了一种新的数据结构 ( 二进制索引树 ()*+) , 来 存储这些符号的积累频率。 ,-../0 , 1"/2 和 3%00"# 456 中就利用这个 )*+ 结构进行了算术编码,但它们的 算法过于复杂。笔者的改进算法是在参考文献476的 算法基础上利用二进制索引树对输入的字符进行 算术编码, 算法的整个流程不但简单, 而非常适用。
9@ 9= 98 97 99 ; 9> K < 5 8 @ 7 = 9 >
图=
)*+ 更新示意图
8
改进的基于二进制索引树的自适 应算术编码
二进制索引树的数据结构, 如图 9 所示。 根据二进制索引树可以 建立这样的一个前后关系, 称 节点 ! 是节点 " 的前节点, 它 (" ) , 节点 ( 是 们满足: !#$%&’ 节点 ) 的后节点是指它们满 足 (#"!(* ()) ,其中 $%&’ () , () 如下 "!(* 图 9 )*+ 树 (+ ) (-+) $%&’ #+,+: (+) (+-9) "!(* #+: 例如 8 是 7 的前节点, 也就是 ; 是 < 的前节点,
!
基于模型的自适应算术编码
从以上的算法原理可以看出, 这种方法主要存
在两个缺点: (# ) 在 整 个 算 术 编 码 的 过 程 中 会 产 生 一 个 位 数逐步增加的实数, 该实数对应的概率区间对应着 编码信息。这个实数的值稍有变化, 其对应的概率 区间就会改变, 导致解不出原来的信息, 后面译出 的码字全部错误。但是由于计算机的精度有限, 所 以在实际的计算时是不可能无限地划分下去的, 也 就是说到了一定的时候, 计算机已经无法识别两个 区间的范围了。这样就给算术编码的最终结果带来 误差。 (. ) 只 有 当 信 源 完 整 地 把 一 段 符 号 序 列 发 送 完之后,编码器才能确定一段子区间与之对应, 编 出相应的码字。这不但要占用相当大的存储空间, 还增加了编码延时,这对实时系统是十分不利的, 而且也非常不利于解码方的接受。因为编码时是根 据所有的这些符号计算出每个符号对应的概率, 然 后利用这些概率信息进行编码的。所以必须有一种 可以增加输出的算法来更好的完成这个要求。 为了解决这两个问题, /01123, 4256 和 +62578
无论对于高度集中的数据集还是对于分布较为 的数据结构对传统的 ; 阶自适应算术编码进行了改进。实验表明, 均匀的数据集, 在运行时间上新算法都有极大的改进。 【关 键 词 】算术编码;无损压缩;二进制索引树;自适应 【 !"#$%&’$ 】 G%@ H>I’JIH+@ (/ &>I=%0@=IJ J(KI’, I< I’=>(K.J@K &= /I><=L G%@ 0(K@+ *?&<@K &K&H=IM@ &>I=%0@=IJ
"
"
算术编码的工作原理
假 设 事 件 集 是{ , 即只对 " 值符号进行编 ;, !}
(#) $ )!*& " !% # +(," & " !% $
% )!
其中 & % 是事件 ! % 发生的概率,这样编码一 !% $ 个概率为 & 的事件最短需要*+(," & 位。如果一个符 号的出现概率已知,则 -.//0&’ 编码技术能用最小 的比特数来对其进行编码。但是 -.//0&’ 码字必定 是整数比特数长, 这样使得它的编码效率还不能完 全接近事件的熵。 在近些年有一种已经被成功地证明了的相当 好的方法来代替 -.//0&’ 编码,这种方法就是算术 编码。算术编码避开用一个特定码字代替一个输入 符号的思想, 用一个单独的浮点数来代替一串输入 符号, 这样就可以获得更加有效地压缩。 算术编码是目前很有发展前途的一种无损压 缩的方法之一,国内外许多学者都对其进行了研 究。在二值图像的压缩标准 1234 标准 中, 差分层
J(KI’, I< I’=>(K.J@K =((L N’ @//@J=IM@ K&=& <=>.J=.>@ O%IJ% I< ?I’&>A I’K@P@K =>@@ %&< ?@@’ .<@K /(> I0H>(MI’, Q@R >(*(>K@> &K&H=IM@ &>I=%0@=IJ J(KI’,L 3=S< <%(O@K =%&= =%@ ’@O 0@=%(K J&’ K@J>@&<@ =%@ >.’’I’, =I0@ K>&<=IJ&++A /(> ?(=% J@’=>&+IQ@K K&=& <@= &’K .’I/(>0 K&=& <@=L
和底层编码器的核心就是自适应算术编码, 另外新
收 稿 日 期 : ";;"*;:*!D 责任编辑:哈宏疆
!"
源自文库万方数据
电视技术
!""! 年 第 #" 期 总 第 !$$ 期
数 字 电 视 与 数 字 视 频 ! "#$#%&’ %( &)" "#$#%&’ (#"*+
(()*(,!"# ) (! ) !"#$!"#%&’ , ()*($!"#+ %-’ 算术编码的最终结果落在子区间 [!"#.()*( ] 内, 在该区间的任何一个数都可以作为编码结果。输入 符号串中大概率的符号出现概率愈大, 对应的子区 间愈宽, 最终的码字越短; 相反, 输入符号串中小概 率符号出现的概率增大,则对应的子区间变窄, 需 要较长的码字表示。 解码是编码的逆过程。首先将区间 [" , 分割 #] 成两个子区间, &’ (与 $%& 对应)靠近 " 侧, -’ (与 靠近 # 侧。判断被解码的码字值落在哪 ’%& 对应) 个区间, 赋以对应符号。 设 / 是被解码的值, 按照式 (# ) 初始化, 接下来 当 / 落在 [", (()*(,!"# ) 之间, 解码符号 0)"; (&’ ] (()*(,!"# ) (* ) /$/, ()*($!"#+ (&’ 当 + 落在 [ (()*(,!"# ) (()*(,!"# ) ] 之间, 解码符 (&’ , 号 0)# ; (()*(,!"# ) +)/, (&’ , (()*(,!"# ) (- ) ()*($!"#+ (-’ 上述步骤多次重复, 便可得到解码字符串。 符, 也就是符号所对应的数组最多只需要 .-: 个元 素。在初始化这个数组后, /4+ 算法利用输入符号 动态更新这个数组, 假设数组的积累频率就是它的 出现频率, 完成编码的操作。虽然这些积累频率是 一个局部的频率, 但是如果解码方以同样的操作进 行, 则这个过程是完全可逆的。通过这个模型的建 立就可以解决上面的第一个问题。另外由于 /4+ 算法是采用模型的方法, 不需要考虑符号的全局概 率, 而只需要根据该符号现在的积累情况, 就可以 利用与第二节算法近似的方法, 采用增加传输和接 收的方法, 完成当前符号的编码, 并且将其传输出 去,而解码方就可以根据完全类似的过程进行解 码, 得出这个符号来。这样就可以解决上面的第二 个问题。由于解码算法是编码算法的逆过程, 有着 近似相同的动作,所以在文章后面只介绍编码算 法, 而不深入讨论解码算法。 虽然 /4+ 算法可以很好地解决第二节算法的 问题, 但是它又不可避免的带来了新的问题, 就是 关于模型更新以及查找该符号时所带来的庞大计 算量的问题。