之前有提到图像色彩空间转换函数: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通道图:
- 优点
较其他颜色空间,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通道图:
HSV 颜色模型
- 色调H
用角度度量,取值范围为0°~360°,从红色开始按逆时针方向计算,红色为0°,绿色为120°,蓝色为240°。它们的补色是:黄色为60°,青色为180°,品红为300°。 - 饱和度
饱和度S表示颜色接近光谱色的程度。一种颜色,可以看成是某种光谱色与白色混合的结果。其中光谱色所占的比例愈大,颜色接近光谱色的程度就愈高,颜色的饱和度也就愈高。饱和度高,颜色则深而艳。光谱色的白光成分为0,饱和度达到最高。通常取值范围为0%~100%,值越大,颜色越饱和。 - 明度V
表示颜色明亮的程度,对于光源色,明度值与发光体的光亮度有关;对于物体色,此值和物体的透射比或反射比有关。通常取值范围为0%(黑)到100%(白)。
HSV空间是由RGB空间演变过来的,RGB空间在几何上是一个正方体,而当你从正方体的一个顶点看向离它最远的另一个顶点时,就会看到一个六角锥体,这就是HSV空间的几何表达,如下图:
通常,我们会把顶上的这个六边形近似成一个圆,就变成了一个圆锥,像这样:
HSV三个轴的走动方向也在图上标出了,可以理解为一个有深度的极坐标系,我们只看Hue轴,沿着圆周方向走,可以看到每转动一定的角度,所表示的颜色就变了,而且不止红绿蓝,事实上这对应了我们认知上的所有颜色,因此,使用HSV空间的好处就是只要一个维度我们就能表示物体本来的颜色。S维度表示饱和度,更通俗的说,是打在物体上的白灯的亮度,比如你在黑夜中用手电筒照着个苹果,电量足够的话苹果看上去当然是正常的红色,电量不够也许看上去是暗红色,关掉手电也就啥都看不到黑漆漆一片了,这就是S维度的信息。V维度表示了一种物体自身的材质信息,是不是透明的,透明度有多少,同样拿照苹果这个例子,如果现在这个苹果换成了水晶苹果,灯光打上去以后看到的颜色也是不一样的,即使当初涂的颜色跟真实的苹果颜色一样,这是由于一些漫反射和折射造成的。
HSV的值域跟RGB的并不一样,其中H维度的值域是0-180,其他两个维度都是0-255,H不取到0-360也许是因为超过了uchar的范围。
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