这说明K-L变换使得图像的相关性消除,能量只集中在特征值上,且按从大到小排列。所以编码时只需要传送前n个特征值,图像得到了大大的压缩。
然而,K-L变换是针对输入图像“量身定做”的,所以其在实际应用中很难应用,只能说是一种理想状态。后来人们发现离散余弦变换可与K-L变换媲美,其变换压缩性能接近于K-L变换。
2.2.3 DCT变换
离散余弦变换(DCT变换)是傅里叶变换的一种特殊情况,只使用实数。DCT有8种标准类型,其中4种是常见的,一般图像处理都使用二文DCT变换。
设 离散图像序列,二文DCT变换公式为:
其逆变换公式IDCT为:
首先使P位表示的图像数据(一般用8位表示一个像素的颜色分量),从无符号整数( 范围内)变成有符号数( 范围内),作为DCT变换的输入量。经过DCT变换,将空域中表示的图像数据转换到频域中进行表示,并获得N个变换系数。
DCT变换对每一幅图像都可以用相同的系数,而且其压缩性能非常好,所以在很多标准(如H.264)中都使用了DCT变换。
2.3 熵编码
熵编码也叫统计编码,是利用信源的统计特性进行码率压缩的编码方法。熵编码通常用两种:算数编码和变长编码(也叫霍夫曼编码)。
2.3.1 变长编码
变长编码(即霍夫曼编码)的基本思想是:对出现概率较大的符号分配较短的码长,对出现概率较小的符号分配较长的码长,使得符号的平均码长最短。
其编码步骤如下:
(1) 将信息符号按其出现概率从小到大排列。
(2) 将最小概率的两个事件以0和1分别记号,再把它们合并成一个事件。
(3) 将新的事件重新排列,并重复步骤2,直至概率和为1。
(4) 从上到下记录路径上的0或1,得出各个符号的码字。
理论上,这种方法是最佳的,但是实际上,在硬件实现时,出现概率的值不可能在小数点后多少位,而最小比特单元为1bit,会引起概率不匹配以及编码效率的下降。
2.3.2 算术编码
由于霍夫曼编码的最小比特单元为1bit,在面对只有两种符号的信源输出的数据就不能达到压缩效果了。为了更加逼近无失真信源编码的极限,算术编码用一个浮点数值而不是定长的代码表示一个信源符号流。
算术编码将被编码的信源符号流表示成实数半开区间[0,1)中的一个数值间隔。使用算术编码的压缩算法通常先要对输入符号的概率进行估计,然后再编码。这个估计越准,编码结果就越接近最优的结果。
给定事件序列的算术编码步骤如下:
(1)编码器在开始时将“当前间隔” [ L, H) 设置为[0,1)。
(2)对每一事件,编码器按步骤(a)和(b)进行处理
(a)编码器对每一个事件都分配一个“当前间隔”中的子间隔。这个子间隔的大小与下一个将出现的事件的概率成比例。
(b)编码器选择子间隔与下一个确切发生的事件对应,并使它成为新的“当前间隔”。
(3)最后输出的“当前间隔”的下边界就是该给定事件序列的算术编码。
算术编码可以是静态的或者自适应的。静态算术编码中的信源符号概率是固定的。由于很难也不太可能事先知道信源概率,所以需要开发自适应算术编码。在自适应算术编码中,信源符号的概率根据编码时符号出现的频繁程度动态地进行修改。在编码期间估算信源符号概率的过程叫做建模。动态建模是确定编码器压缩效率的关键。
3 差错隐藏技术
在实际应用中,很多标准都采用了先对图像进行基于块的运动补偿预测,再对运动补偿残差进行DCT变换编码或熵编码的混合框架。这种框架的编码效率高,但由于信道的误码或者丢包,仍不可避免地会发生图像的失真。 H.264差错隐藏技术研究及改进+文献综述(7):http://www.751com.cn/jisuanji/lunwen_3067.html