1.RGB 适合于显示系统,却并不适合于图像处理
(1) RGB是什么?
RGB 是最常用于显示器的色彩空间,R(red)是红色通道,G(green)是绿色,B(blue)是蓝色通道。这三种颜色以不同的量进行叠加,就可以显示出五彩缤纷的色彩
(2) RGB 为何不适合于图像处理
因为在自然环境下获取的图像容易受自然光照、遮挡和阴影等情况的影响,即对亮度比较敏感,而 RGB 颜色空间的三个分量都与亮度密切相关,即只要亮度改变,三个分量都会随之相应地改变。另外,RGB 颜色空间是一种均匀性较差的颜色空间,人眼对于这三种颜色分量的敏感程度是不一样的,在单色中,人眼对红色最不敏感,蓝色最敏感,如果颜色的相似性直接用欧氏距离来度量,其结果与人眼视觉会有较大的偏差。对于某一种颜色,我们很难推测出较为精确的三个分量数值来表示。
2.HSV 颜色空间比RGB更适用于图像处理
HSV能够直观地表达颜色的色调、鲜艳程度和明暗程度,方便进行颜色的对比,它比 BGR 更容易跟踪某种颜色的物体,常用于分割指定颜色的物体。
Hue(色调、色相)
Saturation(饱和度、色彩纯净度)
Value(明度)
HSV可以用下图表示
Hue 用角度度量
,取值范围为0~360°,表示色彩信息,即所处的光谱颜色的位置
。
颜色圆环上所有的颜色都是光谱上的颜色,从红色开始按逆时针方向旋转,
Hue=0 表示红色,Hue=120 表示绿色,Hue=240 表示蓝色等等。
在 GRB中 颜色由三个值共同决定,比如黄色为即 (255,255,0);在HSV中,黄色只由一个值决定, Hue=60 即可
。
当 H u e = 60 Hue = 60 Hue=60 时,我们看看 S a t u r a t i o n Saturation Saturation 和 V a l u e Value Value的情况,这时我们获取的是:
Hue=60时的 HSV 圆柱体的半边横截面(也就是在60度角的位置切一个截面出来):如下图
其中,
水平方向(Saturation)表示饱和度
,饱和度表示颜色接近光谱色的程度。饱和度越高,说明颜色越深
;越接近光谱色,饱和度越低,说明颜色越浅,越接近白色。饱和度为0表示纯白色。取值范围为0~100%,值越大,颜色越饱和。
竖直方向(Value)表示明度
,决定颜色空间中颜色的明暗程度,明度越高,表示颜色越明亮
,范围是 0-100%。明度为0表示纯黑色(此时颜色最暗)。
可以这样理解:
在Hue一定的情况下,饱和度减小,就是往光谱色中添加白色,光谱色所占的比例也在减小,饱和度减为0,表示光谱色所占的比例为零,导致整个颜色呈现白色。
明度减小,就是往光谱色中添加黑色,光谱色所占的比例也在减小,明度减为0,表示光谱色所占的比例为零,导致整个颜色呈现黑色。
另外,还需要了解的是:
HSV 的拉伸对比度增强就是对 S 和 V 两个分量进行归一化(min-max normalize)即可,H 保持不变。
注意:在 OpenCV 中 HSV 三个分量的范围为: H = [0,179] S = [0,255] V = [0,255]
当我们采用 HSV 的图像阈值得到某一种颜色时,可以参考颜色分布表,先将 H 通道对应的颜色找到。表格中,每种颜色都对应了一个区间。
假如我们要提取图片的蓝色部分,我们就在 H 通道取 100~124,S 通道取 43~255,V 通道取 35~255,范围内的像素值变白,其余的变黑,就可以得到很好的结果。
即使明度取值 255 也不会变为全白,因为这时,这个取值是指蓝色的亮度,而不是像 RGB 一样表示颜色。饱和度同理。
3. HLS 颜色空间
HLS 和 HSV 比较类似,
HLS 指的是:hue(色相)、saturation(饱和度)、lightness(亮度)
。
关于明度和亮度, 可点击一张图看懂亮度、明度、光度、光亮度、明亮度了解
HLS 中的 L (Lightness)分量为亮度,亮度为100,表示白色,亮度为0,表示黑色;HSV 中的 V 分量为明度,明度为100,表示光谱色,明度为0,表示黑色。
提取白色物体时,使用 HLS 更方便
,因为 HSV 中的Hue里没有白色,白色需要由S和V共同决定(S=0, V=100)。而在 HLS 中,白色仅由亮度L一个分量决定
。所以检测白色时使用 HSL 颜色空间更准确。
在 OpenCV 中 HLS 三个分量的范围为: H = [0,179] L = [0,255] S = [0,255]
代码部分可参考我这个分类栏目下的文章
4. YUV
YUV 是一种彩色编码系统,主要用在视频、图形处理流水线中(pipeline)。相对于 RGB 颜色空间,设计 YUV 的目的就是为了编码、传输的方便,减少带宽占用和信息出错。人眼的视觉特点是对亮度更铭感,对位置、色彩相对来说不铭感。在视频编码系统中为了降低带宽,可以保存更多的亮度信息(luma),保存较少的色差信息(chroma)。相对于RGB,也可以节省很大的空间。
YUV(亦称YCrCb)是被欧洲电视系统所采用的一种颜色编码方法。在现代彩色电视系统中,通常采用三管彩色摄像机或彩色CCD摄影机进行取像,然后把取得的彩色图像信号经分色、分别放大校正后得到RGB,再经过矩阵变换电路得到亮度信号Y和两个色差信号R-Y(即U)、B-Y(即V),最后发送端将亮度和两个色差总共三个信号分别进行编码,用同一信道发送出去。这种色彩的表示方法就是所谓的YUV色彩空间表示。采用YUV色彩空间的重要性是它的亮度信号Y和色度信号U、V是分离的。如果只有Y信号分量而没有U、V信号分量,那么这样表示的图像就是黑白灰度图像。彩色电视采用YUV空间正是为了用亮度信号Y解决彩色电视机与黑白电视机的兼容问题,使黑白电视机也能接收彩色电视信号。
并不是每个像素点都需要包含了 Y、U、V 三个分量,根据不同的采样格式,可以每个 Y 分量都对应自己的 UV 分量,也可以几个 Y 分量共用 UV 分量。相比 RGB,能够节约不少存储空间。
参考文献:
RGB、HSV和HSL颜色空间 ~ z.defying ~ 知乎
图像切割
用色彩空间做图像处理,让颜色提取更高效