本文为原创作品,转载请注明出处
欢迎关注我的博客:http://blog.csdn.net/hit2015spring和http://www.cnblogs.com/xujianqing/
只有经过几年的准备之后,年轻的艺术家才应接触颜色,不是用颜色描述,而是作为人的情感表达手段——毕加索
彩色和光是造物主的伟大发明,这里面包含的学科和课题在一篇博文中无法全部阐明,本博文主要是介绍一下几种颜色空间,整理了各颜色空间的与RGB空间的转换公式,作为颜色空间处理的入门知识。
人类对颜色的感知是一种复杂的生理和心理现象,这一现象还远远未被完全了解,但是颜色的物理性质可以由一些实验和理论结果支持表示出来。从初中物理学就学过,一个不透明物体所表现出来的颜色,有该物体所反射的光的性质决定。如,绿叶反射波长为500~570nm的绿光。
人眼的锥状细胞是负责彩色视觉的传感器。人眼中有600~700万个锥状细胞,它们可分为3类,分别感觉红光(65%),绿光(33%),蓝光(2%),虽然比例少,但是蓝锥状细胞却对蓝光更加敏感。所以被看到的颜色就是所谓的原色红,绿,蓝的组合。
RGB颜色空间
RGB彩色模型主要是面向硬件的模型,如彩色监视器和一大类的彩色视频摄像机。这个彩色模型利用的是三原色叠加从而产生不同的颜色。但是三原色叠加并不能产生所有的颜色。这个模型为每一个颜色通道分配0~255,256个级别的灰度值,这样总共就可以产生种颜色。所有这些颜色包含在下图所示的一个正方体中,该正方体内部的每一个点都能由三个通道的坐标确定。对角线是三个分量相等的颜色,就成为一个没有颜色的灰度图。
CMY和CMYK模型
CMY模型和RGB模型具有相似的特点,它也是一种面向硬件设备(彩色打印机,复印机)的颜色模型,CMY代表青色,深红色和黄色(颜料原色)的组合。这三种颜色是RGB的二次色,用的是另一种方式定义。如青色表示用白光照射时,反射光是白光减去红光,而白光是红绿蓝光的组合。因此呢就有了RGB和CMY的转换:假设所有的颜色值归一化到(0,1)之间。
表示了青色表面不反射红光,深红色不反射绿色,纯黄色不反射蓝色。等量的颜料原色组合可以产生黑色,但是为了打印组合产生的黑色往往不会很纯,因此为了产生真正的黑色,加入了第四种颜色黑色,于是就有了CMYK模型。
HSI彩色模型
RGB彩色模型和CMY模型对硬件设备的实现是很理想的,而且RGB模型可以和人眼感受三原色的事实相匹配。但是很遗憾,这些颜色模型很难适应人对颜色的解释。HIS彩色空间正是为了适应人眼对颜色的感知和描述发展的颜色模型。它是开发基于彩色描述的图像处理方法的理想工具,这个模型利用色调(H),饱和度(S)强度(I)来描述色彩。其中HSI彩色模型和RGB彩色模型转换公式如下所示:
给定一个RGB图像,转换到HIS
此处:
饱和度如下:
强度分量:
说明:角度是以红色为起始的基准轴来度量的。
HIS到RGB空间的转换:此处HSI为归一化的值在[0,1]之间。先把H乘,把色调值还原到[0,],把H分为三个扇区进行讨论,
RG扇区:
GB扇区:
然后计算:
BR扇区:
然后计算:
到此为止HIS空间的知识完毕!一般图片都是RGB模型,上面的转换公式为我们提供了在HIS空间处理图像的工具。
在这里分享一段RGB转HSI的matlab代码
function hsi = rgb2hsi(rgb)
%RGB2HSI Converts an RGB image to HSI.
% HSI = RGB2HSI(RGB) converts an RGB image to HSI. The input image
% is assumed to be of size M-by-N-by-3, where the third dimension
% accounts for three image planes: red, green, and blue, in that
% order. If all RGB component images are equal, the HSI conversion
% is undefined. The input image can be of class double (with values
% in the range [0, 1]), uint8, or uint16.
%
% The output image, HSI, is of class double, where:
% hsi(:, :, 1) = hue image normalized to the range [0, 1] by
% dividing all angle values by 2*pi.
% hsi(:, :, 2) = saturation image, in the range [0, 1].
% hsi(:, :, 3) = intensity image, in the range [0, 1].
rgb = im2double(rgb);
r = rgb(:, :, 1);
g = rgb(:, :, 2);
b = rgb(:, :, 3);
% Implement the conversion equations.
num = 0.5*((r - g) + (r - b));
den = sqrt((r - g).^2 + (r - b).*(g - b));
theta = acos(num./(den + eps));
H = theta;
H(b > g) = 2*pi - H(b > g);
H = H/(2*pi);
num = min(min(r, g), b);
den = r + g + b;
den(den == 0) = eps;
S = 1 - 3.* num./den;
H(S == 0) = 0;
I = (r + g + b)/3;
% Combine all three results into an hsi image.
hsi = cat(3, H, S, I); %%组成HSI图片
% figure
% imshow(H);title('H空间');
% figure
% imshow(S);title('S空间');
% figure
% imshow(I);title('I空间');
a=0;
LAB空间
LAB空间也是一种以数字化的方式来描述人对色彩的的视觉感觉,与设备无关,自然界中的任何一种颜色都可以在LAB空间中表示出来,当然RGB空间中的任何一种颜色都能在LAB空间中找到对应值。LAB空间中,L表示亮度;a表示红色绿色轴,正数表示红色,负端代表绿色;b的正数代表黄色,负数代表蓝色。
从RGB到LAB空间的转换需要通过中间变量XYZ
设一张图片的RGB三个通道的值分别为(r,g,b)
1首先经过一次gamma校正,该函数是用来对图像进行非线性色调的编辑,用来提高对图像的对比度。
其中gamma函数定义为:
2计算XYZ
其中M为一个矩阵:
3计算LAB
其中
Ohta颜色空间
Ohta颜色空间是1980年Ohta 等人提出的颜色空间,该空间中三个颜色分量,I1,I2,I3,为一组正交的颜色特征集,它们也可由RGB颜色空间转换得到,三个分量各自互相独立。
利用该模型也可以对彩色图像进行分割,可以得到很好的效果(黄色的图像背景)
福利答谢大家!
感谢您阅读本篇文章,对此特别发放一个无门槛的现金红包,打开支付宝扫码领取,可以领到钱的哦!