调光LED RGB色准校准方案

目前市面上普遍使用的是RGB调色方案是,云端或APP端直接下发sRGB(如255,255,255),然后简单粗暴的换算为pwm占空比,或者灰度值。这导致部分混色不准确,肉眼可见的颜色差别明显。

本文提供了一套新的方案。

先通过R、G、B灯珠规格书,得到灯珠的色坐标,以及最大流明值。

色坐标

x

y

Y

R

0.6900

0.3100

50

G

0.1900

0.6100

150

B

0.1530

0.0278

30

通过混色定理,黑色三角形内部的颜色,都可以通过这三颗灯珠混出来,色坐标与流明无关。

云端或APP端还是下发sRGB值+亮度值,然后在设备端换算为期望的xm,ym色坐值,然后通过算法计算出对应的占空比或灰度值。

占空比计

xr = 0.6900  //R灯珠参数
yr = 0.3100
Yr = 50

xg = 0.1900 //G灯珠参数
yg = 0.6100
Yg = 150

xb = 0.1530 //B灯珠参数
yb = 0.0278
Yb = 40
Ym = 30  //给定一个固定值
//x,y为期望的色坐标

Dr = ((yg-yb)*(xb-x)+(y-yb)*(xg-xb)) / ((yg-yb)*(xb-xr)+(yr-yb)*(xg-xb)) * (yr * Ym) / (y * Yr) 
Dg = ((yb-yr)*(xr-x)+(y-yr)*(xb-xr)) / ((yb-yr)*(xr-xg)+(yg-yr)*(xb-xr)) * (yg * Ym) / (y * Yg) 
Db = ((yg-yr)*(xr-x)+(y-yr)*(xg-xr)) / ((yg-yr)*(xr-xb)+(yb-yr)*(xg-xr)) * (yb * Ym) / (y * Yb)

下发亮度加入gamma校准,此处gamma值设置为2.6,亮度范围为0~100。

Y = ((Y/100)^2.6)*100  //亮度调节校准

灰度值计算,如果灰度为8位,最大就为255。

N = MAX(Dr,Dg,Db)
N = 1/N
Dr = 255 * Dr * N * Y
Dg = 255 * Dg * N * Y
Db = 255 * Db * N * Y

把最后得到的值给驱动,就完成了。

本文只是从色坐标换算到占空比。前面还需要sRGB换算为色坐标,公式参考http://www.easyrgb.com/en/math.php

另外中间涉及到超色域转换,请看我另外一篇文章

不同色域转换_xiaoredred的博客-CSDN博客_色域转换

猜你喜欢

转载自blog.csdn.net/xiaoredred/article/details/125507487
今日推荐