图像与视频编解码技术revisedWord文件下载.docx
《图像与视频编解码技术revisedWord文件下载.docx》由会员分享,可在线阅读,更多相关《图像与视频编解码技术revisedWord文件下载.docx(41页珍藏版)》请在冰豆网上搜索。
![图像与视频编解码技术revisedWord文件下载.docx](https://file1.bdocx.com/fileroot1/2022-12/14/ccb6b241-0056-4ed5-8db4-9d2bfc10ea1b/ccb6b241-0056-4ed5-8db4-9d2bfc10ea1b1.gif)
7.H.26424
二、视频编码中的一些特殊技术30
1.运动估计技术30
2.差错纠正技术32
第四部分与手持设备相结合的视频编解码35
一、无线网络环境35
二、手持移动计算设备的特点36
三、视频国际标准之间的比较与相关思考36
参考文献38
摘要
视觉是人类获取信息的主要途径,图像与视频在人与计算机的交互过程中扮演着重要的角色。
随着编解码技术的不断发展,与图像和视频相关的电子产品正逐步进入普通人的生活并变得越来越不可或缺。
近年来,以手机为代表的手持移动计算设备正日益成为普通人工作生活中的一部分,越来越多的用户希望能够通过手机点播视频节目甚至是进行可视通话。
为满足这些需求必须去研究与手持设备相关的视频编解码问题。
本文是对视频编解码学习的一个总结,主要介绍了视频编解码和与其关系十分密切的图像编解码中的相关技术与国际标准,其中重点介绍了新的视频国际标准H.264中的技术方法与特性,并在最后对手持设备上视频编解码的特殊性以及视频编解码技术可能的发展方向做了一些思考和探讨。
关键词:
视频编解码,图像编解码,H.264,手持设备
第一部分概述
一、图像/视频编码的必要性与可行性
1.编码的必要性
21世纪的人们面临的是一个信息化的社会。
数字化后的信息,尤其是数字化后的图像和视频信息具有数据海量性,这给信息的存储和传输造成了较大的困难,成为阻碍人类有效的获取和使用这此信息的瓶颈问题之一。
因此,研究和开发新型有效的多媒体数据压缩编码方法,以压缩的形式存储和传输这些数据将是最好的选择。
原始彩色图像本身数据量相当巨大,以一幅普通的1024*768的图片为例,如果对RGB三个分量都进行了256级量化,占用一个字节,就是说使用24位bmp位图格式而完全不进行压缩的话,其数据文件大小为1024*768*24=18Mbit。
再以陆地卫星(Landsat—3)为例子,其水平、垂直分辨率分别为2340和3240,四波段采样精度7位,它的一幅图像的数据量为2340×
3240×
7×
4=212Mbit,按每天30幅计每天数据为212×
30=6.36Gbit,每年的数据量高达2300Gbit。
这么大的数据量无疑给存储器的存储容量、通信干线的信道传输率以及计算机的运算速度都增加了极大的压力。
单纯用扩大存储容量,增加通信干线的传输率是不现实的,数据压缩是行之有效的方法。
2.编码的可行性
有意义的、可被人理解的图像中存在着很多冗余信息,因此对图像/视频进行数据压缩是有可能的。
通过人们多年的研究与实践证明,这种冗余不仅存在而且占了原始数据中的绝大部分。
也就是说,通过精心设计压缩算法,人们可以用极少量的信息精确表示原始的海量信息。
图像/视频中的冗余信息主要包括统计冗余、结构冗余、知识冗余和视觉冗余等几类:
●统计冗余:
统计冗余包括信息熵冗余、空间冗余和视频中的时间冗余。
在把图像看成完全无意义的比特流后,按照信息论的有关原理,对该比特流只需按其信息熵的大小分配相应比特数即可完全精确的表示之。
●结构冗余:
在有些图像的部分区域内存在着非常强的纹理结构,或是图像的各个部分之间存在有某种关系,例如自相似性等,这些都是结构冗余的表现。
●知识冗余:
在有些图像在包含的信息与某些先验的基础知识有关,例如在一幅人头部特写的图像中,头、眼、鼻和嘴的相互位置关系属于一般常识,这种冗余称为知识冗余。
●视觉冗余:
人类的视觉系统对于图像的注意是非均匀和非线性的,并不是对于图像中的任何变化都能感知。
这种由于人眼特性产生的冗余称为视觉冗余。
上述各种形式的冗余,是压缩图像与视频数据的出发点。
图像与视频编码的目标就是要尽可能消除这些冗余信息,以减少表示图像与视频所需的数据量。
二、图像/视频编码的关系
图像编码与视频编码有着非常密切的关系。
图像编码是视频编码的基础,视频可以看成是一个连续的静止图像的序列,研究如何对静止图像进行有效的编码对视频编码的研究有着至关重要的作用。
二者在技术上有很大的交融,静止图像压缩中的方法和思想在视频压缩中也经常会用到。
当然,由于多出了一个时间维,视频压缩技术又有着不同于静止图像压缩的独特之处。
因此本文将先在第二部分中对静止图像编码技术进行总结,然后再以此为基础,在第三部分总结视频编码技术。
三、图像/视频编码的评估
如何评估一个图像/视频编码方案的优劣,是图像/视频编码中一个非常基本又相当重要的问题。
在图像编码中,比较重要的参考指标是压缩率和解码质量。
压缩率是原始数据与编码后的码流文件大小的比值,在保证相同解码质量的前提下,一个编码方案的压缩率越大就说明该编码方案越有效率。
解码质量通常分为客观质量与主观质量两种。
主观质量是人们对解码图像质量的主观感受,其测量过程需要进行心理学实验。
然而由于人对一幅图像的主观感受受到文化、情绪等多种因素的影响,其测量结果通常难以进行比较,另一方面心理学实验需要花费较多的人力物力,因此在实践中,主观质量通常是作为一种辅助性的参考指标出现。
客观质量是通过相关的计算公式计算得到的指标,具有易于计算、易于比较的特点,因此在实际的研究工作中被广泛的用作编码方案的评估指标。
但另一方面,客观质量的计算有更加关注整体而忽略细节的特点,因此虽然在大多数情况下可以与主观质量一致,但仍存在不少二者相悖的情况。
在[]中有对此改进的探讨,但由于计算公式变得相对复杂,目前少有人采用。
对图像的客观质量评估,最为常用到的是均方误差MSE与峰值信噪比PSNR,其计算公式如下:
均方误差MSE(MeanSquareError)
MSE=
,其中M,N分别为图像的水平与垂直方向的大小,fij和fij’分别表示原始图像和解码图像上第i行第j列像素的取值(灰度级)。
峰值信噪比PSNR(PeakSignalNoiseRatio)
,其中B为图像灰度级位数,2B-1即为图像的灰度级数量。
在视频编码的评估中,除用到以上图像编码评估的指标外,还比较关心视频编解码速度,一般用帧/秒计量。
在[1]中有对视频编码中画面清晰度和画面流畅度的客观计算的讨论,但实际研究中,很少有人采用。
如何快速有效的计算评估图像/视频解码质量,使客观标准尽可能与人们的主观标准相一致,本身就还是一个还没有完全解决好的问题。
由于这个问题并非本文所要讨论的内容,因此不在这里进一步论述。
第二部分静止图像编解码技术
这一部分将主要分为三方面来论述,首先总结在静止图像编码中通用技术,其后总结一下有别于传统基于DCT变换的比较经典的图像编码方法,主要是小波图像编码与分形图像编码,最后对静止图像编码的国际标准进行一些介绍。
一、静止图像编解码中的主要方法与技术
图像/视频编码方法可以大体分为熵编码、源编码与混合编码。
熵是具体数据的平均信息量,定义为在不丢失信息的前提下,描述该信息内容所需的最小比特数。
熵编码是纯粹基于信号统计特性的编码方法,是一种无损编码。
其基本原理是给出现概率较大的符号一个短码字,而给出现概率较小的符号一个长码字,这样使得最终的平均码长很小。
一个精心设计的熵编码器,其输出的平均码长接近信源的信息熵,即码长的下限。
源编码用于能够把原始数据中的相关数据与不相关数据区分开的场合。
该方法要考虑原始数据的语义,通过消除不相关数据以达到对原始数据流的压缩。
与熵编码不同,源编码常常是有损编码,原始数据流与已编码的数据流相似但不相同。
混合编码是熵编码和源编码方法的组合。
现有的图像/视频编码方法大多都是混合编码方案。
1.熵编码
常用的熵编码有游程编码(RLC,run-lengthcoding)、Huffman编码、算术编码和字典编码等。
(1)游程编码
当已被采样的图像/视频数据拥有相同字节序列时,可以采用更紧密序列来代替这些相同字节序列,从而实现压缩,这就是游程编码。
游程编码经常用于压缩采样量化后出现的大量零系数。
例如对于0串出现概率很大的数串“0,0,0,0,0,0,0,0,0,12,0,0,0,0,0,25,0,0,0,1”可以用某种流程编码压缩为“0,9,12,0,5,25,0,3,1”
(2)Huffman编码
Huffman编码过程可以用二叉树说明。
需要被编码的字符用树的叶节点表示,每个节点有一个权重p,p表示的是该字符的出现概率。
依次选择概率最小的两节点来构成中间节点,直到形成根节点,二叉树的构造完成。
之后,所有树枝都被赋上1或0,各输入字符的Huffman编码就是从根到叶节点路径上的数字标志序列。
例如,字符集为{a,b,c,d,e,f,g},已知相应的各字符出现机率为{5%,5%,10%,15%,15%,20%,30%},则Huffman编码过程图所示:
图1Huffman编码过程示例
最终码本为:
a:
0000b:
0001c:
001d:
100e:
101f:
01g:
11
理论上可以证明,Huffman编码是一种最优编码。
(3)算术编码
算术编码与Huffman编码一样,是最优编码方案,即已编码数据的长度都是最小的。
算术编码的基本原理是任何一个数据序列均可表示成0和1之间的一个间隔,该间隔的位置与输入数据的概率分布有关。
出现概率大的数据序列会对应到一个相对较宽的区间中,从而可以用更短的二进制位表示出该区间。
有关实验数据表明,在未知信源概率分布的大部分情形下,算术编码要优于Huffman编码。
算术编码过程如下:
C表示子区间起始位置,A表示子区间宽度,该宽度正好对应已输入符号串的出现概率。
算法开始时,初始化C=0,A=1。
用LPS表示0,1中出现概率较低的一个,其出现概率为Qe;
用MPS表示0,1中出现概率较高的一个,其出现概率为Pe=1-Qe。
当低概率符号LPS到来时,C=C,A=AQe
当高概率符号MPS到来时,C=C+A*Qe,A=APe=A(1-Qe)
这里将举一个例子来说明算术编码的过程。
设“0”为小概率符号LPS,其概率Qe=(0.001)b=(1/8)d;
“1”为大概率符号MPS,其概率Pe=(0.111)b=(7/8)d。
我们将对输入串“11011111”进行算术编码。
输入符号
C=C(输入0)
C=C+AQe(输入1)
A=AQe(输入0)
A=APe(输入1)
1
0.001
0.111
0.001111
0.110001
0.000110001
0.001111110001
0.000101010111
.010*********
0.000100101100001
0.10001000001011001
0.000100000110100111
0.000011100101110001001
0.000011001001000010111111
表1算术编码过程示例
输入串落入区间[C,C+A),区间起始点为.010*********,终止点为.010*********,可以选择一个该区间中的二进制表示最短的数0.0101,因此最终串“11011111”的算术编码为“0101”。
解码是编码的逆过程。
解码过程设置两个寄存器C’和A,解码开始时A=1,C’为输入的编码结果对应的二进制数。
重复利用以下公式进行计算:
当C’落在[0,AQe)内时,解码符号赋以“0”,并且C’=C’,A=AQe
当C’落在[AQe,A)内时,解码符号赋以“1”,并且C’=C’-AQe,A=A(1-Qe)
算法将进行到解出要求长度的符号串为止。
如“0101”在Qe=(0.001)b=(1/8)d时,进行8次分割计算可以解出码串“11011111”。
详细过程可以通过计算验证,这里就不详细给出了。
(4)字典编码
字典编码主要包括Abraham&
JakobZiv于1977年在[37]中提出的LZ77算法和Storer&
Szymanski于1982年在[40]中提出的LZSS算法。
字典编码的基本原理是在压缩的过程中逐步构造一个字典,新读入的数据序列先到字典中查寻,如果已经在字典中出现,则将用字典中该序列的标号表示;
否则构造一个新的词条。
字典编码很少用于图像压缩中,而在文本压缩中用得较多。
在著名的压缩软件WinZip中就使用了字典编码,压缩性能相当出色。
在[36,38,39]中对字典编码在图像压缩中的应用作了尝试,但1997年以后就很少再有人从事这方面的研究。
由于Huffman编码与算术编码性能优良,还有图像压缩过程中经常出现很长的零串的特点,目前图像压缩编码中的熵编码基本上就只用到游程编码RLC,Huffman编码和算术编码。
2.源编码
目前源编码主要是包括变换编码与预测编码。
(1)变换编码
变换编码(TransformCoding)是通过信号变换来消除图像数据空间相关性的一种有效方法。
尽管图像变换本身不能对数据进行压缩,但由于变换后系数之间的相关性明显降低,图像的大部分能量只集中到少数几个变换系数上,采用适当的量化和熵编码可以有效的压缩图像的数据量。
变换编码通常是将空间域相关的像素点通过变换映射到另一个正交矢量空间(变换域或频域),使变换后的系数之间的相关降低。
K-L(Karhunen-Loeve)变换虽然是均方误差准则下的最佳变换,但这一变换的核矩阵与待变换的数据相关,计算复杂,所以在实际的编码中一般不会采用。
其最大的意义在于理论上最佳,通常作为其它变换性能的比较标准。
对大多数图像信源来说,离散余弦变换(DCT,discretecosinetransform)是在现行变换编码中最接近K-L变换的方法,而且其变换矩阵固定,又有快速算法,因此在实际编码方案中经常被用到。
其它的变换编码还有傅里叶变换(FT,Fouriertransform)和离散小波变换(DWT,discretewavelettransform)。
小波分析由于在时域和频域同时具有良好的局部化特性,近年来受到广泛的关注,并被最近的几个图像/视频编码方案所采用。
离散余弦变换DCT其变换公式如下:
一维离散偶余弦正变换
其中u=0,1,…,N-1;
v=0,1,…,N-1
当u=0时,E(u)=
;
当u=1,2,…,N-1时,E(u)=1
二维离散偶余弦变换及逆变换
C(u,v)=
f(x,y)=
其中x=0,1,…,N-1;
y=0,1,…,N-1;
u=0,1,…,N-1;
v=0,1,…,N-1
当u=v=0时,E(u)=E(v)=
;
当u=1,2,…,N-1,v=1,2,…,N-1时,E(u)=E(v)=1
(2)预测编码
预测编码(predictivecoding)可以在一幅图像内进行(帧内预测编码),也可以在多幅图像之间进行(帧间预测编码)。
预测编码实际上是基于图像数据的空间和时间冗余特性,用相邻的已知像素(或图像块)来预测当前像素(或图像块)的值,然后再对预测误差进行量化和编码,这些相邻像素或图像块可以是同行的,也可以是前几行或前几帧的,相应的预测编码分别称为一维、二维和三维预测,其中一维和二维预测是帧内预测,三维预测是帧间预测。
预测编码有线性预测和非线性预测两大类。
线性预测编码又称为差分脉冲编码调制(DPCM,differentialpulsecodemodulation)。
帧内预测编码一般采用像素预测形式的DPCM,其优点是算法简单,易于硬件实现,缺点是对信道噪声及误码很敏感,会产生误码扩散,使图像质量大大下降。
帧内DPCM的编码压缩比很低,现在已很少独立使用,一般要结合其它编码方法。
帧间预测编码主要利用视频序列相邻帧间的相关性,即图像数据的时间冗余来达到压缩的目的,可以获得比帧内预测编码高得多的压缩比。
帧间预测编码一般是针对图像块的预测编码,主要方法有帧重复法、帧内插法、运动补偿法、自适应交替帧内/帧间编码法等。
其中运动补偿预测编码效果最好,已为各种图像/视频编码标准所采用。
运动补偿预测编码可以利用视频序列中两帧之间的瞬时冗余,这种技术适用于所有的帧间编码方法。
瞬时冗余可以是由静态背景前的物体运动或摄像机的运动引起。
运动补偿预测的基本概念是指,在当前帧的前帧和后帧(参考帧)中找出某一区域(块),该区域与当前帧中同样大小的一区域十分匹配。
如果找到了这样的一块区域,那么就能计算出当前帧中该块中的块亮度值与参考帧的块的块亮度值之间的差分信号(DPCM码)。
另外还可以计算出相应块的运动矢量,该运动矢量表示的是相应块沿X方向和Y方向的平移。
差分信号和运动矢量合起来就能够表示参考块与所预测块之间的偏差。
下图显示了一个实际视频中的运动补偿预测。
图2实际视频中的运动矢量
一般运动补偿预测可以分为三种类型:
●单向运动补偿预测,只使用前参照帧或后参照帧中的一个来进行预测。
●双向运动补偿预测。
前参照帧和后参照帧都被用来计算各块的运动矢量。
最后只选用与具有最小匹配误差的参考帧有关的运动矢量。
●插值运动补偿预测。
取前参照帧预测值与后参照帧预测值两者的平均。
运动补偿预测这类图像编码方法的主要缺点在于对图像序列不同的区域,预测性能不一样,特别是在发生了剧烈运动的区域,预测效率很差。
而且为了降低预测算法的运算复杂度和提高预测精度,一般要对图像进行分块后再预测,但相应的这样会造成分块边缘的不连续。
3.量化
量化是使数据量下降的一个强有力的方法。
从理论分析的角度,图像灰度值是连续的数值,而我们通常看到的是以0-255这样的整数表示的图像灰度,这是经A/D转换后的以256级灰度分层量化处理了的离散数值。
这样做可以用有限的8位信息表示一个变化范围无限的连续模拟量。
图像/视频编码中的量化不是指A/D变换后的量化,而是指以PCM码作为输入,经正交变换、差分或预测处理后,熵编码之前,对正交变换系数、差值或预测误差的量化处理。
量化输入值的动态范围很大,需要用较多的比特数表示一个数值;
量化输出只能取有限个数值,称作量化级,量化后的数值可以用较少的比特数表示。
每个量化输入被强行归一到与其接近的某个输出,即量化到某个量化级。
量化处理总是把一批输入量化到一个输出级上,所以量化是一个有信息丢失的过程,是不可逆的。
量化主要分为标量量化和矢量理化两大类。
标量量化是对每一个输入的数据进行个别量化,而矢量量化是将若干个输入数据作为一个整体的矢量看待,对这个矢量进行量化。
在当前的编码体系中,多数是采用标量量化。
然而,矢量量化的性能优于标量量化,具有相当的潜力,只是算法相对而言复杂得多,还有待进一步深入研究。
(1)矢量量化
矢量量化(VQ,vectorquantization)是用k个样本值形成一个k维空间Rk中的一个矢量,然后对此矢量进行量化,只传输或存储矢量地址,因而可以大大提高压缩效率。
矢量量化总是优于标量量化,因为矢量量化时有效利用了矢量中各分量间的四种相关性(线性依赖性、非线性依赖性、概率密度函数的形状和矢量维数)来去除冗余度。
矢量量化是标量量化的多维扩展[18,24]。
基于VQ的图像压缩方法是利用相邻图像数据之间的高度相关性,将输入的图像数据序列分组。
每一组m个数据被描述成一个有m个元素的矢量。
例如,将二维图像分成若干个M*N的矩阵块,每一个矩阵块内的数据排列成一个m=M*N个元素的一维矢量。
实际的矢量量化图像系统中编码器和解码器内置有相同的码本(codebook),码本由所有可能的矢量值集合的有序子集组成。
VQ的码本是根据训练矢量集合来设计的,常用的是LBG算法。
编码器根据特定的距离准则(或称代价函数)在码本中对输入图像进行矢量匹配,然后对匹配码的码字序号进行编码,从而实现了由一个矢量所需要的比特数到一个码字序号所需要比特数的压缩。
显然矢量量化是一种信息有损失的压缩方法,但它可以获得较高的压缩比。
其解码方法比较简单,只是根据接收到的序号,从与编码端一致的码本中找出该序号对应的码字,实现对原数据的近似重现,但编码端计算量颇大。
为了减小失真,码本的体积自然增大,必然使得矢量匹配的搜索运算时间增长。
另外,由于对原数据分块,在高压缩比时,与DCT方法一样会出现方块效应和边缘突出。
矢量量化的关键技术是最佳VQ码本的设计和快速的搜索算法。
二、小波图像编码与分形图像编码
1.小波图像编码
JeromeM.Shapiro在[17]中提出的EZW算法(embeddedzerotreewaveletalgorithm)是一种基于小波变换的图像编码。
相较于传统的基于DCT变换的图像编码,EZW算法有着很多优点。
这是一种嵌入式图像编码方案,亦即对编码后的码流几乎可以在任意位置截断进行解码,所不同的只是截断后的部分越完整,解得的图像越接近于原始图像。
完全不做截断时,这一方案等同于无损编码。
这一特性带来了相当多的优势,使得在当前的复杂网络环境中,这一编码方案比传统的JPEG标准更加适合图像传输。
小波变换后图像的能量绝大部分集中于左上角,越往右下,零值出现得越普遍。
图3是标准测试图片Lena的原图与经三次小波变换后的处理图像:
图3Lena原图与经三次小波变换后图像的对比
变换后的图像是一种金字塔结构,如下面左侧图中所示,图中标示出的三处1x1、2x2、4x4小方格都是对原始图像中同一区域的不同层次的描述,高一层的小波结果反映图像中更加重要的低频成份,低层的小波结果反映图像中不太重要(但是对于人的主观视觉感受来讲却可能很重要)的高频成份。
Shapiro提出了一个假设,即在高一层的小波变换结果中接近于零的区域,在它对应的低层次的那些区域中值也接近于零,而且通常会更小。
这一假设缘于人对于小波图像变换结果的观察,并且通过实验证明与实际情况相当吻合,例外情况所占的比例很小。
因此作者提出了按照下面右图中的顺序扫描小波变换后的图像中各区,扫描的同时建立一个零树结构的方案。
图4小波图像编码中的层次结构与之字形扫描
最后Shapiro在文章中给出了他的试验结果,下表是这一算法对512x512x256级灰度的标准图片Lena.bmp压缩处理后,压缩率与解码后图像均方差和峰值信噪比以及重要系数数量的一个比较。
图5EZW编码方法压缩Lena的实验数据
这篇论文是小波图像编码领域开创性也是最经典的一篇论文,Shapiro提出的编码方案现在也仍旧经常被用到。
应该说JPEG2000所以能在很多方面优于传统的JPEG算法,很大程度上是缘于引入了小波图像编码方案。
这一领域中另一重要研究工作是A.Said和W.A.Perlman对EZW进行改进,更有效的表示树根很重要而其子孙都不重要这样的系数而提出的SPIHT算法(SetPartitioninginHier