RGB转换成Lab具体算法
最近在搞颜色空间,想找找RGB到LAB的颜色转换具体算法(RGB---XYZ----Lab),查了很多资料,最后终于写出了具体算法,下面给出PS中具体转换算法和CIE具体转换算法,二者之间的转换还是有一些差异的。
1、PS中具体转换算法
void g_MyBGR2LabPS(const double B,const double G,const double R,LAB &lab)
{
//PS中RGB到LAB转换算法
//photosho默认的转换条件为:srgb and gamma2.2
double X,Y,Z;
double Fx=0,Fy=0,Fz=0;
double b=B/255.00;
double g=G/255.00;
double r=R/255.00;// gamma 2.2
if ( r > 0.04045 )
r = pow(( r + 0.055 ) / 1.055, 2.4);
else
r = r / 12.92;
if ( g > 0.04045 )
g = pow(( g + 0.055 ) / 1.055, 2.4);
else
g = g / 12.92;
if ( b > 0.04045 )
b = pow(( b + 0.055 ) / 1.055, 2.4);
else
b = b / 12.92;
// sRGB
X = r * 0.436052025 + g * 0.385081593 + b * 0.143087414;
Y = r * 0.222491598 + g * 0.716886060 + b * 0.060621486;
Z = r * 0.013929122 + g * 0.097097002 + b * 0.714185470;
// XYZ range: 0~100
X = X * 100.000;
Y = Y * 100.000;
Z = Z * 100.000;
// Reference White Point
//2度视场 D50光源三刺激值
double ref_X = 96.4221;
double ref_Y = 100.000;
double ref_Z = 82.5211;X = X / ref_X;
Y = Y / ref_Y;
Z = Z / ref_Z;// Lab
if (X > 0.008856)
Fx = pow(X, 1/3.000);
else
Fx = ( 7.787 * X ) + ( 16 / 116.000 );
if (Z > 0.008856)
Fz = pow(Z, 1/3.000);
else
Fz = ( 7.787 * Z ) + ( 16 / 116.000 );
if (Y > 0.008856)
{
Fy = pow(Y, 1/3.000);
lab.L = ( 116.000 * Fy ) - 16.0 + 0.5;
}
else
{
Fy = ( 7.787 * Y ) + ( 16 / 116.000 );
lab.L=903.3*Y;
}lab.a = 500.000 * ( Fx - Fy ) + 0.5 ;
lab.b = 200.000 * ( Fy - Fz ) + 0.5;}
2、CIE转换算法
void g_MyBGR2LabCIE(const double B,const double G,const double R,LAB &lab)
{
double Fx=0,Fy=0,Fz=0;
double b=B/255.00;
double g=G/255.00;
double r=R/255.00;double X=r*0.412453 + g*0.357580 + b*0.180423;
double Y=r*0.212671 + g*0.715160 + b*0.072169;
double Z=r*0.019334 + g*0.119193 + b*0.950227;//2度视场 D65光源三刺激值
double ref_X = 0.950456;
double ref_Y = 1.0;
double ref_Z = 1.088754;X=X / ref_X;
Y=Y / ref_Y;
Z=Z / ref_Z;if (X>0.008856)
Fx=pow(X,1.0/3.0);
else
Fx=7.787*X + 16.0/116.0;
if (Z>0.008856)
Fz=pow(Z,1.0/3.0);
else
Fz=7.787*Z + 16.0/116.0;if (Y>0.008856)
{
Fy=pow(Y,1.0/3.0);
lab.L=116.0*Fy-16.0 + 0.5;
}
else
{
Fy=7.787*Y + 16.0/116.0;
lab.L=903.3*Y;
}
lab.a=500.0*(Fx-Fy) + 0.5;
lab.b=200.0*(Fy-Fz) + 0.5;// double BLACK = 20;
// double YELLOW = 70;
//
// if (lab.L < BLACK)
// {
// lab.a *= exp((lab.L - BLACK) / (BLACK / 4.0));
// lab.b *= exp((lab.L - BLACK) / (BLACK / 4.0));
// lab.L = BLACK;
// }
// if (lab.b > YELLOW)
// lab.b = YELLOW;}
当然,这两种矩阵转换算法只是一种简单的转化方法,可用于要求不高的颜色区分和仪器中,对于,像印刷品这样要求更高的颜色检测,是需要重新寻找转化算法的。
RGB转换成Lab具体算法相关推荐
- 大写日期转换成阿拉伯数字的算法
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace _911 ...
- E680I RGB转换成JPG
从屏幕抓取的原始数据是RGB565格式的--有的摄像头驱动支持直接抓取RGB888的格式,但我的不支持.如果想转换成JPEG,调用 JPEGLIB的话,先要转换成RGB888的格式.这个过程的转换,可 ...
- RGB转换成CMYK
1:RGB色彩模式是发光的,存在于屏幕等显示设备中.不存在于印刷品中.CMYK色彩模式是反光的,需要外界辅助光源才能被感知,它是印刷品唯一的色彩模式. 2:色彩数量上RGB色域的颜色数比CMYK多出许 ...
- 记录遇到的问题之---把16进制的颜色rgb转换成‘#’形式
方法一: function setRgbTo16(str) {let reg = /^(rgb|RGB)/if (!reg.test(str)) {return}var arr = str.sli ...
- 将RGB转换成ToWin32值
string iColor = ColorTranslator.ToWin32(Color.FromArgb(254, 254, 146)).ToString(); 转载于:https://www.c ...
- RGB颜色空间与Lab颜色空间区别与联系(附转换代码)
RGB颜色空间 RGB颜色是红色(Red).绿色(Green)和蓝色(Blue)三基色的字母缩写.RGB色彩模式是通过三种基本颜色的不同程度的迭加来产生各种各样的不同颜色.这个标准能够涵盖人类视力所能 ...
- HTML把cmyk转换为RGB,CMYK在线转换成pantone色卡号,cmyk转换对应潘通色号
Cyan(C) % Magenta(M) % Yellow(Y) % Key (black)K % 最接近的潘通色号是: 选择需要集中接近颜色 16 32 48 64 80 96 RGB : (255 ...
- C语言:将邻接表转换成邻接矩阵算法
题目 设计一个将邻接表转换成邻接矩阵的算法. 分析 初始时将邻接矩阵 g 中所有对应的元素值设置为 0,扫描邻接表 G 的所有单链表,通过第 i 个单链表查找顶点 i 的相邻结点 p,通过邻接矩阵 g ...
- JAVA CP936编码转utf8_对一个目录的文件从cp936转换成utf-8
打开一个文件,确认能够无乱码打开 [xw@localhost work]$ vi NPOSP/src/sjl05.cpp 但是,这里打开的方式是以cp936的编码方式打开的. 编码的选择,记录在~/. ...
最新文章
- filter函数的用法_JavaScript中forEach和filter的用法和原理
- php抽象的案例,php抽象类和抽象方法的例子
- Oracle优化-表设计
- c# webclient 保存会话信息_会话保持机制cookie和session
- 江苏省职称计算机考试internet,江苏省计算机职称考试题库及答案
- IO流 (二) ----- 文件流
- c traps and pitfalls reading notes(2)
- 拦截导弹 (最长上升子序列LIS)
- 商标注册后的注意事项
- 加速下载ardupilot工程
- linux iso镜像怎么用u盘装,如何使用U盘安装ISO系统镜像?
- 数字图像处理 图像形态学处理
- win 10计算机文件,Win10电脑怎么转移c盘文件?
- H.266/VVC相关技术学习笔记16:VTM6.0中的CIIP技术(帧内帧间联合预测)
- PT100热电阻温度传感器 铂热电阻 德国贺利氏 硅胶四氟镀锡屏蔽线
- Case When和聚合函数count、sum的使用
- 【日常计算机问题】打开word文档时出现:Word在试图打开文件时遇到错误。 请尝试下列方法: *检查文档或驱动器的文件权限。*确保有足够的内存和磁盘空间。*用文本恢复转换器打开文件。
- python语法格式
- 如何比较两个json
- python的一些奇淫巧技
热门文章
- lumen php版本,PHP微框架 Lumen 使用全纪录
- 啃光学论文的笔记(1)
- JMeter 图片上传接口进行压力测试
- 年化超额收益计算matlab,超额年化收益率的计算 看了一下雪球上一些雪友贴出的基金或大V的历年收益率,发现一些人统计的不对,想说一下: 1.超额收益率 某基金当年收益率为... - 雪球...
- 计算机组成原理---指令系统
- 笔记本高分辨软件兼容问题,字体太小或模糊
- 第四章 OAuth2.0规范(史上最详细解释)——获得授权
- 【SaltStack官方版】—— returners——返回器
- 阿里全球数学竞赛赛题曝光!5万余选手奋战三天三夜争夺1%决赛门票
- JeeCms使用笔记