您的位置:首页 > 其它

图像处理基础(像素、RGB、YUV etc.)的那点小事

2013-08-23 22:20 344 查看
为了方便记录,以下名词等价: 

1、色彩空间==颜色空间==色域==表示颜色的模型或方法

2、采样方式==(图像)信息元素的记录方式==数据结构中信息的记录方式

一、像素到底是什么? 像素是用来描述图像信息元素的数据结构

  如果把一张图片看成是一堆信息元素的集合,那么为了描述一张图片,我们要先建模,用一个数据结构来表示信息元素。从而,建模后图像就成了一堆数据结构(结构体)的集合,现在给这种数据结构起个名字就叫像素;所以像素不是一个具体的物理量,它仅仅是一个抽象的数据结构。

二、在像素这种数据结构中可以记录颜色信息(因为图像就是由不同颜色组成的),如果用RGB颜色空间来表示颜色,那么一个像素又要分成 红、绿、蓝 3个子像素(或者叫3个分量)。如果用YUV这种颜色空间来表示颜色,又可以分成 Y(亮度--luminance)、UV(色度也叫色差,色度又被分成两个独立信号存储,U (Cb--蓝色,其值==Cb-Y)、 V(Cr --红色,其值==Cr --Y))。

1、在这里有必要解释下YUV了,如果说RGB是通过3原色的组合来表示颜色那么YUV是如何表示颜色的呢?答案是---通过亮度和色差来表示(亮度是黑--白信号,色度是色彩信号)

  科学发现,人们对亮度的敏感程度要强于对色度的敏感程度。所以基于这个原理,我们在存储像素的时候,就多存储亮度,少存储色度从而减少存储空间。

  YUV 有3中采样方式 YUV444,YUV422,YUV420

  如果用手画这3中采样方式,可以是Y用方括号表示,UV看成一个整体,画成在Y里面的一个圈。所以eg444,就画4个方框(Y)再在每个方框里面画一个圈

  (1) YUV444 记录4个亮度就要分别再记录4个U和4个V

  


图中,背景(黑白相间的那个)表示亮度,画画绿绿的那个表示色度
  这种存储方式,主要是为了保证画面的质量(防止在处理过程中画质降低)。
  
  现采集四个像素,他们的数据结构分别是: [Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]
 存放的码流为: Y0 U0 V0 Y1 U1 V1 Y2 U2 V2 Y3 U3 V3

  (2)YUV422 ,两个亮度共享一个色度
  


  大多数人分辨不出444和422的区别。
  同样,采集4个像素,他们数据结构中的3个分量分别是:[Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]

  根据相邻2个像素共享一个UV色度对的原则,存放的码流是:Y0 U0 Y1 V1 Y2 U2 Y3 V3

  对码流再映射(重新构造像素),得到的像素是:[Y0 U0 V1] [Y1 U0 V1] [Y2 U2 V3] [Y3 U2 V3]

  (3)YUV411 , 原谅找不到他的图片,但其实很简单,411 和 420 可以联想记忆,

   420 是2*2 个像素公用一个UV ,而411 是 水平方向上连续4个像素公用一个UV

  对于4个像素 [Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]

  411 采用“夹三明治法”,两个亮度Y之间夹一个色度(U或V),U,V交替采集、先U后V,4个Y共用一个UV

  所以存放码流是: Y0 U0 Y1 Y2 V2 Y3

   再映射后:[Y0 U0 V2] [Y1 U0 V2] [Y2 U0 V2] [Y3 U0 V2]

  (4)YUV420
  注意,虽然Y、U、V的比是420,表面上看好像应该是4个Y,2个U和0个V,既V一个都不取,但事实上完全不是这个样子。

  它实际指得是对每行扫描线来说,只取一种色度分量(先U后V),且色度分量和亮度的比例是2:1,既遂平方向上2个Y共用一个U或V。相邻的扫描行存储不同的色度分量,也就是说,如果一行是4:2:0的话,下一行就是4:0:2,再下一行是4:2:0...以此类推

  


  扫描线:
  


  采集8个像素,
  [Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3]
  [Y4 U4 V4] [Y5 U5 V5] [Y6 U6 V6] [Y7 U7 V7]
 存放码流: 
  Y0 U0 Y1 Y2 U2 Y3
  Y4 V4  Y5 Y6 V 6 Y7
 再映射:

[Y0 U0 V4] [Y1 U0 V4] [Y2 U2 V6] [Y3 U2 V6]
[Y5 U0 V4] [Y6 U0 V4] [Y7U2 V6] [Y8 U2 V6]

//-----------------------------------------------------------------


  好了,YUV的格式就差不多讲到这里,另外还有一点,将YUV数据显示出来(由软件或硬件处理)是需要将数据进一步处理的--既格式包装
  YUV的格式包装有两种方式:a、packed format  打包格式  b、planar format 平面格式
  a、packed format ,表示将Y和UV封装在一起打成一个包,具体实现就是存放在一个数组中。YUY2就是打包格式,它的YUV比是422
  b、planar format ,表示将Y、U、V 分别封装打包,形成3个plane(平面),具体实现就是分别存在3个数组中。YV12是平面格式,它的YUV比是420
  2、比较不同色彩空间(只有通过比较才会知道为什么要有这么多的色彩表示方式)
  (1)RGB,RGB色彩空间是面向硬件的,一般设备采集到的像素中的颜色信息就是通过分成R、G、B来保存的。RGB 图像占的存储空间大,所以它适合显示系统,不适合图像处理。
    另外,RGB颜色由于是对真实食物的直接采样,所以图像会受到光照、阴影等因素影响,同时RGB空间,色度(红绿蓝)要受亮度的影响,如果亮度改变,色度都会改变;
   还有,RGP图像的传输需要同时3个信道分别来传输R\G\B3个信号,这样才能在另一端呈像

  (2)YUV,在这种格式中,Y\U\V是分别编码和存储的,所以可以使用分时的方法在一个信道上传输,这也是YUV最重要的特性。;、

三、
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐