来源:Berkeley设计技术公司 关于色彩 彩色图像通常用几个“色彩层”来呈现。例如,RGB彩色图像包含红色层、绿色层和蓝色层。每一个层包含单一色彩(红色、绿色或蓝色)的整个图像。当这三层重叠或混合后,将组成全彩图。为将彩色图像进行压缩,本文描述的静态图像压缩方法将依次应用到每个色彩层。 视频压缩应用通常使用一种色彩层不对应特定色彩的色彩方案。通常是,一个色彩层包含亮度信息(彩色图像中每个像素的总亮度),两个层包含色彩(色度)信息,色度信息与亮度信息结合起来可以得到每个图像像素特定红、绿和蓝色彩。 这样的色彩方案非常方便,因为人眼对亮度比对色度更敏感,因此色度层的编码和存储图像分辨率都比亮度信息更低。特别是视频压缩算法通常对色度层的垂直和水平编码的分辨率都仅为亮度层的一半。因此,在亮度层中的每个16 x16像素区域内,每个色度层包含一个8x8像素的块。在典型的视频压缩算法中,“宏块”为视频帧中的一个16x16像素的区域,该宏块包含4个8x8亮度块,以及两个对应的8x8色度块。宏块允许采用后面介绍的运动估计和补偿,这两个技术将与上面介绍的色度层次采样结合使用。 增加运动因素 使用上面介绍的方法,像JPEG这样的静态图像压缩算法可以在压缩率为10:1的条件下获得很好的图像质量。最先进的静态图像编码器在压缩率高达30:1下也能获得很好的图像质量。视频压缩算法采用运动估计和补偿可以利用连续视频帧之间的相似性。这样可以使视频压缩算法在压缩率达200:1的情况下获得很好的视频质量。 在某些视频场景下,例如新闻节目中运动图像很少。在这种情况下,每个视频帧中的8x8像素的块大部分与前一帧是相同的,或者接近相同。压缩算法通过运算两个帧之间的差异性可以利用这一事实,利用上面介绍的静态图像压缩方法来对这种差异性进行编码。对于大部分图像块来说,这种差异性很小,与单独对每个帧进行编码相比,这种方法需要的编码数据位非常少。然而,如果摄像机是进行摇摄的或者场景中某个大的物体在移动,那么每个块将不再与前一帧中对应块相同。相反,与前一帧中8x8像素区域相似的块位置发生了偏移,产生了与运动方向对应的一个距离。值得注意的是,每个视频帧通常由两个色度层和一个亮度层组成,如上面所述。很显然,每个层的运动情况是相同的。尽管亮度和色度层的分辨率不同,为利用这种事实,以宏块而不是以三个层中单独的8x8像素块进行运动研究。 运动估计和补偿 运动估计是尝试发现在前一编码帧(称为“基准帧”)中的一个与当前帧中每个宏块紧密匹配的区域。对于每一个宏块来说,运动估计产生一个“运动矢量”。运动矢量是由当前帧中宏块相对于所选择的16x16像素区域的基准帧中位置的水平和垂直偏移组成。视频编码器通常使用VLC来对视频码流中的运动矢量进行编码。所选择的16x16像素区域被用于当前宏模块中像素的预测,使用上面介绍的静态图像压缩方法来进行宏块之间的差异以及所选择区域(预测误差)的运算和编码。绝大多数的视频压缩标准允许在编码器不能发现宏块的足够好的匹配时,忽略这种预测。这时,对宏块本身进行编码,而不是对预测误差进行编码。 值得注意的是,基准帧并不总是连续视频帧中的前一个显示帧。视频压缩算法通常对帧的编码顺序与他们显示的顺序是不相同。编码器可能向前跳过几个帧,对未来的帧进行编码,然后跳回来,对显示序列中的下一个帧编码。之所以这样做,是因为可以利用编码的未来帧作为基准帧向后及时地实现运动估计。视频压缩算法还可以使用两个基准帧—一个是前面已显示的帧,一个是前面已编码的未来帧。这样允许编码器从任意一个基准帧中选择一个16X16像素的区域,或者在前面显示帧的16X16像素区域和未来帧的16X16像素区域之间通过插值方法预测一个宏块。 依赖前一个编码帧来对每一个新帧解码进行修正的一个缺点是,一个帧的传递错误会使每个紧随而来的帧不能重建。为缓解这个问题,视频压缩标准偶尔只使用静态图像编码方法对一个视频帧进行编码,而不需依赖于前一个编码帧。这些帧就成为“内帧”(或I frame,即I帧)。如果压缩码流中的一个帧因为错误而被破坏,视频解码器必须等到下一个I帧,这种方法就不需要基准帧来进行视频重构。 仅仅使用前一个显示的基准帧来编码的帧被称为“P帧”,同时使用前一个显示帧和未来帧作为基准帧进行编码的帧称为“B帧”。在通常的场景中,编解码器编码一个I帧,然后向前跳过几个帧,用编码I帧作为基准帧对一个未来P帧进行编码,然后跳回到I帧之后的下一个帧。编码的I帧和P帧之间的帧被编码为B帧。之后,编码器会再次跳过几个帧,使用第一个P帧作为基准帧编码另外一个P帧,然后再次跳回,用B帧填充显示序列中的空隙。这个过程不断继续,每12到15个P帧和B帧内插入一个新的I帧。例如,图1种给出了一个典型的视频帧序列。 图1:典型的I、P和B帧序列。
教你认识视频压缩(二)
最新推荐文章于 2021-03-10 20:54:30 发布