之前有提到图像色彩空间转换函数:OpenCV–003_1: 图像色彩空间转换


  • 图像通道:
    一张图片是一个数值矩阵,如果有n个通道,这个数值矩阵可以被分解成n个同样大小的数值矩阵的和.

RGB 色彩空间

  • 屏幕上显示的图片就是RGB的色彩空间
  • 来源与使用阴极射线管(CRT)的彩色电视
  • R - red
  • G - green
  • B - blue
    一个原图:

    图像分成3通道:

这三张图片如果叠放在一起,就是最上面的那么图片。这三张图片就是用三个通道,通道的衡量不一样,效果也不一样。所以这也是为什么会有其他色彩空间的原因。

RGBA色彩空间

  • RGBA是代表Red(红色)Green(绿色)Blue(蓝色)和Alpha的色彩空间。
  • 虽然它有的时候被描述为一个颜色空间,但是它其实仅仅是RGB模型的附加了额外的信息。采用的颜色是RGB,可以属于任何一种RGB颜色空间。
  • alpha通道一般用作不透明度参数
  • 如果一个像素的alpha通道数值为0%,那它就是完全透明的(也就是看不见的),而数值为100%则意味着一个完全不透明的像素(传统的数字图像)。在0%和100%之间的值则使得像素可以透过背景显示出来,就像透过玻璃(半透明性),这种效果是简单的二元透明性(透明或不透明)做不到的。它使数码合成变得容易。alpha通道值可以用百分比、整数或者像RGB参数那样用0到1的实数表示
  • 有时它也被写成ARGB(像RGBA一样,但是第一个数据是alpha)。
  • PNG是一种使用RGBA的图像格式

YIQ 色彩空间

  • 是NTSC(National Television Standards Committee)电视系统标准。
  • Y是提供黑白电视及彩色电视的亮度信号(Luminance),即亮度(Brightness)。
  • I代表In-phase,色彩从橙色到青色。
  • Q代表Quadrature-phase,色彩从紫色到黄绿色。

    Y通道提供了单色显示所需要的全部的信息,充分利用人眼的特性,因为人眼对于亮度是非常敏感的,亮度代表了觉察到的光的能量。

下图分别是原图,Y,I,Q通道图:

android rgba 转图片 rgba转rgb_灰度

  • 优点
    较其他颜色空间,YIQ颜色空间具有能将图像中的亮度分量分离提取出来的优点,并且YIQ颜色空间与RGB颜色空间之间是线性变换的关系,计算量小,聚类特性也比较好,可以适应光照强度不断变化的场合,因此能够有效地用于彩色图像处理。可用于在自然条件下采集到的复杂背景下的运动目标的识别

YUV 色彩空间

  • 其中YUV和Y’UV通常用来编码电视的模拟信号,而YCbCr则是用来描述数字的视频信号,适合视频与图片压缩以及传输,例如MPEG、JPEG。但在现今,YUV通常已经在电脑系统上广泛使用。
  • Y’UV, YUV, YCbCr,YPbPr等专有名词都可以称为YUV,彼此有重叠。
  • “Y”表示明亮度(Luminance或Luma),也就是灰阶值。
  • “U”和“V”表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。
  • YUVFormats分成两个格式:
    紧缩格式(packedformats):将Y、U、V值存储成MacroPixels数组,和RGB的存放方式类似。
    平面格式(planarformats):将Y、U、V的三个分量分别存放在不同的矩阵中。

紧缩格式(packedformat)中的YUV是混合在一起的,对于YUV4:4:4格式而言,用紧缩格式很合适的,因此就有了UYVY、YUYV等。


平面格式(planarformats)是指每Y分量,U分量和V分量都是以独立的平面组织的,也就是说所有的U分量必须在Y分量后面,而V分量在所有的U分量后面,此一格式适用于采样(subsample)。平面格式(planarformat)有I420(4:2:0)、YV12、IYUV等。



下图分别是原图,Y,I,Q通道图:

android rgba 转图片 rgba转rgb_色彩空间_02


HSV 颜色模型

  • 色调H
    用角度度量,取值范围为0°~360°,从红色开始按逆时针方向计算,红色为0°,绿色为120°,蓝色为240°。它们的补色是:黄色为60°,青色为180°,品红为300°。
  • 饱和度
    饱和度S表示颜色接近光谱色的程度。一种颜色,可以看成是某种光谱色与白色混合的结果。其中光谱色所占的比例愈大,颜色接近光谱色的程度就愈高,颜色的饱和度也就愈高。饱和度高,颜色则深而艳。光谱色的白光成分为0,饱和度达到最高。通常取值范围为0%~100%,值越大,颜色越饱和。
  • 明度V
    表示颜色明亮的程度,对于光源色,明度值与发光体的光亮度有关;对于物体色,此值和物体的透射比或反射比有关。通常取值范围为0%(黑)到100%(白)。

HSV空间是由RGB空间演变过来的,RGB空间在几何上是一个正方体,而当你从正方体的一个顶点看向离它最远的另一个顶点时,就会看到一个六角锥体,这就是HSV空间的几何表达,如下图:



android rgba 转图片 rgba转rgb_android rgba 转图片_03


通常,我们会把顶上的这个六边形近似成一个圆,就变成了一个圆锥,像这样:

android rgba 转图片 rgba转rgb_android rgba 转图片_04


HSV三个轴的走动方向也在图上标出了,可以理解为一个有深度的极坐标系,我们只看Hue轴,沿着圆周方向走,可以看到每转动一定的角度,所表示的颜色就变了,而且不止红绿蓝,事实上这对应了我们认知上的所有颜色,因此,使用HSV空间的好处就是只要一个维度我们就能表示物体本来的颜色。S维度表示饱和度,更通俗的说,是打在物体上的白灯的亮度,比如你在黑夜中用手电筒照着个苹果,电量足够的话苹果看上去当然是正常的红色,电量不够也许看上去是暗红色,关掉手电也就啥都看不到黑漆漆一片了,这就是S维度的信息。V维度表示了一种物体自身的材质信息,是不是透明的,透明度有多少,同样拿照苹果这个例子,如果现在这个苹果换成了水晶苹果,灯光打上去以后看到的颜色也是不一样的,即使当初涂的颜色跟真实的苹果颜色一样,这是由于一些漫反射和折射造成的。

HSV的值域跟RGB的并不一样,其中H维度的值域是0-180,其他两个维度都是0-255,H不取到0-360也许是因为超过了uchar的范围。

android rgba 转图片 rgba转rgb_色彩空间_05


RGB转灰度

RGB是三通道,而灰度只有一个通道。因此RGB转换成灰度的过程就是:将三通道融合到一通道。
即:


Gray=aR+bG+c*B(a+b+c=1)


OpenCV中有自带的转换灰度的函数cvtColor

cvtColor(color, COLOR_BGR2GRAY)

人眼对三原色的“偏好”是不一样的,研究表明人眼对红绿蓝的权重接近3:6:1,更精确的,对于上面的公式,a=0.299,b=0.587,c=0.114,这就是通常所说的心理学模型。
在OpenCV中,为了减少浮点运算(浮点运算在一般的CPU中很耗时),使用了类似下面的转换方式

gray=299 R+587G+114*B