光波长与RGB数值的转换

本文介绍了如何使用Matlab编写函数将特定波长的光转换为RGB色彩值。通过不同的波长区间设定,计算出对应的颜色比例,并应用衰减系数以模拟可见光谱边缘的强度变化。此脚本对于理解和模拟彩色物体的散射图像有所帮助。
摘要由CSDN通过智能技术生成

         最近做毕业设计时,需要Matlab仿真计算彩色物体的散射图像。计算中需要用到彩色图片(RGB色彩模式)对应的光波长数值。查找资料发现可以实现:由光波长求对应RGB数值。正在做尝试,所以来记录一下思路。

 ------------------------------------分割线------------------------------------

0516更新:由光波长计算RGB数值的Matlab脚本实现

% 输入指定波长,转换成RGB数值,并输出
% 输入波长范围:380~780 nm

function I = lambda2rgb(lambda)

I = [r,g,b];

if  (lambda >= 380.0) && (lambda < 440.0)
    r = -1.0 * (lambda - 440.0) / (440.0 - 380.0);
    g = 0.0;
    b = 1.0;
elseif (lambda >= 440.0) && (lambda < 490.0)
    r = 0.0;
    g = (lambda - 440.0) / (490.0 - 440.0);
    b = 1.0;
elseif (lambda >= 490.0) && (lambda < 510.0)
    r = 0.0;
    g = 1.0;
    b = -1.0 * (lambda - 510.0) / (510.0 - 490.0);
elseif (lambda >= 510.0) && (lambda < 580.0)
    r = (lambda - 510.0) / (580.0 - 510.0);
    g = 1.0;
    b = 0.0;
elseif (lambda >= 580.0) && (lambda < 645.0)
    r = 1.0;
    g = -1.0 * (lambda - 645.0) / (645.0 - 580.0);
    b = 0.0;
elseif (lambda >= 645.0) && (lambda <= 780.0)
    r = 1.0;
    g = 0.0;
    b = 0.0;
else
    r = 0.0;
    g = 0.0;
    b = 0.0;
end

% 在可见光谱的边缘处强度较低。
if  (lambda >= 380.0) && (lambda < 420.0)
    attenuation = 0.3 + 0.7 * (lambda - 380) / (420 - 380);
    r = r * attenuation;
    g = 0.0;
    b = 1.0 * attenuation;
elseif(lambda >= 701.0) && (lambda < 780.0)
    attenuation = 0.30 + 0.70 * (780.0 - lambda) / (780.0 - 700.0);
    r = r * attenuation;
    g = 0.0;
    b = 0.0;
end
r = round(r*255);
g = round(g*255);
b = round(b*255);

end

 ------------------------------------分割线------------------------------------

1.光波长

        可见光波长在780~400nm之间,是电磁波谱中人眼可以感知的部分。

        而不同波长可见光呈现的颜色效果是不一样的,如下图:

2.RGB

        RGB是一种颜色标准,通过对红(R)、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的。RGB即是代表红、绿、蓝三个通道的颜色。RGB标准几乎包括了人类视力所能感知的所有颜色。

3.单色光与RGB

        生活中,人眼可见的大部分色彩都不是单一波长的光产生的,而是由多种波长光混合而成。RGB作为一种色彩标准,表示为一种颜色视觉效果,所以是无法确定其中的光波长信息。

        或者讲,不同比例的单色光混合,最终都可能有相同的颜色视觉效果,即相同的RGB数值。

        反过来,光波长计算对应RGB值是可行的。这里,可以参考网络上的一些资料,里面有具体的计算方法。

https://www.en.silicann.com/blog/post/wavelength-color/

http://www.physics.sfasu.edu/astro/color/spectra.html

https://blog.csdn.net/tanmx219/article/details/91658415

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值