颜色空间模型(HSV\LAB\RGB\CMYK)
通过Photoshop的拾色器,我们知道表征颜色的模型的不止一种,本文将系统并且详细讨论这四种模型(HSV、LAB、RGB和CMYK)之间的联系以及应用。
本文部分章节整合了多位优秀博主的博客(链接见本文末尾),并对其表示感谢。文章中模型转换使用的是C式伪代码而不是数学公式,这样更便于编程人士理解。
图1.Photoshop cc的拾色器
数字图像处理中,最常用的使用也是最容易理解的是RGB模型,常用于颜色显示和图像处理,是三维坐标的模型形式。
下面先介绍RGB模型(图1),该模型可以使用vec3(r, g, b)表示,相当于三维直角坐标系,x、y、z轴相当于红、绿、蓝三通道,原点vec3(0.0, 0.0, 0.0)代表黑色,顶点vec3(1.0, 1.0, 1.0)代表白色,原点到顶点的中轴线x = y = z代表灰度线。
图2.RGB模型
图3.RGB模型解析
用RGB模型表征色彩、深浅、明暗变化的方法是:
色彩变化:三个轴RGB的最大分量顶点与黄紫青(YMC)色顶点的连线;
深浅变化:RGB顶点与CMY顶点到中轴线(原点和顶点的连线)的距离;
明暗变化:中轴线上的点的位置。离远点近偏暗,反之偏亮。
自然界中7色光都是单色光,都有自己独特的光谱特征。之所以使用RGB能混合成其他颜色的光,是因为人类的感官系统导致的,与人类的生理系统有关。可以说:将RGB以不同的比例混合后,人的眼睛可以形成与其他各种频率的可见光等效的色觉,所以才采用RGB作为三原色。
通过对RGB模型的讲解,我们了解到虽然RGB用来表示颜色方便,但相近的两个颜色其值相差可能较大。可以说RGB模型适用于计算机表示,而接下来讲解的HSV模型(Hue色相、Saturation饱和度、Value/Brightness亮度,也叫HSB)模型更适合人类习惯。
HSV模型可以使用倒锥形模型表示(图2)。模型中H表示色彩信息,即光谱颜色所在的位置,该参数用角度来表示,红、绿、蓝分别相隔120°,互补色(CMY)分别相差180°。纯度S是一个比例值,范围[0, 1],表示所选颜色的纯度和该颜色最大的纯度之间的比率,当S = 0时,代表灰度。V表示色彩的明亮程度,范围[0, 1],与光强度无直接关系。
图4.HSV模型
图5.HSV模型解析
HSV对人类来说是一种最直观的颜色模型,我们指定彩色角H,并使V = S = 1.0,然后通过添加黑色或者白色得到目标颜色。增加黑色可以减小V而S不变,这样减小了该颜色亮度;同样增加白色可以减小S而V不变,这样增加了颜色亮度。例如深蓝色(240°, 1.0, 0.4),浅蓝色(240°, 0.4, 1.0)[百度百科]。
一般的,人的眼睛最大能区分128种色彩,130种饱和度和23种明暗度。若仅使用16bits表示HSV值的话,可用7位存放H,4位存放S,5位存放V,即H7S4V5或者H6S5V5就能满足需求。
HSV可用于颜色分割:用H和S表示颜色距离。Androutsos等人同过实验,对HSV颜色空间模型进行大致划分,V > 75% && S > 20%为亮彩色区域,V < 25%为黑色区域,V > 75% && S < 20%为白色区域,其他为彩色区域。对于不同的彩色区域,混合H与S变量,根据划定的阈值就可以进行简单的颜色分割。
《Improving shadow suppression in moving object detection with HSV color information》(基于HSV的去阴影算法)
HSV模型不适合在使用光照的模型中,大部分光线混合运算、光强度运算都无法直接使用HSV模型来实现。
RGB与HSV模型互转(伪代码表示)
取值范围:
R, G, B: [0.0, 1.0] // RGB 0 - 255
H: [0, 2π] // H: [0, 360]
S, V: [0.0, 1.0] // S、V: [0, 100]%
1.RGB to HSV:
float maxValue = max(R, G, B);
float minValue = min(R, G, B);
V = maxValue;
S = (V != 0) ? 1.0 - minValue / maxValue : 0.0;
if (maxValue == minValue)
// undefined, throw error or return valid value.
if (R == maxValue && G >= B)
H = π/3 * (G - B) / (maxValue - minValue) + 0; // H = 60 * (G - B) / (maxValue - minValue) + 0;
if (R == maxValue && G < B)
H = π/3 * (G - B) / (maxValue - minValue) + 2π; // H = 60 * (G - B) / (maxValue - minValue) + 360;
if (G == maxValue)
H = π/3 * (B - R) / (maxValue - minValue) + 2π/3; // H = 60 * (G - B) / (maxValue - minValue) + 120;
if (B == maxValue)
H = π/3 * (R - G) / (maxValue - minValue) + 4π/3; // H = 60 * (G - B) / (maxValue - minValue) + 240;
2. HSV to RGB
hi = mod(floor(H / (π/3)), 6); // hi = floor( H / 60° ) mod 6
f = H / (π/3) - hi; // H = 60 * (G - B) / (maxValue - minValue) + 0;
p = V * (1 - S);
q = V * (1 - f * S);
t = V * (1 - (1 - f) * S);
switch (hi)
case 0: R = V; G = t; B = p; break; // (R, G, B) = (V, t, p)
case 1: R = q; G = V; B = p; break; // (R, G, B) = (q, V, p)
case 2: R = p; G = V; B = t; break; // (R, G, B) = (p, V, t)
case 3: R = p; G = q; B = V; break; // (R, G, B) = (p, q, V)
case 4: R = t; G = p; B = V; break; // (R, G, B) = (t, p, V)
case 5: R = V; G = p; B = q; break; // (R, G, B) = (V, p, q)
第三个我们要介绍的是Lab模型,该模型是基于人对颜色的感觉,描述的是颜色的显示方式,而非显示设备生成颜色所需要的特定色料的数量,故Lab也被视为设备无关的颜色模型。
Lab色彩模型是由亮度(L,Luminosity)和有关色彩的a、b三个要素组成。a表示从洋红色到绿色的范围,b表示由黄色到蓝色的范围。L取值[0, 100],当L = 50时,相当于50%的黑。a、b的值域都是[-128, 127]。当x = -128时,a是绿色,b是蓝色;当x渐渐过渡到127时,a渐渐变成了洋红色,b渐渐变成了黄色。所有的颜色可以由这3个值交互变化组成。例如,当Lab取值为(100, 30, 0)时,色彩表现为粉红色。
Lab模式中,a轴和b轴与RGB模型相比,洋红色更加偏红,绿色更加偏青,黄色略带红色,蓝色略偏青色。
图6.Lab颜色模型
Lab模型具有不依赖设备的优点,除此之外,它还具有宽阔的色域优势。色域范围内不仅包含了RGB、CMYK的所有色域,还能表示他们不能表现的色彩。人类能感知的色彩,都能通过Lab模型表现出来。另外,Lab色彩模型弥补了RGB色彩模型中分布不均匀的不足,在RGB模型中蓝色到绿色之间过度的色彩多,而绿色到红色之间缺少黄色和其他色彩。所以,如果想在数字图像处理中保留宽阔的色域和丰富的色彩,最好选择Lab模型。
1.RGB模型到Lab色彩空间的转换
RGB无法直接转成Lab,需要先转换成XYZ再转成Lab,因此转换需要两个步骤:
R、G、B: [0.0, 1.0] // 0 - 255
L: [0, 100]
a、b: [-128, 127]
(1)RGB转成XYZ
R = gamma(R);
G = gamma(G);
B = gamma(B);
float gamma(float x)
{
if (x > 0.04045) {
return pow((x + 0.055) / 1.055, 2.4);
} else {
return x / 12.92;
}
}
mat3x1(X, Y, Z) = mat3(M) * mat3x1(R, G, B);
其中 0.436052025 0.385081593 0.143087414
[M] = [ 0.222491598 0.716886060 0.060621486 ]
0.013929122 0.097097002 0.714185470
gamma函数是用来对图像进行非线性色调调整的,目的是提高图像的对比度。该函数并不唯一,本文给出的值被广泛应用于大多数。
(2)XYZ转Lab
L = 116 * f(Y / Yn) - 16;
a = 500 * (f(X/ Xn) - f(Y / Yn));
b = 200 * (f(Y / Yn) - f(Z / Zn));
float f(float t)
{
if (t > pow(6.0 / 29.0, 3)) {
return pow(t, 1.0 / 3.0);
} else {
return 1.0 / 3.0 * pow(29.0 / 6.0, 2.0) * t + 4.0 / 29.0;
}
}
其中Xn、Yn、Zn一般默认为1。
最后,本文介绍CMYK色彩模式,该模式是以打印油墨在纸张上的光线吸收特性为基础,图像中每个像素都是由靛青(C)、品红(M)、黄(Y)和黑(K)按照不同比例组成。每个像素的每种印刷油墨会被分配一个百分比例,最亮的颜色分配较低的印刷油墨颜色百分比,较暗的颜色分配较高的百分比。例如,明亮的红色可能会是(0.02, 0.93, 0.9, 0)。(0, 0, 0, 0)会产生纯白色。
R、G、B: [0.0, 1.0] // 0 - 255
C、M、Y、K: [0.0, 1.0] // 0% - 100%
由CMYK转换成RGB的公式:
R = (1.0 - C) * (1.0 - K)
G = (1.0 - M) * (1.0 - K)
B = (1.0 - Y) * (1.0 - K)
参考链接:
http://baike.baidu.com/view/1139658.htm (颜色模式)
http://baike.baidu.com/view/974298.htm (色彩空间)
http://zhuanlan.zhihu.com/lianghai/19652492
http://blog.csdn.net/viewcode/article/details/8203728
颜色空间模型(HSV\LAB\RGB\CMYK)的更多相关文章
- 色彩空间RGB/CMYK/HSL/HSB/HSV/Lab/YUV基础理论及转换方法:RGB与YUV
之前做个设计,现在从事IT,脑子里面关于RGB,RGBA,CMY,CMYK,YUV,但是具体理论还是不扎实.若干年前之前写过<水煮RGB与CMYK色彩模型—色彩与光学相关物理理论浅叙>&l ...
- LCD LED OLED区别 以及RGB、YUV和HSV颜色空间模型
led 液晶本身不发光,而是有背光作为灯源,白色是由红绿蓝三色组成,黑色是,液晶挡住了led灯光穿过显示器. lcd比led更薄. oled:显示黑色时,灯是灭的,所以显示黑色更深,效果更好. 这就不 ...
- RGB、YUV和HSV颜色空间模型
一.概述 颜色通常用三个独立的属性来描述,三个独立变量综合作用,自然就构成一个空间坐标,这就是颜色空间.但被描述的颜色对象本身是客观的,不同颜色空间只是从不同的角度去衡量同一个对象.颜色空间按照基本机 ...
- 06: RGB、YUV和HSV颜色空间模型
RGBA是代表Red(红色)Green(绿色)Blue(蓝色)和Alpha的色彩空间 YUV:Y"表示明亮度(Luminance或Luma),也就是灰阶值:而"U"和&q ...
- 颜色空间模型 与 Opencv中的HSV模型范围
颜色空间总结 RGB.HSV.YUV 什么是颜色 Wiki是这样说的:颜色或色彩是通过眼.脑和我们的生活经验所产生的一种对光的视觉效应.嗯,简单点说,颜色就是人对光的一种感觉,由大脑产生的一种感觉.感 ...
- RGB颜色空间、HSV颜色空间的理解
HSV是把H(色相),S(饱和度),V(亮度)当做色值来定位颜色的空间. 1.HSV模型 色相:取值范围是0~360度,用来表示颜色的类别.其中红色是0度,绿色是120度,蓝色是240度.饱和度:取值 ...
- HSV to RGB
HSV构成: Hue : the color type (red, blue, or yellow) Ranges from 0 to 360° Saturation : the intensity ...
- 【C#】RGB,CMYK,HSB各种颜色表示的转换(转)
[C#]RGB,CMYK,HSB各种颜色表示的转换 一.表示颜色的方式有很多种,如RGB,CMYK,HSB,Hex等等 1.RGB:这种表示颜色由三原色构成,通过红,绿,蓝三种颜色分量的不同,组合 ...
- 几种颜色模型(颜色空间):HSV CMYK RGB
RGB和CMY颜色模型都是面向硬件的,而HSV(Hue Saturation Value)颜色模型是面向用户的. HSV(Hue, Saturation, Value)是根据颜色的直观特性由A. R. ...
随机推荐
- 常用模块 - logging模块
一.简介 logging模块定义的函数和类为应用程序和库的开发实现了一个灵活的事件日志系统.logging模块是Python的一个标准库模块,由标准库模块提供日志记录API的关键好处是所有Python ...
- 英语kutnahorite金田黄kutnahorite单词
金田黄是含镁和锰较多的方解石,学名是“镁锰方解石”或者“镁菱锰矿”,英文名为Kutnahorite,也可翻译为“锰白云石”.“金田黄”颜色艳丽,有红色.橙色或者黄色等不同色调,属于艳色方解石的集合体. ...
- AI金融:LSTM预测股票
第一部分:从RNN到LSTM 1.什么是RNN RNN全称循环神经网络(Recurrent Neural Networks),是用来处理序列数据的.在传统的神经网络模型中,从输入层到隐含层再到输出层, ...
- ThinkPHP5中如何实现模板完全静态化
模板完全静态化,也就是通过模板完全生成纯静态的网页,相比动态页面和伪静态页面更安全更利于SEO访问更快.相比前二者各有利弊吧,现在稍微对这三种形式的优缺点对比一下,以及在ThinkPHP5项目中实现完 ...
- 最新的JavaScript知识总结,欢迎各位大佬指正,需要的留下邮箱,给你们发原稿(PDF版)
小编整理javascript用的是有道云笔记,导出的word版本,但是代码块显示格式是乱的,不便于阅读 所以,各位有需要的话,小编可以将导出的pdf版发给大家!pdf版跟word没有什么区别,知识没法 ...
- TensorFlow之estimator详解
Estimator初识 框架结构 在介绍Estimator之前需要对它在TensorFlow这个大框架的定位有个大致的认识,如下图示: 可以看到Estimator是属于High level的API,而 ...
- hive删除数据(转)
转自:https://www.cnblogs.com/linn/p/6196293.html 按分区删除: ALTER TABLE test1 DROP PARTITION (dt='2016-04 ...
- Q-learning之一维世界的简单寻宝
Q-learning的算法: (1)先初始化一个Q table,Q table的行数是state的个数,列数是action的个数. (2)先随机选择一个作为初始状态S1,根据一些策略选择此状态下的动作 ...
- Big Data Landscape 2018
https://mattturck.com/bigdata2018/
- Generative Adversarial Networks overview(3)
Libo1575899134@outlook.com Libo (原创文章,转发请注明作者) 本文章主要介绍Gan的应用篇,3,主要介绍图像应用,4, 主要介绍文本以及医药化学其他领域应用 原理篇请看 ...