图像处理基础(像素、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最重要的特性。;、
三、
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最重要的特性。;、
三、
相关文章推荐
- 图像处理之基础---用Shader实现的YUV到RGB转换:使用3重纹理实现 .
- 图像处理之基础---yuv420及其rgb,bayer, yuv, RGB的相互转换详解
- 图像处理之基础---滤波器之高斯低通滤波器3c代码实现yuv,rgb
- 数字图像处理 颜色空间RGB、HSI、CMYK、YUV的相互转换
- 【VS开发】【图像处理】 bayer, yuv, RGB转换方法
- 获取RGB图像的单个点的数据-视频处理基础(1)
- Atitit.java图片图像处理attilax总结 BufferedImage extends java.awt.Image获取图像像素点image.getRGB(i, lineIndex); 图片剪辑/AtiPlatf_cms/src/com/attilax/img/imgx.javacutImage图片处理titit 判断判断一张图片是否包含另一张小图片 atitit 图片去噪算法的原理与
- 图像处理基础知识像素高宽分辨率
- 视频图像处理基础知识5(RGB与Ycbcr相互转换公式 )【转】
- 视频图像处理基础知识5(RGB与Ycbcr相互转换公式 )
- 【图像处理】RGB转YUV 优化
- 图像处理基础(一)_图像的像素是什么?
- 【图像-视频处理】YUV420、YV12与RGB24的转换公式
- 图像处理基础(五)_图像像素中通道概念解析
- 【数字图像处理】YUV420转RGB并BMP存储<纯C++实现>
- 使用 Java 进行图像处理 - 取得图像上指定位置像素的 rgb 颜色分量
- 使用 Java 进行图像处理 - 取得图像上指定位置像素的 rgb 颜色分量
- 【图像处理与医学图像处理】YUV与RGB格式转换速度几种方法对比
- 图像处理基础(五)-ffmpeg YUV转化为JPEG并保存
- 图像处理之基础---2个YUV视频 拼接技术