ColorSpace颜色空间简介

前言

如果看过之前的介绍的图像颜色迁移《color transfer between images》和颜色协调模型Color Harmoniztion就会发现,大部分图像处理算法虽然输入输出是RGB像素值,但是中间进行算法处理时很少直接更改RGB值,而是转换到其它空间,使得各颜色分量之间的影响越小越好,而RGB像素值互相影响比较严重,有文章研究发现当图像蓝色通道值比较大的时候,红绿通道值也比较大,不然会出现一些诡异的颜色。

为了更好地理解各类传统的图像算法理论,我们需要对色彩空间有一个大概的认识。

国际惯例,参考博客:

维基百科: Color Space

维基百科:List of color spaces and their uses

知乎《色彩空间与色彩模型的本质区别是什么?》

简书区分色彩模型和色彩空间《Color Space (2)》

简书《UI 设计知识库 [01] 色彩 · 理论》

简书《深入理解color model(颜色模型)》

论文《Color Transfer in Correlated Color Space》

书籍《Color Space and Its Divisions:Color Order from Antiquity to the Present》

知乎《数字图像处理之6大颜色空间》

CSDN《颜色空间:RGB,CMY,HSV,HSL,Lab详解》

博客《色彩空间RGB/CMYK/HSL/HSB/HSV/Lab/YUV基础理论及转换方法:RGB与YUV》

知乎《色彩空间中的 HSL、HSV、HSB 有什么区别?》

知乎《RGB、HSV和HSL颜色空间》

GitHub文章《颜色模式—RGB、HSL、HSB、HSV、CMYK》

冈萨雷斯的《数字图像处理》

重点概念

主要介绍色彩模型、色彩空间的概念和区别,然后概览一下色彩空间大概有哪些,中间会重点描述部分色彩空间。

色彩模型和色彩空间

色彩模型Color Model:一种抽象的数学模型,用一组数值来表示颜色,通常是一个三元组、四元组或者颜色分量。有五类最主要的色彩模型(CIE, RGB, YUV, HSL/HSV, CMYK)

色彩空间Color Space:当色彩模型与特定的描述相关联以后,就称为色彩空间。也就是说色彩模型数组中每一个分量都具有特定的含义了,通常是任意挑选的一些颜色或者具有严谨的数学定义,比如Adobe RGB、sRGB等。通过某些变换可以将一种颜色空间变换到另一个颜色空间,比如我们经常将RGB转成HSV或者LAB处理。

色域Color gamut:是颜色的某个完全子集。比如一个给定色彩空间或者某个输出装置的呈色范围。比如最常用的是24-位实现方法,也就是红绿蓝每个通道有8位或者256色级。基于这样的24-位RGB模型的色彩空间可以表现256×256×256 ≈ 1677万色。

(互)补色Complementary Colour:当成对的颜色组合时,能够互相抵消。也就是组合时会产生灰阶色彩,比如白色或黑色;放在相邻位置时,会造成很强烈的对比度。下图环上相对的颜色就是补色。

在这里插入图片描述

绝对色彩空间Absolute Color Space:有两个含义①颜色之间的不同就是色彩空间中表示颜色的点的距离;②颜色空间中的颜色比较模棱两可,它不受任何外部因素的影响。但是如果精确定义了各种分量,非绝对色彩空间也可以转换为绝对色彩空间。比如RGB色彩模型是通过红绿蓝三个通道混合成色,但是不同设备对这三个颜色的定义并不是精确和标准的,所以不同设备上同一副RGB图像看起来会很不一样。业界比较受欢迎的做法是通过定义一个包含RGB属性的ICC协议将RGB转换到绝对色彩空间,最为广泛的就是sRGB和Adobe RGB。

【注意】

  • 色彩空间具体化了色彩模型,色彩空间要有确切的定义,比如使用 RGB 色彩模型的 sRGB 色彩空间最大红色的定义就是CIE XYZ: 0.4360657, 0.2224884, 0.013916。维基百科上列出了大部分色彩模型对应的色彩空间
    在这里插入图片描述

  • 如果色彩模型和绝对色彩空间没有映射关系,那么这个色彩模型就对应任意的颜色体系,它的颜色无法以一种容易理解的方式阐述。

  • 如果色彩模型和绝对色彩空间有映射关系,那么就会在色彩空间中出现一个有限覆盖区域(依据不同的映射函数确定),这个区域就叫做色域。如Adobe RGB和sRGB都基于RGB颜色模型,但它们是两个不同绝对色彩空间。下图展示了不同的RGB绝对色彩空间的色域(在CIExy色图度中显示):
    在这里插入图片描述

  • 定义色彩空间通常用CIELAB和CIEXYZ色彩空间作为标准,因为这两个色彩空间在设计时便要求包含普通人眼可见的所有颜色。

  • 在很多教程包括冈萨雷斯的《数字图像处理》中,并没有区分色彩模型和色彩空间。维基百科上也给出了解释由于“色彩空间”有着固定的色彩模型和映射函数组合,非正式场合下,这一词汇也被用来指代色彩模型。尽管固定的色彩空间有固定的色彩模型相对应,这样的用法严格意义上是错误的。

部分色彩空间列表

注意即使是不同色彩模型下的色彩空间也是可以互相转换的,比如可以查阅维基百科上面的sRGB到CIEXYZ的变换,或者看图像颜色迁移《color transfer between images》中RGB到LAB的转换。

CIE

定义色彩空间时,通常使用 CIELAB或者 CIEXYZ色彩空间作为参考标准。这两个色彩空间在设计时便要求包含普通人眼可见的所有颜色

CIE 1931 XYZ色彩空间是第一次基于人眼对于色彩感知度量创建色彩空间的尝试,它是几乎所有其它色彩空间的基础CIE RGBCIE XYZ两者其实是同一个线性空间的不同表达,因此两者的转换可以通过转换矩阵实现。
[XYZ]=[2.76881.75171.13011.00004.59060.060100.05655.5942][RGB][RGB]=[0.4185−0.1587−0.0828−0.09120.25240.01570.0009−0.00250.1786][XYZ]\begin{bmatrix} X\\Y\\Z \end{bmatrix}=\begin{bmatrix} 2.7688&1.7517&1.1301\\ 1.0000&4.5906&0.0601\\ 0&0.0565&5.5942 \end{bmatrix}\begin{bmatrix} R\\G\\B \end{bmatrix}\\ \begin{bmatrix} R\\G\\B \end{bmatrix}=\begin{bmatrix} 0.4185&-0.1587&-0.0828\\ -0.0912&0.2524&0.0157\\ 0.0009&-0.0025&0.1786 \end{bmatrix}\begin{bmatrix} X\\Y\\Z \end{bmatrix} XYZ=2.76881.000001.75174.59060.05651.13010.06015.5942RGBRGB=0.41850.09120.00090.15870.25240.00250.08280.01570.1786XYZ
CIE色彩空间的变体有:

  • CIELUV色彩空间 - 修改来更加方便的显示颜色差异,替代:
  • CIE 1964 U×V×W×统一色彩空间
  • CIELAB色彩空间:是颜色-对立空间,带有维度L表示亮度(0~100),a代表绿色到红色的分量(-128~127),b代表蓝色到黄色的分量(-128~127)。基于非线性压缩的CIE XYZ色彩空间坐标变换得到,是用来描述人眼可见的所有颜色的最完备的色彩空间。优点:不像RGB和CMYK色彩空间,Lab颜色被设计来接近人类视觉。它致力于感知均匀性,它的L分量密切匹配人类亮度感知。因此可以被用来通过修改a和b分量的输出色阶来做精确的颜色平衡,或使用L分量来调整亮度对比。这些变换在RGB或CMYK中是困难或不可能的——它们建模于物理设备的输出,而不是人类的视觉感知。
  • CIE-Yxy:该模型由CIE-XYZ衍生得来。其中, Yxy中的Y表示光的亮度。这个模型投影到x-y平面上即上面的CIE1931-XYZ色度图。其中x、y分量的取值范围是[0,1]。有时该模型也被称作CIE-xyY。

RGB

RGB 只是色彩模型,色彩模型没有色域或者色彩范围的概念,RGB 只是规定用 RGB 来表示色彩,没规定范围。

RGB采用加法混色法,因为它是描述各种“光”通过何种比例来产生颜色。光线从暗黑开始不断叠加产生颜色。RGB描述的是红绿蓝三色光的数值。RGBA是在RGB上增加阿尔法通道实现透明效果。

在这里插入图片描述

基于RGB色彩模型的普通色彩空间有:

  • sRGB色彩空间(standard Red Green Blue,标准红绿蓝色彩空间):是惠普与微软于1996年一起开发的用于显示器、打印机以及因特网的一种标准RGB色彩空间,主要针对显示器而设计的。
  • AdobeRGB 是 1998 年 Adobe 制定的色彩空间,它设计的一个要求就是要超过 sRGB 的色域,是为了同时针对印刷和显示器(也就是数字印刷)设计的。
  • Adobe Wide Gamut RGB:宽色域RGB色彩空间是1998年Adobe对sRGB色彩空间的扩充,可以存储比sRGB更广的颜色值,它包含LAB色彩空间中可视色彩的77.6%,而sRGB仅包括50.6%。

YUV

YUV,是一种颜色编码方法。常使用在各个影像处理组件中。 YUV在对照片或视频编码时,考虑到人类的感知能力,允许降低色度的带宽。Y’代表明亮度,而U与V存储色度部分; 亮度记作Y,而Y’的prime符号记作伽玛校正。UV分别代表不同颜色信号,所以直接使用R与B信号表示色度的UV, 也就是说UV信号告诉了电视要偏移某象素的的颜色,而不改变其亮度,或者UV信号告诉了显示器使得某个颜色亮度依某个基准偏移, UV的值越高,代表该像素会有更饱和的颜色。

基于YUV的色彩空间有:

  • YUV和Y’UV通常用来编码电视的模拟信号,通常已经在电脑系统上广泛使用。
  • YCbCr则是用来描述数字的影像信号,适合视频与图片压缩以及传输。RGB诉求于人眼对色彩的感应,YUV则着重于视觉对于亮度的敏感程度,Y代表的是亮度,UV代表的是彩度(因此黑白电影可省略UV,相近于RGB),分别用Cr和Cb来表示,我们现在大多数讲的YUV,基本是指Y’CbCr。
  • YIQ 是另一种视觉亮度拆分模型,与 YUV 很相似,是 NTSC 彩色电视的标准,国内不太常见,因为国内用的是 PAL 标准,PAL 标准使用的是 YUV。

CMY/CMYK

印刷四分色模式是彩色印刷时采用的一种套色模式,利用色料的三原色混色原理,加上黑色油墨,共计四种颜色混合叠加,形成所谓“全彩印刷”。四种标准颜色是:

  • CCyan = 青色
  • MMagenta = 洋红色,又称为“品红色”
  • YYellow = 黄色
  • K:blacK = 黑色

CMYK印刷过程中使用减法混色法(注意与RGB的加法混色法区分),因为它描述的是需要使用何种油墨,通过光的反射显示出颜色。它是在一种白色介质(画板,页面等)上使用油墨来体现图像。CMYK描述的是青、品红、黄和黑四种油墨的数值。根据不同的油墨,介质,和印刷特性,存在多种CMYK色彩空间,具体有 Japan Color 2001 Uncoated、US web Coated 等 CMYK 色彩空间。可以通过色点扩张或者转换各种油墨数值从而得到不同的外观。CMY是减色混色模型,颜色混在一起,亮度会降低。之所以加入黑色是因为打印时由品红、黄、青构成的黑色不够纯粹。

在这里插入图片描述

HSV/HSL

它俩都可由sRGB变换得到,但是有区别

  • HSV(色相:Hue、饱和度:Saturation、明度;Value),也称HSB(B指Brightness)是艺术家们常用的,因为与加法减法混色的术语相比,使用色相、饱和度等概念描述色彩更自然直观。HSV是RGB色彩空间的一种变形,它的内容与色彩尺度与其出处——RGB色彩空间有密切联系。
  • HSL(色相:Hue、饱和度:Saturation、亮度:Lightness/Luminance),也称HLS或HSI(I指Intensity)与HSV非常相似,仅用亮度(Lightness)替代了明度(Brightness)。二者区别在于,一种纯色的明度等于白色的明度,而纯色的亮度等于中度灰的亮度。

尽管在HSL和HSV中“色相”指称相同的性质,它们的“饱和度”的定义是明显不同的。它俩的区别直接从下图自行对比即可。

在这里插入图片描述
在这里插入图片描述

后记

这篇博文只是对图像里颜色做一个简单的描述,了解就行,不是搞信号处理的没必要记得非常清楚,只需要在论文中看到相关词汇不会不认识就行了。
本博文无代码,内容已同步到微信公众号
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/246568.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ogre共享骨骼与两种骨骼驱动方法

前言 最近业务中用到Ogre做基于3D关键点虚拟角色骨骼驱动,但是遇到两个问题: 身体、头、眼睛、衣服等mesh的骨骼是分开的,但是骨骼结构都是一样的,需要设置共享骨骼驱动的时候可以直接修改骨骼旋转量,或者将旋转量存…

仿射变换和透视变换

前言 在前面做换脸的博客中提到了使用仿射变换和透视变换将两张不同的人脸基于关键点进行对齐,保证一张人脸贴到另一张人脸时,大小完全一致;所以有必要理解一下这两个概念的区别,由于以实用性为目的,所以所有的图像算…

obj格式解析

前言 最近处理一些网格渲染的时候,需要解析Obj文件,从Free3D上随便找了个免费的人体obj模型解析测试一波 国际惯例,参考博客: 本文所使用的从Free3D下载的模型 .obj文件格式与.mtl文件格式 详解3D中的obj文件格式 3D中OBJ文…

Flask服务部署与简单内网穿透

前言 最近学习部署的时候,想到深度学习里面通常用的部署方法是flask做服务端,然后使用nginx做负载均衡,貌似也能做内网穿透。不过我不太懂负载均衡,只想利用本地电脑搭建一个简单的服务器,实现外部调用API服务的功能。…

OpenCV学习——轮廓检测

前言 轮廓检测是传统视觉中非常常用的功能,这里简单记录一下opencv中的轮廓检测算法使用方法,至于理论,后续有机会再去细品。 国际惯例: OpenCV官方的轮廓检测教程python版 OpenCV中的二值化方法教程 OpenCV轮廓层级官方文档…

RBF神经网络理论与实现

前言 最近发现有挺多人喜欢径向基函数(Radial Basis Function,RBF)神经网络,其实它就是将RBF作为神经网络层间的一种连接方式而已。这里做一个简单的描述和找了个代码解读。 之前也写过一篇,不过排版不好看,可以戳这里跳转 国际惯例&#x…

基于python和unity交互的卡通角色肢体和表情驱动(深度学习)

前言 最近看到了好多卡通角色的肢体驱动的东东,感觉是时候发挥一下读研时候学的东西了,而且虽然现在不炼丹了,但是还是得保持吃丹的技能。这个项目找了很多很多代码进行测试,最终集成了一个3D姿态估计和人脸关键点提取的代码。 …

OpenCV学习——形态学

前言 继续学习图像里面的形态学知识——结构元、腐蚀、膨胀、开运算、闭运算、击中/不击中变换。以及部分基本形态学算法,包括边界提取、空洞填充、连通分量的提取、凸壳、细化、粗化、骨架、裁剪、形态学重建。 其实就是对冈萨雷斯的《数字图像处理》中第9章节《…

径向基函数RBF三维网格变形

前言 之前写过径向基函数(RBF)神经网络做分类或者拟合。然后挖了个坑说在《Phase-Functioned Neural Networks for Character Control》里面提到了用于做地形编辑,所以这篇博客就是解析一下如何用RBF做网格编辑系统。 参考博客: Noe’s tutorial on d…

OBJ可视化——UV还原(修正)

前言 前面写过一篇obj格式解析的博客,但是这篇文章中可视化的工作是参考PRNet的源码进行的,后来细细思考了一下,有点问题,具体看下面。 问题来源 在PRNet源码的render.py中有个函数render_texture,是作者用于将uv展…

Unity中BVH骨骼动画驱动的可视化理论与实现

前言 找了很久使用BVH到unity中驱动骨骼动画的代码,但是都不是特别好用,自己以前写过,原理很简单,这里记录一下。 理论 初始姿态 在BVH或者其它骨骼动画中,一般涉及到三种姿势:A-pose,T-pos…

卡通驱动项目ThreeDPoseTracker——模型驱动解析

前言 之前解析过ThreeDPoseTracker这个项目中的深度学习模型,公众号有兄弟私信一些问题,我刚好对这个项目实现有兴趣,就分析一波源码,顺便把问题解答一下。 这个源码其实包括很多内容:3D姿态估计,坐标平滑…

卡通驱动项目ThreeDPoseTracker——关键点平滑方案解析

前言 之前对ThreeDPoseTracker的深度学习模型和unity中的驱动方法进行过解析,还有一个比较重要的就是从深度学习模型出来的3D关键点数据会有抖动,在ThreeDPoseTracker源码中有做两次平滑,一部分是卡尔曼滤波,还有一部分是低通滤波…

卡通角色表情驱动系列一

前言 分析完ThreeDPoseTracker来做卡通角色的身体驱动,接下来在卡通驱动领域还有一个是表情驱动。对这个真的是一窍不通啊,只能慢慢看论文了。 国际惯例,参考博客/论文: 《Landmark-guided deformation transfer of template f…

opencv相机标定和人头姿态估计案例

前言 头部驱动除了之前关注的表情驱动外,还有眼球驱动和头部方向驱动。本博客基于opencv官方文档和部分开源代码来研究如何基于人脸关键点获取头部的朝向。 国际惯例,参考博客: opencv:Camera Calibration and 3D Reconstruction opencv:…

卡通角色表情驱动系列二

前言 之前介绍了使用传统算法求解BS系数的表情驱动方法,其中提到过的三种方法之一是基于网格形变迁移做的,那么这篇文章就是对《Deformation Transfer for Triangle Meshes》做表情驱动的解析。 国际惯例,参考博客: 论文原文《…

UE自带重定向原理

UE自带重定向方法验证 核心源码在VS的解决方案中的位置: UE4\Source\Developer\AssetTools\Private\AssetTypeActions\AnimSequence.cpp中第3237行RemapTracksToNewSkeleton函数 跳转方法 AssetTypeActions_AnimationAsset.cpp的RetargetNonSkeletonAnimationHa…

【caffe-Windows】caffe+VS2013+Windows无GPU快速配置教程

前言 首先来一波地址: happynear大神的第三方caffe:http://blog.csdn.net/happynear/article/details/45372231 Neil Z大神的第三方caffe:https://initialneil.wordpress.com/2015/01/11/build-caffe-in-windows-with-visual-studio-2013-…

【caffe-Windows】caffe+VS2013+Windows+GPU配置+cifar使用

前言 国际惯例,先来波地址: CUDA WIN7:链接:http://pan.baidu.com/s/1nvyA3Qp 密码:h0f3 官方网址:https://developer.nvidia.com/cuda-toolkit CUDA WIN10:链接:http://pan.baidu.com/s/1…

【一些网站的收集】包含机器学习深度学习大牛主页等

数学概念部分 旋转矩阵、欧拉角、四元数的比较 欧拉角和四元数的表示 四元数与旋转 B样条曲线 非常好的概率统计学习的主页 误差方差偏差 编程语言学习 C#编程视频 OpenGL编程NeHe OpenGL官网 OpenGL“我叫MT“纯手工3D动画制作之1——基础介绍 【强大】非常好的Op…