前言

首先需要指明本文中描述的R,G,B并非通常的sRGB中的三个分量R',G',B',而是波长分别为700nm,546.1nm,435.8nm的单色红光,单色绿光,单色蓝光。sRGB中的R'G'B'中的红色、绿色、蓝色已经不是单色光了。虽然习惯上大家都叫RGB,但是需要有所区别。那么RGB的定义是怎么来的呢,这需要从颜色匹配实验说起。

一,色光混合颜色匹配实验

装置如下图所示。红(R)、绿(G)、蓝(B)三种平行色光照射在黑档屏的一边,并且映在白屏幕上的光斑重合在一起(上方)。被匹配色光(C)照在黑档屏的另一边(下方)。人眼通过黑屏上的小孔可同时看到黑档屏的两边。实验时,调节红、绿、蓝色光的强度,直到黑档屏两边的视场呈现相同颜色,即:视场中的分界线消失,两部分合成同一视场时,就完成了颜色匹配。依次逐个设置单色光的波长,并记录数据。

三色刺激值的数据见网站:CVRL main (ucl.ac.uk),右上图的显示代码如下:

wave=csvread('./cie data/cie_rgb_5nm.csv',0,0,[0,0,68,0]);
R=csvread('./cie data/cie_rgb_5nm.csv',0,1,[0,1,68,1]);
G=csvread('./cie data/cie_rgb_5nm.csv',0,2,[0,2,68,2]);
B=csvread('./cie data/cie_rgb_5nm.csv',0,3,[0,3,68,3]);
figure
plot(wave,R,'r');hold on
plot(wave,G,'g');hold on
plot(wave,B,'b');
legend('R','G','B','Location','east');
xlabel('波长/nm');
ylabel('刺激值');
title('标准色三色刺激值图');

二,LMS视觉响应曲线

我们知道人的眼睛感受色彩,依靠的是3种视锥细胞L,M,S。对于可见光区域里面的单色光,能否借鉴单色光匹配实验,来采集LMS的数据呢。这不好实现,一方面没有办法单独刺激这三类细胞,另一方面是无法单独评定刺激的视觉效应。因此这就说明了无法得到准确的数学上的LMS跟随单色光变化的函数表达式。

这里我提出一种假设实验,或许前人就是这样干的。装置如下图所示:570nm(L),555nm(M),445nm(S)的单色三种平行色光,将可见光C依次从红光逐次调到紫色光,保证亮度始终不变,同时调整L、M、S的发射功率,使他们各自都跟颜色C的亮度一样。

三色刺激值的数据见网站:CVRL main (ucl.ac.uk),右上图的显示代码如下:

wave=csvread('./cie data/cie_lms_5nm.csv',0,0,[0,0,68,0]);
L=csvread('./cie data/cie_lms_5nm.csv',0,1,[0,1,68,1]);
M=csvread('./cie data/cie_lms_5nm.csv',0,2,[0,2,68,2]);
S=csvread('./cie data/cie_lms_5nm.csv',0,3,[0,3,68,3]);
figure
plot(wave,L,'r');hold on
plot(wave,M,'g');hold on
plot(wave,S,'b');
legend('L','M','S','Location','east');
xlabel('波长/nm');
ylabel('响应');
title('LMS视觉响应图');

三,RGB和LMS色彩空间转换

首先看LMS转RGB的效果:

wave=csvread('./cie data/cie_lms_5nm.csv',0,0,[0,0,68,0]);
L=csvread('./cie data/cie_lms_5nm.csv',0,1,[0,1,68,1]);
M=csvread('./cie data/cie_lms_5nm.csv',0,2,[0,2,68,2]);
S=csvread('./cie data/cie_lms_5nm.csv',0,3,[0,3,68,3]);
figure
plot(wave,L,'r');hold on
plot(wave,M,'g');hold on
plot(wave,S,'b');
legend('L','M','S','Location','east');
xlabel('波长/nm');
ylabel('响应');
title('LMS视觉响应图');lms2rgb=[5.0883     -4.0645 0.08250 ;%10度观察-0.1239     1.1637  -0.08381 ;0.00205     -0.01920   1.00139 ] ;
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
c_rgb =lms2rgb*[L M S]';
color_r=c_rgb(1,:);
color_g=c_rgb(2,:);
color_b=c_rgb(3,:);
figure
plot(wave,color_r,'r');hold on
plot(wave,color_g,'g');hold on
plot(wave,color_b,'b');

然后看RGB转LMS的效果:

wave=csvread('./cie data/cie_rgb_5nm.csv',0,0,[0,0,68,0]);
R=csvread('./cie data/cie_rgb_5nm.csv',0,1,[0,1,68,1]);
G=csvread('./cie data/cie_rgb_5nm.csv',0,2,[0,2,68,2]);
B=csvread('./cie data/cie_rgb_5nm.csv',0,3,[0,3,68,3]);
figure
plot(wave,R,'r');hold on
plot(wave,G,'g');hold on
plot(wave,B,'b');
legend('R','G','B','Location','east');
xlabel('波长/nm');
ylabel('刺激值');
title('标准色三色刺激值图');lms2rgb=[5.0883     -4.0645 0.08250 ;%10度观察-0.1239     1.1637  -0.08381 ;0.00205     -0.01920   1.00139 ] ;
rgb2lms =inv(lms2rgb);%求逆矩阵
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
c_lms =rgb2lms*[R G B]';
color_l=c_lms(1,:);
color_m=c_lms(2,:);
color_s=c_lms(3,:);
figure
plot(wave,color_l,'r');hold on
plot(wave,color_m,'g');hold on
plot(wave,color_s,'b');

四,RGB和XYZ色彩空间转换

先看RGB转XYZ的代码和效果:

wave=csvread('./cie data/cie_rgb_5nm.csv',0,0,[0,0,68,0]);
R=csvread('./cie data/cie_rgb_5nm.csv',0,1,[0,1,68,1]);
G=csvread('./cie data/cie_rgb_5nm.csv',0,2,[0,2,68,2]);
B=csvread('./cie data/cie_rgb_5nm.csv',0,3,[0,3,68,3]);
figure
plot(wave,R,'r');hold on
plot(wave,G,'g');hold on
plot(wave,B,'b');
legend('R','G','B','Location','east');
xlabel('波长/nm');
ylabel('刺激值');
title('标准色三色刺激值图');rgb2xyz=[2.7689     1.75175 1.13016 ;%10度观察1     4.5907  0.06010 ;0     0.05651   5.5943 ] ;
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
c_xyz =rgb2xyz*[R G B]';
color_x=c_xyz(1,:);
color_y=c_xyz(2,:);
color_z=c_xyz(3,:);
figure
plot(wave,color_x,'r');hold on
plot(wave,color_y,'g');hold on
plot(wave,color_z,'b');

然后来讲因为RGB色彩空间在拟合单色光的时候出现了负值,那么就需要使用一个虚拟的色彩空间进行转换一下,转换前后在二维平面上的色品图如下:

wave=csvread('./cie data/cie_rgb_5nm.csv',0,0,[0,0,68,0]);
R=csvread('./cie data/cie_rgb_5nm.csv',0,1,[0,1,68,1]);
G=csvread('./cie data/cie_rgb_5nm.csv',0,2,[0,2,68,2]);
B=csvread('./cie data/cie_rgb_5nm.csv',0,3,[0,3,68,3]);
r=R./(R+G+B);
g=G./(R+G+B);
b=B./(R+G+B);
figure
plot(r,g,'b');
xlabel('r');
ylabel('g');
title('r-g归一化色品图');rgb2xyz=[2.7689     1.75175 1.13016 ;%10度观察1     4.5907  0.06010 ;0     0.05651   5.5943 ] ;
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
c_xyz =rgb2xyz*[R G B]';
color_x=c_xyz(1,:);
color_y=c_xyz(2,:);
color_z=c_xyz(3,:);
x=color_x./(color_x+color_y+color_z);
y=color_y./(color_x+color_y+color_z);
z=color_z./(color_x+color_y+color_z);
figure
plot(x,y,'b');
xlabel('x');
ylabel('y');
title('x-y归一化色品图');

LMS,RGB,XYZ色彩空间转换相关推荐

  1. 详解RGB和YUV色彩空间转换

    前言 首先指出本文中的RGB指的是非线性RGB,意思就是经过了伽马校正,按照行业规矩应当写成R'G'B',但是为了书写方便,仍写成RGB.关于YUV有多种叫法,分别是YUV,YPbPr,YCbCr.因 ...

  2. 色彩空间转换(RGB空间与Lab空间)

    颜色迁移是计算机视觉领域的一个很有趣的问题,它实际上要我们解决这么一个问题:基于图像A和图像B,合成一幅新的图像C,使其同时具有A的颜色和B的形状等遗传信息,即图像B在不改变它自身所表达的形状信息的情 ...

  3. RGB转XYZ色彩空间开发及matlab实验笔记整理

    在PhotoShop中经常使用有RGB(红色.绿色.蓝色).CMYK(青色.洋红.黄 色.黑色).HSB(色相.饱和度.亮度)和Lab4中色彩空间.本文将介绍其具体的算法,并通过VC编程实现,本系列程 ...

  4. 【颜色空间转换大集合】RGB到YIQ,RGB到HSI和HSI到RGB,RGB到YcbCr,RGB到XYZ颜色转换matlab代码的Demo,含详细的解释

    废话不说,先上图, 实现方式:matlab 实现功能: 实验目标 了解图像颜色空间的转换关系. 了解图像的文件结构. 实验内容 完成如下颜色空间的转换.(4 Points) RGB -> YIQ ...

  5. RGB到HSV色彩空间转换表

    RGB到HSV色彩空间转换表

  6. FPGA-图像处理-色彩空间转换(RGB转YUV和YCBCR)

    之前转了一篇定点运算的文章希望大家看完再看这个, 涉及到FPGA的色彩空间转换的知识,一定要提定点运算,其实之前在进行小数运算的时候已经用到了,这里我也不详细说了看文章吧 OV7670摄像头采集的数据 ...

  7. 数字图像处理:4.色彩空间转换

    颜色通常用三个相对独立的属性来描述,三个独立变量综合作用,自然就构成一个空间坐标,这就是颜色空间.而颜色可以由不同的角度,用三个一组的不同属性加以描述,就产生了不同的颜色空间.但被描述的颜色对象本身是 ...

  8. OpenCV实战(7)——OpenCV色彩空间转换

    OpenCV实战(7)--OpenCV色彩空间转换 0. 前言 1. RGB 色彩空间 2. 色彩空间转换 2.1 CIE L*a*b* 色彩空间 2.2 其它色彩空间 3. 用色调.饱和度和亮度表示 ...

  9. 【计算机视觉处理4】色彩空间转换

    [计算机视觉处理4]色彩空间转换 1.图层操作 在第2篇中提到过,如果是二值图片(黑白图)或者灰度图片,一个像素需要一个8位二进制来表示.而对于彩色图像,一个像素则需要用3个8位二进制来表示.我们认为 ...

最新文章

  1. HDU-1203 I NEED A OFFER!-0、1背包及空间优化
  2. mysql sycho_Java面试题 - osc_p1rj1z8j的个人空间 - OSCHINA - 中文开源技术交流社区
  3. 【产品】腾讯产品经理总结:toB的产品经理和toc产品经理区别
  4. oracle crm版本,ORACLE CRM ON DEMAND 19 版
  5. R 脚本读取汇总 Excel 表格数据
  6. 面试中遇到回答不上来的问题可以这样做
  7. 电机的入门之路系列3--直流电机的工作原理
  8. 一个猜拳游戏的算法设计
  9. 西瓜书+实战+吴恩达机器学习(二十)随机算法(拉斯维加斯方法、蒙特卡罗方法)
  10. Access to the path Library\UnityAssemblies\UnityEngine.xml is denied.
  11. Ctfmon.exe是什么进程?
  12. webservice 缺少根元素_草莓种植,这2种元素至关重要,直接影响草莓的产量和品质...
  13. 多目标追踪-2019综述《Deep Learning in Video Multi-Object Tracking: A Survey》
  14. vue路由SPA的介绍
  15. 【相濡以沫、相忘于江湖】
  16. 4298. 【NOIP2015模拟11.2晚】我的天
  17. 数据库中五个Key(鍵)的概念区分
  18. 关于选择性起始位点的新方法之SEASTAR: systematic evaluation of alternative transcription start sites in RNA...
  19. Centos7 安装RVM
  20. Kafka工具--滴滴Logi-KafkaManager

热门文章

  1. 最新的生活、工作感悟
  2. MySQL日志类型详解(全)
  3. 服务器一体机电脑如何重装系统,一体机电脑,小编教你如何组装一体机
  4. 流式传输 之二----流式传输条件
  5. java用户界面设计教程_Java图形用户界面设计(Swing)的介绍
  6. 【往事清零,未来可期】研究生入学前的50天,我干了什么“见不得人”的勾当...
  7. android 显示附近蓝牙,Android 基础-搜索附近蓝牙
  8. mybatisplus 高效批量插入
  9. 移动开发之【微信小程序】的原理与权限问题以及相关的简易教程
  10. 深圳龙华携手腾讯云 加快推进区块链先行试验区建设