码迷,mamicode.com
首页 > 其他好文 > 详细

嵌入式视频处理基础(二)

时间:2017-09-29 09:52:44      阅读:230      评论:0      收藏:0      [点我收藏+]

标签:微信   嵌入式   text   视频格式   完成   mpeg-2   size   两种   img   

 技术分享


引言:

作为消费者,我们对于各种形式的视频系统都已经非常熟悉了。但是从嵌入式开发人员的角度来看,视频就好像是一张纷繁复杂的网络,里面充满了各种不同的分辨率、格式、标准与显示等。


隔行扫描和逐行扫描:

隔行扫描起源于早起的模拟电视广播,那时候需要按顺序将图像快速刷新,以减小视觉上的闪烁,但是当时的技术还无法做到这么快速的刷新整个屏幕。因此,就将每一帧进行交织处理,即分为两场,一个由奇数扫描行组成,另一个由偶数扫描行组成。

技术分享

隔行扫描

 

技术分享

帧分为奇数和偶数场

NTSC(PAL)的帧刷新率大约为30(25)帧/秒。这样,大的区域闪烁频率为60(50)Hz,而局部区域闪烁频率为30(25)Hz。这是一种节省宽带的折中方案,同时也考虑了眼睛对于大的纯色区域的闪烁更加敏感的特性。

隔行扫描不仅仅有闪烁的问题,而且还会引起其他问题。首先,扫描行本身通常是可见的。这是因为每一个NTSC场是1/60秒的时间间隔内发生的事情的一个快照,一个视频帧由两个暂时的适当的方式进行的。但是,当我们要将隔行场转换为逐行场时(这一过程称为去隔行),可能引起图像中运动部分出现锯齿状的边缘。去隔行非常重要,因为将视频帧作为一系列相邻的行来处理往往具有更高的效率。

技术分享

隔行扫描锯齿波

随着数字电视的出现,为了提高图像质量,逐行扫描已经成为一种非常流行的输入和输出视频格式。这种扫描方式下,整个图像按从上到下的顺序进行更新,扫描速率是隔行扫描系统的两倍。这就消除了与隔行扫描有关的许多问题。在逐行扫描中,两个场组成一个视频帧的概念就不适用了。

技术分享

逐行扫描

技术分享

帧被连续存储


颜色空间:

有许多种不同的方式可以用来表示颜色,每一种颜色系统适用于不同的目的。最基本的表示方法是RGB颜色空间。

RGB代表“红、绿、蓝”(red-green-blue),这是一种常用于照相机传感器和计算机图形显示的颜色系统。三种颜色叠加在一起就构成了白色,将三种颜色按不同的比例组合起来就可以构成可见光范围内的任何颜色。RGB是所有其他颜色空间的基础,在计算机图形领域内,RGB是压倒性的选择。

技术分享

RGB三原色

正如RGB在图图形侠士领域占有统治地位一样,CYMK在打印领域则一枝独秀。CYMK代表“Cyan(青色)-Yellow(黄色)-Magenta(品红)-blacK(黑色)”,在打印和绘画方面是一种流行的颜色空间。这个颜色空间可以看做是RGB颜色系统的逆向过程,从某种程度上说,RGB是在做加法,而CYMK则是在做减法。换句话说,RGB光加在一起构成了白光,而CY和M墨水加在一起则吸收了所有的白色光,也就是说,构成了黑色。但是由于很难产生真正的纯黑色,在现有打印介质的物理特性下,黑色也被加入到这个颜色系统中(因此使用了第四个字母K)。

技术分享

CYMK颜色

 

技术分享

RGB与CMYK对比

技术分享

CYMK各部分颜色

从上图可以看出在打印领域CYMK的绝对优势。


伽马校正:

在处理颜色空间时,“伽马”是一个非常重要的现象。这一术语主要用来描述亮度的感知和显示中存在的非线性特点。要注意的是,这一特点具有两个方面的表现:第一,人眼是以非线性方式感知亮度。第二,物理输出设备是以非线性方式显示亮度。非常巧合的是,人类感知亮度的敏感度几乎总是CRT显示输出特性的逆。

技术分享

gamma校正

从另一角度说,显示器的亮度粗略与输入模拟信号电压的gamma次幂成正比。在CRT或者LCD显示器上,这个值通常在2.2-2.5之间。在照相机的预补偿中,将RGB的值扩展到1/gamma的幂。

这样造成的结果是,摄像机和计算机图形处理中,通过一个称为“伽马校正”的过程,预先将其RGB输出数据流针对目标显示器的非线性特点进行补偿,同时也产生了一个用来描述眼睛如何真正看待场景模型。

技术分享

伽马校正将给定的输入幅度产生的亮度输出进行线性化

(a)线性输入电压在显示器上产生了非线性的亮度输出

(b)通预补偿这种失真,显示器的亮度与输入电压保持线性关系

经过伽马校正后的RGB坐标称为R’G’B’空间,亮度值Y’就是从这些坐标中得到的。严格的说,术语“亮度”(luma)仅仅应该用来指伽马矫正后的亮度值,而真正的“亮度”Y才是一个科学的术语。,这个值使用RGB的加权和得到的。

RGB通道格式是描述真实世界颜色的一种很自然的方式,三个通道中每一个都与其他两个高度相关。当给定一副图像时,单独看RGB通道就可以看到这种现象—可以在每个颜色通道中感知整个图像。另外,在图像处理中,RGB并不是很好的选择,因为一个颜色通道有变化,另外两个通道也必须做相应的变化,每个通道占用相等的带宽。

为了降低传输带宽的要求,提高视频压缩率,相应的开发出了其他的颜色空间,这些颜色空间是高度不相关的,这样才能比RGB具有更好的压缩特性。最流行的颜色空间有YPbPr、YCbCr和YUV,这些系统无一例外地将亮度信号从其他两个色度信号中分离出来。这种分离操作是通过尺度化的色差因子(B’-Y’)和(R’-Y’)实现的。

下列公式完成8比特表示的YCbCr和RGB颜色空间之间的转换,这里的Y、R、G、和B的正常范围是 16~235,而Cr和Cb正常范围是16~240。

    • Y=0.299R+0.587G+0.114B

 

 

    • Cb=-0.168R-0.330G+0.498B=128

 

 

    • Cr0.498R-0.417G-0.081B+128

 

 

    • R=Y+1.397(Cr-128)

 

 

    • G=Y-0.711(Cr-128)-0.343(Cb-128)

 

 

    • B=Y+1.765(Cb-128)

 


YCbCr:

由于视杆细胞比视锥细胞多的多,人眼对亮度感觉要比对色差更明显。幸运的是,在YCbCr颜色系统中,我们更加注意的亮度分量Y,而对颜色分量Cb和Cr不太敏感。因此,有些视频标准和压缩算法通过对颜色分量进行下采样,实现了更高的压缩率,从而节省了视频的宽带。

在进一步讨论这个问题之前,我们先熟悉一下专用术语。在下采样前,假定我们有一个全带宽的YCbCr流。也就是说,视频源产生的像素流是下图格式:

技术分享

4:4:4YCbCr采样

这种格式称为4:4:4 YCbCr。第一个数字永远是4,向来对应亮度(luma)采样平率和NTSC颜色子载波频率的比值。第二个数字对应于某一水平行中亮度和色度(chroma)之间的比值:如果色度信号没有相对亮度做下采样,这个数字就是4,。第三个数字如果和第二个数字相同,则说明色度信号在垂直方向没有下采样。另一方面,如果第三个数字为0  ,那么行之间的色度下采样为2:1。因此,4:4:4意思是每一行的每一个像素都有各自独立的Y、Cr和Cb分量。

如果采用水平因子为2来对一个4:4:4的YCbCr信号色度分量进行下采样,最终将得到一个4:2:2的YCbCr信号。这里的4:2:2意味着,对某一行视频数据来说,每两个色度值对应的4个亮度值。每一对(Y,Cb)或(Y,Cr)都代表一个像素值。从显示质量上来说,4:2:2的图像只比对应的4:4:4源图像略有下降,但却比后者节省大约33%的带宽。

技术分享

4:2:2YCbCr采样

需要注意的是,4:2:2并不是唯一的色度下采样方式。用水平因子来对一个4:4:4的YCbCr色度信号进行下采样,最终得到一个4:1:1的YCbCr数据流。一对色度值在空间上与4个亮度值保持一致。这种色度过滤方法将节省50%的带宽,4:1:1的YCbCr是一种视频压缩算法输入数据,以及从视频解压缩算法输出数据时采样的一种格式。

技术分享

(a)YCbCr4:4:4 数据流及其色度下采样后的派生格式

(b)4:2:2

(c)4:1:1

(d)4:2:0

在视频压缩和解压缩中,另一种常用的格式为4:2:0 YCbCr。这种格式要比前面提到的其他格式都复杂,原因主要由两个。其一,Cb和Cr分量在水平和垂直方向都进行了因子为2的下采样。这就意味着为了产生下采样的数据流,就必须存储多行的视频数据。其二,更重要的是,有两种不同的4:2:0 YCbCr格式。MPEG-2压缩使用了一种水平方向上共位的方案,但MPEG-1和JPEG算法使用另一种格式,即采用Y样本中心的色度值。

由于篇幅,嵌入式视频基础这期内容先分享到这里,下期更精彩。


 

版权所有权归卿萃科技,转载请注明出处 

 

作者:卿萃科技ALIFPGA  

 

原文地址:卿萃科技FPGA极客空间 微信公众号

 


 

技术分享

 

  扫描二维码关注卿萃科技FPGA极客空间

 


 

 

 

 

嵌入式视频处理基础(二)

标签:微信   嵌入式   text   视频格式   完成   mpeg-2   size   两种   img   

原文地址:http://www.cnblogs.com/alifpga/p/7609442.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!