登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

面包会有的

... ...

 
 
 

日志

 
 

我理解中的YUV  

2011-06-07 15:06:25|  分类: 色彩空间YUVRGB |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

常用的图像表示为RGB

其中R、G、B,都是从0至255,比如白色的RGB(255,255,255),黑色RGB(0,0,0),为了表示0至255,就需要用八个二进制位,因为每个位的状态(用排列组合的说法就是可能性)只有二种(有信号或无信号/或者是0/1),八个二进制位排列组合的可能性最多为256种,因为计算机中一般都是从零开始索引,所以取值范围为0到255。

八个二进制位,即8个bit,定义为1字节,所以一个象素的R、G、B一共需要3字节来表示。

1024*268(这是我们常用的一个显示器分辨率)的屏幕,我们将屏幕保存下来的话,如果不压缩,要保存全部的像素值,就需要:

1024*768                      = 786432     像素

786432*3字节/像素       = 2359296   字节

2359296字节*8位/字节 = 18874368 位

换算成我们常用的MB(兆字节):

10074368位/(8位/字节)/(1024字节/K)/(1024k/M)=2.25M

上面只是为了体会YUV,复习一下RGB来理一下思路,可能计算的会不正确,呵呵。

 

RGB表示图象,是用R、G、B进行叠加来还原像素点的。下面是网上搜的标准介绍:

RGB色彩模式(也翻译为“红绿蓝”,比较少用)是工业界的一种颜色标准,是通过对红(R)、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB即是代表红、绿、蓝三个通道的颜色,这个标准几乎包括了人类视力所能感知的所有颜色,是目前运用最广的颜色系统之一。

色彩能够还原的原理具体怎么回事,始终感觉不是很了解,虽然看了很多文章,还是没什么体会,反正最后觉得,同一个目标,可以有很多种途径实现,比如为了让人们最终看到形形色色的色彩图案,除了RGB来表示,还有YUV。

问:YUV能表示多少种颜色,应该没有RGB多吧?

答:YUV和RGB能表示的颜色种类,是同样多!

因为,YUV的取值是来源于RGB的,这个表示的总颜色种类是一样的,不同在于,对于同一幅图像来说,用RGB表示的原图的总颜色数,一般会比用YUV转换后表示的颜色数要多,也就是说YUV转换后,一般来说会引起颜色数的丢失,只是这个丢失对肉眼来说不怎么明显,视觉效果不会出现太明显的下降罢了。

 下面看一下网上常见的YUV的一段说明文字:

其中“Y”表示明亮度(Luminance或Luma),也就是灰阶值;而“U”和“V” 表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。“亮度”是透过RGB输入信号来建立的,方法是将RGB信号的特定部分叠加到一起。“色度”则定义了颜色的两个方面─色调与饱和度,分别用Cr和Cb来表示。其中,Cr反映了RGB输入信号红色部分与RGB信号亮度值之间的差异。而Cb反映的是RGB输入信号蓝色部分与RGB信号亮度值之间的差异。

从里面可以看到,RGB图像是没有亮度这个概念的,象我们平时用photoshop画图时,指定颜色的时候,直接输入R、G、B的值,确实是从来没有遇到过输入亮度值,而YUV的一个很大的特点就是亮度与颜色的分离,那么将RGB图转为YUV图时,这个凭空多出来的东西从哪里得来呢,这在上面的“亮度是透过RGB输入信号来建立的,方法是将RGB信号的特定部分叠加到一起。”这句话交待了,这个转换其实是有一个公式的,Y=x**R+X**G+X**B(意思一下,不是什么计算等式,表示Y由RGB分量计算,我独创的,呵呵)。下面会把这个具体的公式放出来,当然也是从网上来的。

看过《数字图像处理》类的书,当把图片读入内存时,比如BMP,抛开文件头和位图信息头,颜色表(或叫调色板),就能取到图像数据(如果有调色板,对应的就是调色板的颜色的索引),我们可以用代码依次的取到每一个像素点的RGB值,甚至是每个点的R分量、G分量和B分量值,当要转换成YUV时,利用公式和取到的R、G、B值,及特定的取样(策略),就可以完成从RGB到YUV的转换。

 网上还有一种说法:

yuv色彩模型来源于rgb模型,
该模型的特点是将亮度和色度分离开,从而适合于图像处理领域。

 第一个公式是YUV转换RGB(范围0-255)时用的,第二个公式是用在YUV(601)也成为YCbCr转换RGB(范围0-255)时用的。

1.

YCbCr与RGB的相互转换

RGB->YCbCr:

  Y=0.299R+0.587G+0.114B

  Cb=0.564(B-Y)

  Cr=0.713(R-Y)

YCbCr->RGB:

  R=Y+1.402Cr

  G=Y-0.344Cb-0.714Cr

  B=Y+1.772Cb
这只是YUV中的一种格式,YUV4:2:0与RGB的转换,实际上YUV有好多种,根据它的不同采样率和采样方式,有不同的格式。网上常提到的有YUV 4:4:4,YUV 4:2:2,YUV 4:1:1,YUV4:2:0;

YUV的表示法称为 A:B:C 表示法: 
   
   * 4:4:4 表示完全取样。 
   * 4:2:2 表示 2:1 的水平取样,没有垂直下采样。 
   * 4:2:0 表示 2:1 的水平取样,2:1 的垂直下采样。 
   * 4:1:1 表示 4:1 的水平取样,没有垂直下采样。 


个人的理解

4:4:4,表示四个像素点中,每个像素点都要取各自的Y、U、V值,也就是对每个像素的R、G、B都调用公式计算出一组Y、U、V。

4:2:2,水平方向,每两个像素取一个UV,至于是根据左边的像素的R、G、B计算Y、U、V,还是根据右边的呢?就不知道了。

4:2:0,水平的两个像素中取一次样,垂直的像素中,每两个像素取一次样;

4:1:1,水平方向,每四个像素取一次样,同样有个问题,Y、U、V的计算依据四个点中的哪个呀,现在还不清楚;

不管怎么样,大概是知道这么一回事了,就是亮度值呢,是每个像素都必须取的,或者说,原图片有100(宽)*80(高),转成YUV后,仍然是这个宽和高,像素点的总数和排列并没有改变。但是,YUV有个有意思的地方,是一个像素对应一个Y亮度,但是除了4:4:4的外,其它都是几个像素点共用一对U、V值。


 

  评论这张
 
阅读(896)| 评论(0)

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018