VC编程实现色彩空间XYZ与LAB相互转换
来源:互联网 发布:淘宝电子邮箱注册 编辑:程序博客网 时间:2024/06/06 01:47
VC编程实现色彩空间XYZ与LAB相互转换
文章VC编程实现色彩空间RGB与XYZ相互转换已经介绍了RGB与XYZ色彩空间的转换算法以及实际的VC源代码,在上一篇文章已经提到,在PhotoShop中经常使用有RGB(红色、绿色、蓝色)、CMYK(青色、洋红、黄 色、黑色)、HSB(色相、饱和度、亮度)和Lab4中色彩空间。我们用到XYZ色彩空间的目的是进行RGB与LAB色彩空间转换的中介,承接前文,本文将介绍XYZ与LAB色彩空间之间的转换方法,并列出具体的算法公式和VC源代码。
1. 色彩空间XYZ转LAB(CIE L*a*B*)
1.1. 理论公式
1.2. VC实例代码:
示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
//REF_X 、REF_Y 、REF_Z 是参照白点CIE XYZ三色刺激值
static
double
REF_X=96.4221;
static
double
REF_Y=100.000;
static
double
REF_Z=82.5221;
// 类似Gamma函数的校正函数,XYZ转LAB时用
double
CColorUtility::revise(
double
x){
if
(x>
pow
(6.0/29.0,3))
x=
pow
(x,1.0/3.0);
else
x=(1.0/3.0)*(29.0/6.0)*x+(16.0/116.0);
return
x;
}
bool
CColorUtility::_cie_xyz2lab(
const
double
xyz[3],
double
(&lab)[3]){
double
x=xyz[0]/REF_X;
double
y=xyz[1]/REF_Y;
double
z=xyz[2]/REF_Z;
x=revise(x);
y=revise(y);
z=revise(z);
lab[0]=(116.0*y)-16.0;
lab[1]=500.0*(x-y);
lab[2]=200.0*(y-z);
return
true
;
}
到此,便使用VC编程实现了色彩空间XYZ到LAB的转换,下面我们来看看其逆变换,即LAB转XYZ的具体理论和实现:
2.色彩空间LAB(CIE L*a*B*)转XYZ
2.1. 理论公式
其中:
2.2. VC实例代码:
示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// 类似Gamma函数的校正函数的反函数,LAB转XYZ时用
double
CColorUtility::r_revise(
double
x){
if
(x>6.0/29.0)
x=
pow
(x,3.0);
else
x=(x-16.0/116.0)*3*
pow
(6.0/29.0,2);
return
x;
}
bool
CColorUtility::_cie_lab2xyz(
const
double
lab[3],
double
(&xyz)[3]){
double
y=(lab[0]+16.0)/116.0;
double
x=y+lab[1]/500.0;
double
z=y-lab[2]/200.0;
y=r_revise(y);
x=r_revise(x);
z=r_revise(z);
xyz[0]=x*REF_X;
xyz[1]=y*REF_Y;
xyz[2]=z*REF_Z;
return
true
;
}
REF_X 、REF_Y 、REF_Z 是参照白点CIE XYZ三色刺激值,与色彩空间XYZ转LAB的取值一样。到此,便使用VC编程实现了色彩空间LAB到XYZ的转换,本文介绍了LAB色彩空间与XYZ色彩空间的正变换和逆变换,结合前文,便实现了RGB->XYZ->LAB色彩空间的变换,同样也可以实现LAB->XYZ->RGB逆变换。为方便读者理解,给出了具体的计 算公式和实际源码。VC图形图像处理编程博大精深,有任何建议欢迎留言讨论,后续文章我们将继续介绍VC编程实现其它色彩空间之间的相互转换。
本系列程序均在Win7+VS2008测试通过,并且结果与PS3的运算结果一致。
0 0
- VC编程实现色彩空间XYZ与LAB相互转换
- VC编程实现色彩空间XYZ与LAB相互转换
- VC编程实现色彩空间XYZ与LAB相互转换-----改正版
- VC编程实现色彩空间RGB与XYZ相互转换
- VC编程实现色彩空间RGB与XYZ相互转换
- VC编程实现色彩空间RGB与XYZ相互转换
- VC编程实现色彩空间RGB与HSB(HSV)相互转换
- VC编程实现色彩空间RGB与HSB(HSV)相互转换
- RGB与Lab色彩空间相互转换c++代码
- sRGB XYZ Lab颜色空间相互转换及相关计算的类
- photoshop中RGB与LAB空间的相互转换
- Lab 色彩空间
- VC编程使用HSB(HSV)色彩空间实现色差比较
- VC编程使用HSB(HSV)色彩空间实现色差比较
- 从RGB到Lab色彩空间的转换
- 从RGB到Lab色彩空间的转换
- 从RGB到Lab色彩空间的转换
- 从RGB到Lab色彩空间的转换
- libpng error: Not a PNG file
- MySQL集群搭建步骤详解
- linux 关闭窗口后 进程结束 解决办法
- linux 添加用户
- 虚拟机Ubuntu扩大硬盘容量
- VC编程实现色彩空间XYZ与LAB相互转换
- MySQL入门很简单——读书笔记
- 程序中的@Override是什么意思
- jvm 命令 大全
- 文献阅读:Institutional, cultural and transaction cost influences on entry mode choice and performance
- VC编程实现色彩空间RGB与XYZ相互转换
- 一个目标100亿的互联网金融创业项目完整思路(毫无保留,赤裸裸全部是干货分享)
- Linux基础知识复习之命令篇
- 到底哪卡了 ---TraceView