Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2707731
  • 博文数量: 416
  • 博客积分: 10220
  • 博客等级: 上将
  • 技术积分: 4193
  • 用 户 组: 普通用户
  • 注册时间: 2006-12-15 09:47
文章分类

全部博文(416)

文章存档

2022年(1)

2021年(1)

2020年(1)

2019年(5)

2018年(7)

2017年(6)

2016年(7)

2015年(11)

2014年(1)

2012年(5)

2011年(7)

2010年(35)

2009年(64)

2008年(48)

2007年(177)

2006年(40)

我的朋友

分类: C/C++

2007-02-07 18:42:50

(quan整理)
一、视频信息和信号的特点
1.1直观性
       利用人的视觉系统,直接获取视频信息
1.2确定性
       视频信息只管具体,不易与其他内容混淆
1.3高效性
       利用视觉系统,人们可以并行的观察图像的各个象素,因此具有高效性。
1.4广泛性
       视觉系统占外界信息总量的70%
1.5视频信号的高带款性
       视频信息包含大量的变化的信息,信息量极大,传输网络所需要的带宽相对较大。
 
二、视频压缩的要求和可能性
2.1视频压缩编码的目标
                 由于视频信息量大,传输带宽高,就要求先对视频源压缩,然后传输,以便节约带宽和存储空间。
                (1)       视频必须压缩在一定的带宽内,要保证足够的压缩比。
                (2)       视频压缩后,经恢复要保证一定的视频质量
                (3)       视频编码器的实现方式应力求简单、易实现、低成本、可靠性高。
2.2视频压缩的可能行
                (1)时间相关行
                     在一组视频序列中,相邻相邻两帧只有极少的不同之处,这便是时间相关性。
                (2)空间相关性
                     在同一帧中,相邻象素之间有很大的相关性,两象素越近,侧相关性越强。
 
三、视频编码技术
3.1基本结构
       视频编码方式与采用的信源有关。根据采用的信源的模型,视频编码可以分为两大类:基于波形的编码和基于内容的编码。
3.2 基于波形的编码
       如果采用“一幅图像由许多象素构成”的信源模型,这种信源模型的参数就是象素的亮度和色度的幅度值,对这些参数进行编码的技术即为基于波形编码。
       利用象素空间的相关性和帧间的时间相关性,采用预测编码和变化编码技术,减少视频信号的相关性,从而显著降低视频序列的码率,实现压缩编码的目标。
3.3基于内容的编码
        如果采用一个分量有几个物体构成的信源模型,这种信源模型的参数事各个物体的形状,纹理,运动,对这些参数进行编码的技术就是基于内容的编码。
 
四、h264的应用
4.1 H. 264的技术特点可以归纳为三个方面
        (1)注重实用;
        (2)注重对移动和IP网络的适应;
        (3)在混合编码器的基本框架下,对其主要关键部件都做了重大改进,如多模式运动估计、帧内预测、多帧预测、基于内容的变长编码、4X4二维整数变换等。
        (4)在关注H. 264的优越性能的同时必然需要衡量其实现难度。从总体上说,H. 264性能的改进是以增加复杂性为代价而获得的。据估计,H. 264 编码的计算复杂度大约相当于H. 263的3倍,解码复杂度大约相当于H. 263的2倍.
4.2  h264应用可分为3个级别:
        (1) 基本档次:  (简单版本, 应用面广 , 支持帧内和帧间编码,基于可变程度的熵编码.)
                                  应用领域:  视频会话,会议电视, 无线通信等实时通信.
        (2) 主要档次:  ( 采用了多项提高图像质量和增加压缩比的技术措施, 支持隔行视频, 支持基于上下文的自适应的算术编码.)
                                  应用领域:  数字广播与数字视频存储.
       (4)扩展档次: 应用领域: 可用于各种网络的视频流传输,视频点播
 
五、视频编码原理
5.1基本概念
              (1)视频编码器 能够对一个图像或者一个视频序列进行压缩,产生码流。
 
              在上图中,编码器输入的帧或场Fn,以宏块为单位被编码器处理。
              如果采用帧间预测编码:其预测值P,是由已编码的图像做参考,经运动补偿得到的。预测图像P和当前帧Fn相减,得到两图像的残差值Dn,Dn在经过转换T,量化Q,去处空间冗余,得到系数X,将X重排(使数据更加紧凑),熵编码(加入运动矢量。。。一些图像相关得信息),得到nal数据。
              再编码器中有个重构的过程(解码的过程),量化系数X,反量化,反变换,得到Dn’,Dn’和预测图像P相加,得到uFn’,再滤波得到Fn’,Fn’就是Fn编码再解码后得图像。
              如果采用帧内预测编码:预测值P,是由当前片中,己编码的宏块预测得到的(亮度4×4或者16×16预测,色度8×8预测)。当前待处理的块,减去预测值P,得残差值Dn,Dn在经过转换T,量化Q,得到系数X,将X重排(使数据更加紧凑),熵编码,得到nal数据。
              再重构的过程中,量化系数X,反量化,反变换,得到Dn’,Dn’和预测图像P相加得到当前宏块编码解码后得值,该值可以用来做帧内预测的参考宏块。
              编码器要有重构机制的原因:重构过程,实质上是个解码的过程,解码后的图像和源图肯定有差别,我门利用解码后的图像做参考,就能够和解码器中保值一致,就能够提高图像的预测精度。(再解码器中,是利用己解码的图像做参考,是从解码的图像预测出下一副图像)
 
              (2)视频解码器 能够对一个码流解码,长生和源图或源视频序列相近的图像或视频序列。如果解码出的图像和源图是一样的,这个编解码过程是无损的,否则是有损。
 
                     解码器的实现和编码器的重构机制,是一样的。
 
              (3)场 、帧、图像
                     场:隔行扫描的图像,偶数行成为顶场行。奇数行成为底场行。所有顶场行称为顶场。所有底场行称为底场。
                     帧:逐行扫描的图像。
                     图像:场和帧都可认为是图像。
              (4)宏块、片:
                     宏块:一个宏块由一个16×16亮度块、一个8×8Cb和一个8×8Cr组成。
                     片:一个图像可以划分成一个或多个片,一个片由一个或多个宏块组成。
5.2编码数据格式
              5.2.1  h264支持4:2:0的连续或隔行视频编码解码。
              5.2.2  h264的编码格式
                            制定h264的主要目标有两个:
                            (1)得到高的视频压缩比
                            (2)具有良好的网络亲和性,即可适应于各种传输网络。
                            为此,h264的功能分为两层,视频编码层(VCL)和网络提取层(NAL)
                            VCL数据即被压缩编码后的视频数据序列。在VCL数据要封装到NAL单元中之后,才可以用来传输或存储。NAL单元格式如下图:
   
Nal头
Rbsp
Nal头
Rbsp
Nal头
Rbsp
             5.2.3         h264码流结构
5.3参考图像
           H264为提高精度,H264最多可从15个图像总进行选择,选出最佳的匹配图
           优点:  大大提高预测精度
           缺点:    复杂度大为增加
           参考图像由参考列表(list0,list1)管理,
          P帧有一个参考列表 list0
          B帧有两个参考列表 list0 和 list 1
 
5.4帧内预测
          预测块P是基于已编码重建块和当前块形成的.
          对于亮度的预测:4×4亮度预测,16×16亮度预测
          对于色度象素预测:   8×8色度预测
         5.4.1  4×4亮度预测
                          4×4亮度预测 有9种预测模式
                           
                 (a)利用上面和左面的象素,对a~q进行帧内4×4预测
 
                 (b)帧内4×4预测的8个方向
      
      
      
      
模式
描述
模式 0 (垂直)
由上边象素垂直推出相应象素值
模式 1 (水平)
由左边象素水平推出相应象素值
模式 2 (DC)
由上边及左边平均值推出所有象素值
模式 3 (下左对角)
由45度方向象素内插得出相应象素值
模式 4 (下右对角线)
由45度方向象素内插得出相应象素值
模式 5 (右垂直)
由26.6度方向象素值内插得出相应象素值
模式 6 (下水平)
由26.6度方向象素值内插得出相应象素值
模式 7 (左垂直)
由26.6度方向象素值内插得出相应象素值
模式 8 (上水平)
由26.6度方向象素值内插得出相应象素值
      
 
9种预测模式计算产生的相应的预测块(SAE 定义了每种预测的预测误差),其中 SAE 最小的预测块与当前块最匹配
      
          5.4.2  16×16亮度预测模式―――共有4种预测模式
      
      
      
模式
描述
模式 0 (垂直)
由上边象素推出相应象素值
模式 1 (水平)
由左边象素推出相应象素值
模式 2 (DC)
由上边和左边象素平均值推出相应象素值
模式 3 (平面)
利用线性"plane"函数推出相应象素值,适用于亮度变化平缓区域
 
          5.4.3  8×8色度块预测模式
                   4种预测模式,类似帧内16*16预测,只是编号不同
                   DC 为模式 0, 水平为模式 1, 垂直为模式2, 平面为模式 3
 
5.5 帧间预测
          H264帧间预测是利用已编码的帧或场和基于块的运动补偿。在h264中,块的尺寸更加灵活(16×16到4×4)。
         5.5.1  基本概念
                      活动图像临近帧中的景物存在一定的相关性,因此将图像分成若干块或宏块,并设法搜索出每个块或宏块在邻近帧图像中的位置,并得出两者之间的空间位置的便宜量.得到的相对偏移量就是通常所指的运动矢量(MV).
到运动矢量的过程称为运动估计(ME).
 
        5.5.2树状运动补偿
               每个宏块(16×16)的亮度,可以按4种方式分割:1个16×16,2个16×8,2个8×16,4个8×8。8×8模式的子块可以继续划分:1个8×8,2个4×8,2个8×4,4个4×4。这种分割的运动补偿,称为树状运动补偿。                                      
       树状运动补偿,灵活和细致的划分,大提高了运动估计的精确程度
       块的大小可变。在运动估计时,可以灵活地选择块的大小。在宏块(MB)划分上,H.264采用了16×6,16×8,8×16,8×8四种模式;当划分为8×8模式时,又可进一步采用8×4,4×8,4×4三种子宏块划分模式进一步划分,这样做既可以使运动物体的划分更加精确,减小运动物体边缘的衔接误差,又可以减小变换过程中的计算量。当对较大的平滑区域采用Intra_16×16的帧间预测方式时,为减小小尺寸变换带来的块间灰度差异,H.264采用了对亮度数据的16个4×4块的DC系数进行第二次4×4变换,对色度数据的4个4×4块的DC系数进行2×2变换的方式。
       5.5.3 运动矢量
       帧间编码宏块的每个子宏块都是从参考图像的某一相同尺寸区域进行预测得到 的。两者之间的差异(MV),对亮度成分采用1/4象素精度,色度1/8象素精度。
 
附录:
264学习指南―――分三个阶段学习
1、第一个阶段:
学习H.264,首先要把最基本最必要的资料拿在手里(\\172.22.113.200\share\h264\H.264相关论文\其他\经典文章)。这些资料包括:标准文档+测试模型+经典文章。首先看《H.264_MPEG-4 Part 10 White Paper》,看完之后再看《Video coding using the H.264 MPEG-4 AVC compression standard》和《Halsted.Press.H.264.And.MPEG-4.Video.Compression.Video.Coding.For.Next.Generation.Multimedia.eBook-LiB》,然后可以抽空看《Overview of the H.264_AVC Video Coding Standard.pdf》。这几篇文章看完后,你应该对H.264的整体框架有个比较深入的了解了。前三篇文章可能需要花费你两~三周的时间。
 
2、第二阶段:
       看代码。这个时候你最常用的工具就是标准文档和测试模型(建议使用)。看代码也要先从整体框架入手。先搞懂H.264的整体框架在代码里是怎么分布的,一个功能模块的前伸模块和后继模块是什么。也就是搞清楚整个代码流程。这个阶段对标准文档的使用可能很少。
3、第三阶段:
然后你找到一个自己感兴趣的切入点,开始以此为中心研究这个问题。你研究问题的时候应该是联系测试模型来研究,这个时候你就需要仔细看代码中对这个问题的实现了。这个阶段我绝对支持你一行行代码跟踪,一个参数一个参数地跟踪。而代码中不懂的地方可能需要查标准。这时你再来看标准文档就有了针对性。也因为能将标准文档和代码对应起来,从而看标准文档也不觉得有太大困难,也能明白标准文档说的是什么问题,在测试模型中是如何通过代码实现的。在这个阶段中,会牵连到很多H.264的相关知识,这样通过以点带线,以线带面。会对H.264的内容认识越来越多。而你也就找到了自己的方向。
==========【注意事项】==========
1、切忌将代码和标准文档独立开看,否则,你的困难会很大。
2、对于刚开始接触H.264的人,切忌直接看代码和标准,哪怕是将标准和代码结合起来看,你也会不太顺利。换句话说:在没有了解H.264整体框架之前,你最好什么都不要做。

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=570071

阅读(2765) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~