• 隔行扫描 和 逐行扫描


     
    隔行扫描
      每一帧被分割为两场,每一场包含了一帧中所有的奇数扫描行或者偶数扫描行,通常是先扫描奇数行得到第一场,然后扫描偶数行得到第二场。
      无论是逐行扫描还是隔行扫描,都有视频文件、传输和显像三个概念,这三个概念相通但不相同。最早出现的是隔行扫描显像,同时就配套产生了隔行传输。而隔行扫描视频文件是到数字视频时代才出现的,其目的是为了兼容原有的隔行扫描体系(隔行扫描还依然在广泛应用)。
      通常显示器分“隔行扫描” 和 “逐行扫描”两种扫描方式。逐行扫描相对于隔行扫描是一种先进的扫描方式,它是指显示屏显示图像进行扫描时,从屏幕左上角的第一行开始逐行进行,整个图像扫描一次完成。因此图像显示画面闪烁小,显示效果好。先进的显示器大都采用逐行扫描方式。
      隔行扫描情况下,由于视觉暂留效应,人眼将会看到平滑的运动而不是闪动的半帧半帧的图像。但是这种方法造成了两幅图像显示的时间间隔比较大,从而导致图像画面闪烁较大。 因此该种扫描方式较为落后,通常用在早期的显示产品中。

    扫描区别

    每一帧图像由电子束顺序地一行接着一行连续扫描而成,这种扫描方式称为逐行扫描。把每一帧图像通过两场扫描完成则是隔行扫描,两场扫描中,第一场(奇数场)只扫描奇数行,依次扫描1、3、5…行,而第二场(偶数场)只扫描偶数行,依次扫描2、4、6…行。隔行扫描技术在传送信号带宽不够的情况下起了很大作用,逐行扫描和隔行扫描的显示效果主要区别在稳定性上面,隔行扫描的行间闪烁比较明显,逐行扫描克服了隔行扫描的缺点,画面平滑自然无闪烁。

    在电视的标准显示模式中,i表示隔行扫描,p表示逐行扫描。

    说隔行显示不如逐行,这又是为什么?这就要看这两种模式在显像时的具体过程。
    我们有一部30p的视频用作测试。假设有一台高速摄影机,对着平板电视拍摄(CRT存在扫描过程,解释起来稍微有些复杂,所以以平板电视为例)。接着我们用慢镜头重新观看电视机的工作状况,就会看到下列景象。
     
    1080p(逐行)   :每秒显示30个画面(实际上是60个场,由于第一个1/60秒和第二个1/60秒内显示的画面是一样的,所以看不到区别)。
     
    1080i (隔行):   每秒显示60个场,我们用“第一场”、“第二场”、“第三场”等表示在第一个、第二个、第三个1/60秒内发生的事。
    如图:
    第一场:显示上场的画面,下场还没出来,所以是空的
    第二场:下场显示出来了,而上场依然存在,所以我们看到了一张完整的画面。
    第三场:上场刷新成第2帧的内容,而下场没动
    第四场:下场跟进刷新,于是我们就看到完整的第2帧了
    第五场:上场变成了第3帧,而下场仍然还是第2帧中的内容
    第六场:下场继续跟进,我们又看到了完整的第3帧
    ……
    可以看到1080p和1080i在显示上根本的不同了。由于单位时间内总会有一半时间看到交错的画面,所1080i的显示会略有模糊。

    隔行扫描视频编码(interlaced-scan video coding)

    隔行扫描图像的每帧包括两个场,所以对于隔行扫描图像有三种编码方式:

      1、将两场合并为一帧进行编码;

      2、将两场分别编码;

      3、将两场合 并为一帧,但是在宏块级别上,将一个帧宏块划分为两个场宏块进行编码。

    前两种编码方式称为图像自适应帧/场编码(Picture-adaptive frame-field, PicAFF or PAFF)

    第三种称为宏块自适应帧/场编码(Macroblock-adaptive frame-field, MBAFF)。

    • PAFF:对于一个运动图像,由于场之间存在着较大的扫描间隔,所以帧中相邻两行之间的空间相关性相对于逐行扫描图像较小,因此对两个场分别编码 会更节省码流。对于一个非运动图像,相邻两行之间存在较大的空间相关性,将两场合并为一帧编码更有效。所以PAFF编码方式可以针对整个图像的编码方式做 自适应调整,选择帧编码或场编码。
    • MBAFF:当图像同时存在运动区域和非运动区域时,PAFF的劣势便显现出来,PAFF的自适应粒度太粗,无法实现满足更加精细的编码要求,于 是MBAFF应运而生。MBAFF对帧编码或场编码的选择是基于宏块的,MBAFF将两场合并为一帧进行编码,但将每一个帧宏块(16x16)划分为场宏 块对(8x16),针对每一个帧宏块,比较帧编码和场编码产生的码流大小,使用最节省码流的方式。
     
     
     
     
     

    运动补偿

      一种描述相邻帧(相邻在这里表示在编码关系上相邻,在播放顺序上两帧未必相邻)差别的方法,具体来说是描述前面一帧(相邻在这里表示在编码关系上的前面,在播放顺序上未必在当前帧前面)的每个小块怎样移动到当前帧中的某个位置去。这种方法经常被视频压缩/视频编解码器用来减少视频序列中的时域冗余。它也可以用来进行去交织(deinterlacing)以及运动插值(motion interpolation)的操作。

      一个视频序列包含一定数量的图片--通常称为(frame)。相邻的图片通常很相似,也就是说,包含了很多冗余。使用运动补偿的目的是通过消除这种冗余,来提高压缩比。

      最早的运动补偿的设计只是简单的从当前帧中减去参考帧,从而得到通常含有较少能量(或者称为信息)的"残差",从而可以用较低的码率进行编码。解码器可以通过简单的加法完全恢复编码帧。

      一个稍微复杂一点的设计是估计一下整帧场景的移动和场景中物体的移动,并将这些运动通过一定的参数编码到码流中去。这样预测帧上的像素值就是由参考 帧上具有一定位移的相应像素值而生成的。这样的方法比简单的相减可以获得能量更小的残差,从而获得更好的压缩比--当然,用来描述运动的参数不能在码流中 占据太大的部分,否则就会抵消复杂的运动估计带来的好处。

      通常,图像帧是一组一组进行处理的。每组的第一帧(通常是第一帧)在编码的时候不使用运动估计的办法,这种帧称为帧内编码帧(Intra frame)或者I帧。该组中的其它帧使用帧间编码帧(Inter frame),通常是P帧。这种编码方式通常被称为IPPPP,表示编码的时候第一帧是I帧,其它帧是P帧

      在进行预测的时候,不仅仅可以从过去的帧来预测当前帧,还可以使用未来的帧来预测当前帧。当然在编码的时候,未来的帧必须比当前帧更早的编码,也就是说,编码的顺序和播放的顺序是不同的。通常这样的当前帧是使用过去和未来的I帧或者P帧同时进行预测,被称为双向预测帧,即B帧。这种编码方式的编码顺序的一个例子为IBBPBBPBBPBB。

     
  • 相关阅读:
    互斥锁Mutex与信号量Semaphore的区别
    c/c++强制类型转换
    c++中的隐藏、重载、覆盖(重写)
    运算符重载详解
    类的大小
    C++ static、const和static const 以及它们的初始化
    一种隐蔽性较高的Java ConcurrentModificationException异常场景
    Java编码常见的Log日志打印问题
    Java编程常见缺陷汇总(一)
    Java字符串连接的多种实现方法及效率对比
  • 原文地址:https://www.cnblogs.com/maxiaodoubao/p/4465902.html
Copyright © 2020-2023  润新知