通过公式转换将rgb值转换到波长值,并通过易语言实现图片中颜色的提取。仅限红到蓝范围内。
转换步骤
RGB值分为三个通道,也就是三个值,如:128,255,128(r,g,b)
每个通道值设为vr、vg、vb,首先对每个通道进行第一次转换:
v=vr/255,如果>0.04055,vr1=((v1+0.055)/1.055)^2.2
如果<0.04055,vr1=v1/12.92
vg1和vb1同理。
然后再定义三个量X、Y、Z:
X=0.4124564vr1+0.357576vg1+0.1804375*vb1
Y=0.2126729vr1+0.7151522vg1+0.0721750*vb1
Z=0.0193339vr1+0.1191920vg1+0.9503041*vb1
再定义两个量x、y:
x=X/(X+Y+Z)
y=Y/(X+Y+Z)
最后转换到波长λ≈429.64*x+384.857
仅适用于红光到蓝光之间。
应用于易语言
源码如下:
.版本 2
.子程序 子程序1RGB转亮度, 小数型
.参数 RGB, 字节集
.局部变量 结果, 小数型
.局部变量 rl, 小数型
.局部变量 gl, 小数型
.局部变量 bl, 小数型
.局部变量 CIEXYZx, 小数型
.局部变量 CIEXYZy, 小数型
.局部变量 CIEXYZz, 小数型
.局部变量 CIExyx, 小数型
.局部变量 CIExyy, 小数型
.局部变量 n, 小数型
.如果 (RGB [1] ÷ 255 > 0.04045)
rl = 求次方 ((RGB [1] + 0.055) ÷ 1.055, 2.2)
.否则
rl = RGB [1] ÷ 12.92
.如果结束
.如果 (RGB [2] ÷ 255 > 0.04045)
gl = 求次方 ((RGB [2] + 0.055) ÷ 1.055, 2.2)
.否则
gl = RGB [2] ÷ 12.92
.如果结束
.如果 (RGB [3] ÷ 255 > 0.04045)
bl = 求次方 ((RGB [3] + 0.055) ÷ 1.055, 2.2)
.否则
bl = RGB [3] ÷ 12.92
.如果结束
CIEXYZx = 0.4124564 × rl + 0.3575761 × gl + 0.1804375 × bl
CIEXYZy = 0.2126729 × rl + 0.7151522 × gl + 0.072175 × bl
CIEXYZz = 0.0193339 × rl + 0.119192 × gl + 0.950341 × bl
CIExyx = CIEXYZx ÷ (CIEXYZx + CIEXYZy + CIEXYZz)
CIExyy = CIEXYZy ÷ (CIEXYZx + CIEXYZy + CIEXYZz)
n = 429.64 × CIExyx + 10.89 × CIExyy + 384.857
结果 = n - 537.6618345
返回 (结果)
整合为功能
可以利用该转换方法将红蓝表示的密度图转换为数据图,比如有一张图:
这张图中红色表示高密度,蓝色表示低密度,我想看它在整个x方向的的密度变化,此时,可以利用该转换方法,整合为代码功能提取强弱,如下图:
然后复制数据至origin中作图
可以清楚的看到强弱的变化。
相关推荐
- 易语言源码分享 2025-05-31
评论1
LL
软件哪里下载?