我最近一直在颜色空间中纠结,前面讲的透明不透明只是一种特殊的颜色。今天我准备要讲的是真正的修正颜色。我们使用的数码相机有不同的型号,感光的CCD性能也是不一样的,再加上天气或者周围光线的原因,我们排出来的照片可能会偏色。此外,为了做一些特殊处理,可能需要将照片中某一个特殊的区域颜色进行修正。比如脸色可以变得更好一点,或者头发更黑一点等等。这个Topic很大,我会花好几个星期来讲这些内容,因为涉及到许多图像处理的基本知识。今天咱们不写code,只讲理论。
在之前的分析中,相信所有的人都知道R,G,B是什么东西了。我们在描述色彩的时候,最常用的就是用RGB色彩空间。通过描述颜色的三个不同的分量,我们可以记录某个像素的颜色值。我们在此不涉及设备色彩空间的概念,但是有一点需要大家记住的,(0,0,0)并不代表全黑,(255,255,255)也并不代表全白,在不同的设备上,显示出的内容是不完全一样的。这个问题的解决需要依靠我之前讲的ICM(http://www.color.org/)。如果要加上透明,那就是四维的空间,(A,R,G,B)。各个分量可以被量化为不同的级别,所以才造成了8位色,16位色等等,这种量化级别可以区分各种不同的颜色,直到人眼无法察觉的程度。所以对一个初学者来说,不透明的颜色就是个Cube,在一个三维空间中的一个点。如下图
图 1 色彩空间立方体
这个图很好看吧,只是很可惜,这只是对颜色描述的一种最简单的方式,它所能描述颜色内容是极其有限的,也不精确。要彻底理解这个问题,我要帮大家分析什么光的原理,颜色的波长,材料的对不同波长光的吸收和反射或者漫反射。这里我就不多说了,有兴趣的同学去找物理系光学专业的老师好好问问,人家一辈子都研究着这个问题。更有兴趣的同学可以去问问物理系的大教授讨论一下光的波粒二象性,再研究一下人眼对光的感受,再研究不同材料表面对光的反应,再研究……,打住了~!再研究下去您这辈子就结束了,所以只要简单地理解颜色就是RGB就好了。IT民工能理解到这个程度已经很不错了。
这里再给大家看个有趣的图,表示的是一个色彩空间叫sRGB能描述的颜色,灰色区域是人眼可以感知的颜色,里面的那个三角就是sRGB色彩空间能描述的颜色。还有一点要注意的是RGB色彩空间只是描述颜色的一种手段。具体还可以参考Wikipedia: http://en.wikipedia.org/wiki/RGB
图 2 RGB色彩空间
RGB色彩空间并不是唯一的能用来描述色彩的方法,它是最简单的一种。如果你需要修改图像区域的R,G,B分量,以及亮度,对比度分量。那么使用这种色彩空间是最简单的。但是如果你想修正色度(hue),饱和度(Saturation),那么这种色彩空间就不是那么简单了,要经过一定的换算。色彩空间有很多种,比如RGBA,包括透明的RGB四维空间;CMYK:主要用于印刷业;YIQ/YUV:主要用于NTSC/PAL彩色电视制式系统;YPbPr/YCrBr:主要用于视频压缩等领域。HSB/HSV/HSL,这是一个非常常用的色彩空间,描述色度,饱和度和亮度,这个色彩空间我们会在下一节详细讲,它是RGB色彩空间的一种变形。