颜色空间那些事儿

时间:2021-12-03 16:18:33

本文为原创作品,转载请注明出处

欢迎关注我的博客:http://blog.csdn.net/hit2015springhttp://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颜色空间转换得到,三个分量各自互相独立。

颜色空间那些事儿

利用该模型也可以对彩色图像进行分割,可以得到很好的效果(黄色的图像背景)


福利答谢大家!

感谢您阅读本篇文章,对此特别发放一个无门槛的现金红包,打开支付宝扫码领取,可以领到钱的哦!

颜色空间那些事儿