文章目录

  • 彩色图像映射表
  • 颜色模型
    • 国际照明组织-CIE色度空间(Commission Internationale de L'Eclairage,色度图)
    • RGB颜色模型
    • HSV颜色模型
    • CMKY颜色模型
    • YUV颜色模型
  • 颜色编码
  • 参考文献

彩色图像映射表

matlab里边有一个colormap函数,能够将当前颜色映射表设置为某些预定义了的颜色映射表,包括

原始 parula jet hsv hot cool
spring summer autumn winter gray bone
copper pink lines colorcube prism flag

这些颜色映射表只包含了81种颜色,但是却绘出了各种风格的彩色图像。真彩色图像究竟应该如何定义?具有28∗8∗82^{8*8*8}28∗8∗8种颜色的就是彩色图像?这28∗8∗82^{8*8*8}28∗8∗8种颜色之间的欧式距离怎么确定?在讨论这些问题之前,我们必须确定一下颜色模型,在这个统一的基础之上,我们才能看出各个颜色模型的侧重点和构建原理,才能推出各个颜色模型之间的转换公式。


颜色模型

国际照明组织-CIE色度空间(Commission Internationale de L’Eclairage,色度图)

许许多多的颜色模型源于各式各样的相关设备(彩色电视机、彩色显示屏、彩色打印机)的出现。
物体的颜色既取决于外界的物理刺激,又取决于人眼的视觉特性,颜色的测量和标定应该符合人眼的视觉特性。
标准化的目的主要有:

  • 方便查找补色、颜色生成
  • 促进相关设备的兼容以及彩色图片格式的统一化

CIE色度图是现代色度学的基石,里边存在诸多技术细节,理解起来比较困难,此前一直觉得是自己想复杂了,可是现在发现是很多资料讲不清楚,浅尝辄止。
17~18世纪,一系列实验证实了古希腊人“万物由原子构成”的猜想。受此启发,科学家们开始思考一个问题:能不能找到颜色的“原子”呢?

  1. [1704-Newton] 颜色的本质是光
  2. [1854-格拉斯曼颜色替代律] 同色异谱现象(如果A=B,C=D,那么AC=BD。其中,“=”代表颜色外观一致,即所谓的“颜色匹配”)
  3. [1855-Maxwell]红绿蓝三种色光混合,可以生成各种色调的颜色
  4. [1860-Helmholtz]人眼的红绿蓝三种视觉细胞的颜色响应假象曲线(现代修正图上的三个峰值对应的坐标分别为:420nm,534nm,564nm;三者的工作频段是相互交叠的,不是单独的窄带。也即,对红(绿,蓝)光敏感的视觉细胞不只响应红(绿,蓝)色光,而是对整个波段的光都有响应的响应。进一步的说:所有的颜色响应都是纠缠在一起的,没有办法择干净)

这说明颜色叠加规律是线性的,想要复现某个颜色的时候,不需要复制一个一模一样的光谱。只需要掌握某种混合规律,就可以用另一种光谱得到一个相同的颜色。
关于红绿蓝是不是颜色的“原子”这个问题(也即,”是不是所有的颜色都可以拆分成红黄蓝的组合“或“红黄蓝三色光相加,能不能生成所有人类能够感知到的颜色?”),科学家的答案是:能,然而也不能[1931-J.Guild:The Colorimetric Properties of the Spectrum-光谱色的色度特性]。实验结果是

  1. 任意一种光谱都可以拆解成(380nm~680nm)单色光的组合
  2. 任意一个单色光都可以拆解成三原色光的组合(虽然可能有负数值)
  3. 任意一种组合都只能形成一种颜色,一旦三原色光的配比值确定了,颜色外观也就确定了

到现在为止,我们可以采用实验中所使用的RGB给颜色编号(用配比系数向量作为编号向量),这是科学家花费300年得出的结论:380nm~780nm之间的光谱曲线用3个数据就能唯一标识(归一化之后只需要两个)。那么原色光又是什么东西?该怎么确定呢?在“原子结构内蕴含的哲学思考”一文中再细细思考这个问题吧!


过去以Munsell color system为代表的表色法,是根据物体最后呈现出来的颜色外观来编号的,也就是所谓的“显色系统表色法”,他会根据人对颜色的心理感受(色调/色相Hue、明度Value、饱和度/纯度Chroma)来对颜色进行编号和排序,因此我猜想文章开头给出的那18个Matlab预定义的Colormap也是其中的一种。
而以CIE 1931系统为代表的的表色法,是根据三原色的混合规律来编码各个颜色的,叫做“混色系统表色法”。颜色的色调、明度、饱和度等特性在这个表色法里边表现不明显。
虽然CIE 1931系统一眼看去,既不直观又不顺眼,但是他有一个堪称“必杀技”的优点:可以精确地预测混色结果。也就是说:如果已知两个颜色的光谱数据,就可以用简单的计算方法,准确地知道他们混合之后的新颜色长什么样(前提是实验测出了精确的可供你查询的色度表,比如公认的CIE色度图),色度图的主要规律如下:

  1. [颜色混合线性规律]两个颜色混合后的新颜色,一定位于两者连线之上
  2. [所有人眼能识别出来的颜色,都有单色光相加而成,色度图中任意两点画出来的线段,就是“人眼能看见的所有颜色”]
  3. [经过CIE的刻意设计] 确定了一个等能白光E点和一个标准白光C点(C相当于中午阳光的颜色,比E的色温高一点),两者附近有一大片,都是各种不同的白色,他们的饱和度都为0(因此又称为消色),位于边界处的颜色都是饱和度最高的颜色(边界由左上角曲线和右下角斜线构成,曲线表示所有单色光,斜线表示谱外光的轨迹)

CIE模型只是一个标准,可是实际的灯光设备、显示器未必会遵循上述标准进行制作,或者可能由于发光器件的特性没有办法完全实现上述标准(存在不同程度的误差),具体情况还得具体分析,而且实际应用不会对精确度有很高的要求。主要涉及如下几个方面:

  1. 彩色显示器设计
  2. 彩色打印机设计

RGB颜色模型

HSV颜色模型

CMKY颜色模型

YUV颜色模型

YUV,是一种颜色编码方法,常使用在各个视频处理组件中。YUV在对照片或视频编码时,考虑到人类的感知能力,允许降低色度的带宽。“Y”表示明亮度(Luminance、Luma),“U”和“V”则是色度、浓度(Chrominance、Chroma)。
Y’UV、YUV、YCbCr、YPbPr 几个概念其实是一回事儿。由于历史关系,Y’UV、YUV 主要是用在彩色电视中,用于模拟信号表示。YCbCr 是用在数字视频、图像的压缩和传输,如 MPEG、JPEG。今天大家所讲的 YUV 其实就是指 YCbCr。
Y’UV 设计的初衷是为了使彩色电视能够兼容黑白电视。对于黑白电视信号,没有色度信息也就是(UV),那么在彩色电视显示的时候指显示亮度信息。
Y’UV 不是 Absolute Color Space,只是一种 RGB 的信息编码,实际的显示还是通过 RGB 来显示。Y’,U,V 叫做不同的 component 。


颜色编码

参考文献

[1] CMF色彩学大杀器·CIE色度图:http://www.360doc.com/content/17/0226/12/31887026_632123788.shtml
[2] 色彩学大杀器·CIE色度图(中):http://www.360doc.com/content/17/0305/12/31887026_634131798.shtml

Matlab之彩色图像映射表相关推荐

  1. Matlab进行彩色图像直方图匹配(不用histeq函数)

    用matlab进行彩色图像直方图匹配,基本原理是分别对RGB三个通道进行直方图匹配,最后合成一张图.涉及到的数学知识有概率密度,分布函数,频数等,因为是对离散数据进行操作,所以都比较简单.下面是代码, ...

  2. ML之FE:对pandas的dataframe中的类别型字段进行数字编码化(类别型特征数值化)并导出映射表daiding

    ML之FE:对pandas的dataframe中的类别型字段进行数字编码化(类别型特征数值化)并导出映射表daiding 目录 对pandas的dataframe中的类别型字段进行数字编码化(类别型特 ...

  3. 【c++】映射表std::map

    文章内容为网络搜集内容 std::map 映射表(Map)容器是一个按特定顺序存储以键值对组合而成的元素的关联容器 // <map> template < class Key,cla ...

  4. postgres 把一个表的值转成另一个表的字段名_Phoenix系列创建Phoenix映射表

    目前,在公司小部分的业务场景中有用到 Phoenix,但也仅限基于 Phoenix 的二级索引机制来进行查询上的优化.虽然使用的频次不大,但偶尔用到时,有些语句的使用方式和注意事项总记不太熟,每次都需 ...

  5. ***Redis hash是一个string类型的field和value的映射表.它的添加、删除操作都是O(1)(平均)。hash特别适合用于存储对象...

    http://redis.readthedocs.org/en/latest/hash/hset.html HSET HSET key field value   (存一个对象的时候key存) 将哈希 ...

  6. java集合——映射表+专用集合映射表类

    [0]README 0.1) 本文描述转自 core java volume 1, 源代码为原创,旨在理解 java集合--映射表+专用集合映射表类 的相关知识: 0.2) for full sour ...

  7. hibernate 映射表_Hibernate多对多映射-连接表

    hibernate 映射表 Today we will look into Hibernate Many to Many Mapping using XML and annotation config ...

  8. 【openGauss】Oracle到postgresql的字符集名称映射表

    前言 最近在写支持openGauss的dbms_lob包,其中的converttoblob及converttoclob两个过程涉及到了字符集相关内容(有个参数是nls_charset_id),但ope ...

  9. 字符映射表 charmap

    <img alt="" width="0" height="0" style="margin:0;padding:0&quo ...

  10. windows内码、外码、字符映射表

    1.内码和外码 我们常说汉字的"内码"与"外码". 内码是汉字在计算机内部存储,处理和传输用的信息编码.它必须与ASCII码兼容但又不能冲突. 所以把国标码两个 ...

最新文章

  1. Unable to inject views for BcFragment{8d4c0 #1 id=0x7f0d00a1}
  2. R语言使用car包的durbinWatsonTest函数检验回归模型的响应变量(或者残差)是否具有独立性(Independence、是否具有自相关关javascript系autocorrelated)
  3. php中怎样表示组合框,PHP-从带有组合框的表中获取数据(Codeigniter...
  4. mysql 按月自动建表
  5. 维基百科---似然函数
  6. select下拉框兼容写法
  7. MySQL中的多表连接
  8. 【计算机是如何通信 四】Web服务器/Severlet/DispatcherServlet/Controller
  9. python实现监控增量_python 日志增量抓取实现方法
  10. python猴子补丁_Python猴子补丁Monkey Patch用法实例解析
  11. LR运行负载测试场景-笔记
  12. CSS盒模型(Box Model)
  13. 复化科特斯公式matlab_基于牛顿—科特斯积分的误差分析
  14. mysql 等距随机_随机起点对称等距抽样公式的简便运用
  15. 阿里云吴翰清:从技术人转型做产品经理是一种什么样的体验
  16. 用Python自动生成数据日报!
  17. c语言实验心得100字,实验心得100字_100个面试常见经典问题_100个面试问题和答案...
  18. php ci框架之创建mobel
  19. 通过ZPL指令调用zebra打印机打印面单(java版)
  20. 2020联发科技笔试面试经验

热门文章

  1. 实践:前后端分离实现JWT登录验证,包括前、后端配置
  2. 消极和积极的道德--给亲爱的安德烈
  3. mocha-在浏览器中运行
  4. Win10麦克风显示这个设备正常但是没声音怎么解决
  5. Python爬虫selenium的使用实例爬取知乎首页数据!
  6. 深蓝学院激光slam 理论与实践 第三章激光雷达去畸变 作业习题
  7. 蛇形填数(语言:C语言)
  8. N-Gram模型介绍
  9. 武汉大学计算机学院2010情景剧,武汉大学金秋情景剧大赛精彩落幕(组图)
  10. aardio怎么运行php,aardio