多数的数字视频应用需要播放彩色的视频信号,所以需要捕获和重现颜色信息。一幅黑白图像的每一个采样点只需要一个像素表示明暗或亮度,而在彩色图像中至少需要3个像素来表示每个像素的色彩。表示亮度和色彩的不同方法,由不同的色彩空间确定。

RGB色度空间

在RGB彩色空间,彩色图像中用3个数来表示红、蓝、绿三种颜色的比例(光的三原色)。任何其他色彩都可以由这三种颜色的不同比例的混合构成。在RGB色彩空间,可以方便地对彩色图像进行捕获和显示。在捕捉图像的时候,首先要把场景中红蓝绿三种色彩分量提取出来,每一种分量单独使用一组传感器。色彩在阴极射线管显示器(CRT)和液晶显示器(LCD)中显示的时候,分别按照红蓝绿3种分量的强度显示每一个像素。当人们从一定距离观看时,独立的色彩分量相互混色就产生“真实的彩色”。

YCbCr色度空间

人类视觉系统(HVS,human vision system)对色度的敏感程度低于亮度。而在RGB色彩空间里,3种颜色分量的重要性相同,所以必须以相同的度量来存储它们,但事实上我们可以通过提高亮度的精度,降低色度的精度来更有效的表示颜色图像。

通常,YCbCr色彩空间和它的变形(YUV色彩空间)是用于有效表示彩色图像的对色彩空间度量的方法。Y指亮度(Luma),是不同权重的R,G,B的平均:

Y=krR+kgG+kbB                             (1)

k是权重。

色彩信息可以表示为色差(Chroma),每一个色差表示了RGB与Y的差:

Cb=B-Y

Cr=R-Y                                          (2)

Cg=G-Y                    

这样彩色图像的完整信息——亮度和色差就由Y和Cb,Cr,Cg分别给出了。

至此,这样的颜色空间并没有表现出明显的优点,因为处理后有四个分量,而RGB中只有三个色彩分量。但是,因为Cb+Cr+Cg是一个常数,所有我们只需要存储或传输其中的两个,第三个可以计算出来。在YCbCr空间,只有亮度和蓝色、红色的色差传输。YCbCr相对RGB而言有一个重大的优点,就是我们可以用比Y更低的分辨率来存储CbCr,因为人类视觉系统对色度敏感程度低于亮度。这样可以减少大量数据的同时对视觉质量没有明显的影响。对于普通的观察者,RGB图像与降低CbCr分辨率的YCbCr图像没有什么区别,所以这也是图像压缩中简单而有效的方式之一。

Y=krR+(1-kb-kr)G+kbB                                                      

Cb=(0.5/(1-kb)) (B-Y)                                                    (3)

Cr=(0.5/(1-kr)) (R-Y)                                                         


R=Y+((1-kr)/0.5) Cr                                                           

G=Y-(2Kb(1-Kb)/(1-kb-kr)) Cb-(2Kr(1-Kr)/(1-kb-kr)) Cr     (4)

B=Y+((1-kb)/0.5) Cb                                                          

得到RGB的图像之后,将现有的RGB图像转换成YCbCr图像是为了减少存储或传输数量,在显示图像之前,通常还要再转换成RGB。公式(3)和(4)给出了变换和逆变换的公式。注意系数kg并不存在(因为kb+kg+kr=1),G可以由Y减去Cb,Cr得到,这也说明了Cg分量是不需要保存或传输的。

ITU-R推荐的BT.601中定义kb=0.114,kr=0.299。代入以上的公式就得到下面的转换公式:

       Y=0.299R+0.587G+0.114B

      Cb=0.564(B-Y)                                          (5)      

Cr=0.713(R-Y)                                              


R=Y+1.402Cr                                                

G=Y-0.344Cb-0.714Cr                              (6)

B=Y+1.772Cb                                                

YCbCr的采样格式

1. 4:4:4采样是指每一分量(Y,Cb,Cr)都有相同的分辨率,因为都在所有的像素位置上进行了采样。数字表示的是每一部分在水平方向上的相对采样频率。4:4:4就是指每四个亮度点对应4个Cb和4个Cr。4:4:4采样保留了所有的色差分量。

2. 4:2:2采样格式中(有时又叫YUV2),色差在垂直方向的分辨率与亮度相同,而水平方向只有一半,每四个亮度点对应2个Cb和2个Cr。

3. 4:2:0,即水平方向和垂直方向上Cb,Cr的分辨率都只有亮度的一半。

4:2:0采样有时也被称为“12比特每像素”。例如对于每四个像素点来看,如果使用4:4:4采样则共有12个采样点,Y、Cb、Cr各有四个,一共需要12*8=96比特,平均每个像素96/4=24比特。而使用4:2:0采样,只有6个采样点,Y四个,Cb、Cr各一个,一共需要6*8=48比特,每个像素48/4=12比特。

end。

“生命的终结不是死亡,而是被所爱的人遗忘。”

最新文章

  1. HTML基础篇之知识点补充和拓展
  2. Android Fragment使用(三) Activity, Fragment, WebView的状态保存和恢复
  3. (转) Graph-powered Machine Learning at Google
  4. WebService 基本操作
  5. iOS之多控制器管理--项目中的常见文件
  6. 字符编解码的故事(ASCII,ANSI,Unicode,Utf-8区别)
  7. eclipse字体颜色设置
  8. Card Collector(HDU 4336)
  9. Solr特殊字符转义处理
  10. Sina App Engine(SAE)入门教程(4)- SaeVCode(验证码服务)使用
  11. Qt-获取网络接口信息的综合示例
  12. STL源代码分析——STL算法merge合并算法
  13. PostScript学习:另一种缩写为PS的技术
  14. svn的使用技巧
  15. [Docker] 使用 Dockerfile 的多级构建 (multi-stage builds)
  16. Java Spring MVC 错误 及 常见问题 总结
  17. centos时区设置
  18. python3 print函数的用法
  19. 完美实现Android的屏幕常亮功能
  20. InnoDB逻辑存储结构

热门文章

  1. Hyper-V 搭建独臂路由器(单网卡也可以)
  2. Dynamics 365 CRM Connected Field Service 不能接收IoT Alert
  3. [总结]ACM模拟总结
  4. Python zmq的三种简单模式
  5. c++中多文件的组织
  6. Java 中的运算符和流程控制
  7. 20190710双人开黑CF模拟赛
  8. C语言系列之自增自减运算符的用法(二)
  9. 严重 [RMI TCP Connection(3)-127.0.0.1]
  10. 全局对象的构造函数会在main函数之前执行?