最近在泰瑞达找到工作,以后也不做嵌入式的东西了。
现在把研究生几年来写的东西一点一点贴上来,留给有需要的人。
对于有着巨大信息量的视频处理来说,需要研究出更高压缩比、更低码率、更清晰画质的编解码算法。到目前为止,视频编解码的国际标准有MPEG-1,MPEG-2.MPEG-4,H.261,H.263,H.264等。
本课题选择的解码对象是MPEG-4标准码流。之所以选择MPEG-4码流而非H.264码流的原因是:虽然H.264作为新一代的视频编解码标准,在追求更高的编码效率和简洁的表达形式的同时,也提供了非常好的视频质量,是当前最高效的视频压缩方法,但是由于H.264中引入了多种新的编码技术,使得编解码器的计算量急剧增加,对基于手持设备和无线设备的编解码系统来说并不是一种理想的选择,相比之下,基于简单架构的(SimpleProfile,SP)的MPEG-4 SP标准则非常适合此类系统。
MPEG-4:MPEG-4标准的突出特点是对音视频数据采用基于内容(Content-based)的操作、存取及传输。MPEG-4标准是一个开放、灵活、可扩展的结构形式,可随时加入新的、有效的算法模板,并可根据不同的应用要求现场配置解码器。
MPEG-4与MPEG-1、MPEG-2以及H.264相比,更注重多媒体系统的交互性和灵活性。最显著的差别在于它采用基于对象的编码理念;即在编码时将一幅景物分成若干个在时间和空间上相互联系的视频音频对象,分别编码后经过复用传输到接收端,在接收端再对不同对象分别解码。最后合成所需的视频和音频。这样便于对不同对象进行不同的编码和操作,也有利于不同数据类型间的融合。
它不但支持码率低于64kbps的多媒体通信,也能支持广播电视级的视频应用。MPEG-4将广泛地应用于数字电视、动态图像、实时多媒体监控、基于内容存储和检索的多媒体系统、可视游戏、基于面部模型的视频会议、交互式多媒体应用、演播电视等,它将推动电信、计算机、广播电视三大网络的最终融合,从而成为今后一段时间压缩标准的主流。
MPEG-4针对不同应用可以使用不同的编解码工具,并同时提出了类(profile)的概念。一个类是可以实现某个MPEG-4功能的一套工具子集。Profile使得用户完全可以根据自己的需要来选择使用相应的MPEG-4工具,并且在构建解码器时也不需要为所有MPEG-4中使用的编码算法准备好相应的解码算法。
MPEG-4标准中定义了很多视频工具(visualtools),每个视频工具都完成一项编码的工作。每个类都有自己支持的视频工具集,以适应各种环境下的使用。Simpileprofile主要使用如下的视频工具:
i.I帧编码(I-VOP),内部VOP:只用自己的信息编码。MPEG-4标准将8*8的象素区成为块(block),将16*16的像素区称为宏块(macroblock)。I帧中只有intra块,intra(帧内)块只进行帧内压缩。I帧是作为预测基准的独立帧,具有较小的压缩比。
ii.P帧编码(P-VOP),单向预测VOP:根据它前面的VOP利用运动补偿技术来编码。P帧包含intra块和inter块,P帧中的inter(帧间)块以本帧之前的图像为参考值做运动预测。由于使用了单向的远动预测,P帧可以得到中等的压缩比。MPEG-4视频中还有一种B帧(双向预测VOP,B-VOP),使用以前和将来的两幅图像做双向的运动预测,可以得到较高的压缩比,但其计算量也是三种类型的帧中最大的。Simpleprofile不支持B帧。
四类VOP(VideoObjectPlane视频对象平面):内部VOP(I-VOP)、单向预测VOP(P-VOP)、双向预测VOP(B-VOP)、全景VOP(S-VOP)。
iii.AC/DC预测(AC/DCPrediction)。AC/DC预测是以块为单位进行的。由于图像数据具有空间相关性,在intra块编码中,DCT变换后图像左上方块的直流/交流分量值(AC/DC)可以用来预测右下方的块的直流/交流分量值。
iv.数据分割(DataPartition)。在视频数据编码时,可以将编码后的数据分为纹理,运动矢量和控制字三部分。在接收端,控制字出错对解码的影响最大,运动矢量次之,纹理影响最小。由于对信道编码来说,抗噪性好就意味着码流中引入更多冗余。所以,如果视频数据信源编码时将这三部分分开,分别使用不通的信道编码方式,就可以做到在低带宽传输中尽可能的提高抗噪性。
v. 反向VLC(ReversibleVLC)。对于普通的VLC编码,如果码流中有一个bit出现错误,之后的数据都无法解码。反向VLC的码表经过特别设计,从反向也可以完成解码工作。所以,如果反相VLC编码的数据在传输中出现了一个错误,可以从VLC码流的结尾向前解码,一直解到出错的bit,从而成功恢复出更多的码流。反相VLC提高了编码的抗噪性,但也付出了比普通VLC编码效率更低的代价。
vi. 短头(shortheader)。MPEG-4在编码过程中同加入很多的控制字作为码流的码头。如果使用短头,许多控制字将被省略,解码器会按照协议中固定的配置去解码。短头牺牲了一些编码的灵活性,来换取编码效率和编码速度。
MPEG-4解码就是根据码流中控制信息,调用相应工具,对码流操作的过程。
H.264:MPEG(运动图像专家组)和VCEG(视频编码专家组)联合开发了一个比早期研发的MPEG和H.263性能更好的视频压缩编码标准,这就是被命名为AVC(增强视频编码)。通常被简称为H.264/AVC。视频的各种应用必须通过网络传送,这要求一个好的视频方案能处理各种应用和网络接口H.264/AVC为了解决这个问题,提供了很多灵活性和客户化特性。H.264/AVC的设计方案包含两个层次,视频编码层(VCL,VideoCoding Layer)和网络抽象层(NAL,Network AbstractionLayer)。视频编码层主要致力于有效地表示视频内容,网络抽象层格式化VCL视频表示,提供头部信息,适合多种传输和存储媒体。H.264着重于解决压缩的高效率和传输的高可靠性,其支持三个不同不同档次的应用,应用场合相当广泛。其中基本档次主要用于视频会话,如会议电视,可视电话,远程医疗,远程教学;扩展档次主要用于网络的视频流,如视频点播;主要档次主要用于消费电子应用,如数字电视广播、数字视频存储等。但是要实现上述多种强大功能也导致了H.264的算法复杂度较高,不利于在手机终端等能力受限设备上的使用。
数字视频基础:
自然界是由多个有各自特征形状、深度、纹理和亮度的物体所组成。一个与视频处理有关的典型自然视频场景包括空间特性(物体的形状、数目、纹理、颜色等)和时间特征(物体的运动、视点的变换等)。而自然视频场景在空间和时间上都是连续的,因此只要对自然场景的空间特征和时间特征进行采样,我们就可以用数字的方式来表示一个视频的场景。数字视频就是在数字的形式下的一个视频场景的采样的表示。每一个时-空采样(像素)可用一个数或者是一组数来表示采样点的亮度和色度。
摄像头用于把一个视频的场景投影到传感器上,比如一组电荷耦合装置(CCD)。在带色的视频采集中,每一个颜色成员都被过滤并投影到一组CCD中。
空间采样:在空间采样中,一组CCD的输出就是一个模拟的视频信号,一组可以表示视频图像的电信号。在一个时间点上的采样就形成了一个有定值的采样点图像帧。最常用的采样方法是把采样点置于一个正方形或长方形格中进行操作。然后对于水平方向和垂直方向的点二维采样,重建过程就以采样值对应到像素上进行显示。重建图像时,视觉效果取决于采样点的数晕。相同大小的图像,采样点的间隔较大就会得到一个低分辨率的采样图像,而增加采样点的数量就会增加采样图像的分辨率。
时间采样:在时间采样中,一个运动的视频图像是通过对图像信号在周期性的时间间隔上进行采样得到的。重放这一系列的帧会得到一个运动的效果。一个高的时间采样率(帧率)会产生更加平滑的运动,但是它就要求有更多的采样要被捕捉并被保存。
在10帧/秒之下的帧率一般被用于一些很低码率的视频通信中,因为被传输的数据量非常的小。但是运动却看起来很笨拙而且不自然。在10-20帧每秒是比较经典的低码率视频。在25-30帧每秒进行采样是标准电视信号图象的采样帧率,如果配合隔行扫描采样来达到更好的运动效果。50-60帧每秒就可以形成平滑的运动,这样的代价就是帧率太过高,传输和存储的压力大。
颜色空间:大多数字视频程序都依赖于彩色视频的显示,因此需要一个来捕捉并表示颜色空间的方法。一个单色的图像只需要一个在空间内表示一个像素点的亮度的值就可以了。但对于彩色图像来说,对于一个像素点至少需要三个数来把颜色信息准确地表示出来。颜色空间主要有RGB和YCbCr两种表示方法。
RGB颜色空间:在RGB颜色空间中,一个带颜色的图像采样是用三个值来表示一个像素点的相对的红、绿和蓝色比例。任何颜色都可以通过把红、绿和蓝来通过不同的比例相混得到。RGB颜色空间更加适合于捕捉并显示彩色图像,但是由于人类的视觉系统对亮度的敏感度大于颜色,而在RGB颜色空间中,三种颜色是被平等看待的,并用相同的分辨率存放起来。基于RGB颜色空间的相对缺点而提出的YCbCr颜色空间是通过把亮度和颜色信息分离,并对亮度值取更高分辨率可以更有效的表示一幅彩色图像。
YCbCr颜色空间和它的变换(通常写为YUV)是一种流行而高效的图像表示方法,两者之间转换方程如下:
Y=krR+kgG+kbB
Cb=B-Y
Cr=R-Y
Cg=G-Y
其中Y是亮度值,可由R,G和B的加权平均得到。在YCbCr颜色空间中,一个图像的完整描述可由给定Y和三个色差:Cb,Cr和Cg来表示。
在YCbCr空间中,Cb+Cr+Cg是一个常数。只有Y和Cb,Cr值被传输和存储。而人类视觉系统对于亮度更加敏感,为了减少图像表示的数据量,所以Cb和Cr的分辨率可以比Y低。因为人类的视觉系统相对于色度来说对亮度更加敏感,这就减少了表示图像的数据量。,低分辨率色差并不会对图像的质量产生影响,RGB和YCbCr表示的图像看上去没有什么不同。因此对于色度采样比亮度低的分辨率进行采样是一种最简单的压缩方法。
图像格式的几种常见的转换算法。。。
视频压缩(视频编码)是把数字视频流用更少的数据位进行存放的方法。未经压缩的视频数据量非常大,所以压缩对于数字视频的存储和传输来说都是必须的。图像压缩包括一对互补系统,一个编码器(encoder)和一个解码器(decoder)。编码器利用图像数据之间的相关性。在保证图像质晕的情况下使用较少的数据以传播或存储该图像;而解码器则把压缩后的图像还原出原始的视频数据。
图像数据中的冗余信息主要包括空间冗余,时间冗余,信息熵冗余,结构冗余,比例冗余,视觉冗余等。利用图像数据不同类型的冗余,科研工作者制定了不同的压缩算法,有些复杂的压缩算法则利用了几种不同类型的冗余。压缩算法的分类较多,一般来说可以分为无失真压缩和有失真压缩两大类。
无失真编码,又叫作熵保存编码,也称为熵编码,这种编码结果经解码后可无失真的恢复出原图像。一般来说压缩率不是很高。无失真编码的算法主要有:霍夫曼(Huffman)编码,算术编码,行程编码(RunLength Code)。
考虑到人眼对失真不易察觉的生理特征时,有些图像编码不严格要求熵保存,信息可允许部分损失以换取高的数据压缩比,这种编码是有失真数据压缩,通常运动图像的数据,通常运动图像的数据压缩都使用有失真编码,香农(Shannon)率失真理论对此有比较深入的解释,在此就不再赘述了。有失真编码的算法主要有:预测编码,变换编码,运动补偿和估计,小波变换(wave.1et)编码,分形编码等。
图像数据的压缩主要是对各种图像数据冗余度及视觉冗余度的压缩,包括如下一些方法:
一、统计冗余度的压缩:对于一串由许多数值构成的数据来说,如果其中某些值经常出现,而另外一些值很少出现,则取值上的统计不均匀性就构成了统计冗余度。利用该统计不均匀性可对视频数据进行压缩:经常出现的值用短码表示,对不经常出现的值用长码表示,因而.相对于定长表示法,用这种方法表示一串数据可以节省码位。这就是霍夫曼编码的思想。霍夫曼编码是无损压缩,目前在图像压缩编码中被广泛采用。
视频图像在每一点的取值上具有任意性。对于运动图像而言,每一点在一段时间内能取任意值,在取值上具有统计均匀性,难以直接运用霍夫曼编码的方法,但可以通过适当的变换编码的方法,如DCT变换,使原图像变成由一串统计不均匀的数据所表示,然后利用霍夫曼编码进行压缩。
二、空间冗余度的压缩:一幅视频图像相邻各点的取值往往相近或相同,具有空间相关性,这就是空间冗余度。图像的空间相关性说明相邻象素点的值变化缓慢。从频域的观点看,这意味着图像信号的能量主要集中在低频附近,高频信号的能量随频率的增加而迅速衰减。通过频域变换,可以将原图像信号用直流分量及少数低频交流分量表示,这就是变换编码中的离散余弦变换DCT的原理。DCT变换是MPEG-4压缩编码的基础,它可以对图像的空间冗余度进行有效的压缩。
变换编码不直接对空域图像信号进行编码,而是将空域图像信号变换到另一个正交矢量空间(变换域、频域)进行处理,在空域上具有强相关性的信号在变换到频域上之后相关性将大大降低,对频域信号进行量化之后就能达到压缩的目的。在视频变换中,应用最广泛的是DCT。
视频图像中经常出现一连串连续的象素点具有相同值的情况,典型的如彩条,彩场信号等。只传送起始像素点的值及随后取相同值的象素点的个数,也能有效地压缩码流,这就是游程编码(RunLe