L*a*b 颜色空间
转载http://blog.sina.com.cn/s/blog_7eb23c070100y6dh.html
同RGB颜色空间相比,Lab是一种不常用的色彩空间。它是在1931年国际照明委员会(CIE)制定的颜色度量国际标准的基础上建立起来的。1976年,经修改后被正式命名为CIELab。它是一种设备无关的颜色系统,也是一种基于生理特征的颜色系统。这也就意味着,它是用数字化的方法来描述人的视觉感应。Lab颜色空间中的L分量用于表示像素的亮度,取值范围是[0,100],表示从纯黑到纯白;a表示从红色到绿色的范围,取值范围是[127,-128];b表示从黄色到蓝色的范围,取值范围是[127,-128]。
色差计算公式:
△E*=[(△L*)2+(△a*)2。+(△b*)2]1/2。
△L=L样品-L标准(明度差异)
△a=a样品-a标准(红/绿差异)
△b=b样品-b标准(黄/蓝差异)
色差是用数值方式表示的两种颜色给人色彩感觉上的差别。两种采用La*b *色空间表示的颜色,色差即是两种颜色所在的坐标点在空间上的距离,由下式计算: 色差的单位用NBS表示,△E盎值为1时称为1NBS,1个NBS大约相当于视觉识别阈值的5倍。
值的大小即两种颜色在视觉感受上的相差大小,色差值和视觉感受上大约有这样的对应关系:
0.0—0.5(微小色差),感觉极微; 0.5—1.5(小色差),感觉轻微; l.5~3(较小色差),感觉明显; 3—6(较大色差)感觉很明显; 6以上(大色差)感觉强烈。
◆色差计工作原理
自动比较样板与被检品之间的颜色差异,输出CIE_Lab–三组数据和比色后的△E、△L、△a、△b四组色差数据。
△E总色差的大小:
⊙ △L+表示偏白,△L–表示偏黑
⊙ △a+表示偏红,△a–表示偏绿
⊙ △b+表示偏黄,△b–表示偏蓝
http://storytelling-system-in-dsp.googlecode.com/svn-history/r37/trunk/HSV_Control_Image/main.c
//Reference: Mr.Mark Ruzon
// Convert between RGB and CIE-Lab color spaces
// Uses ITU-R recommendation BT.709 with D65 as reference white.
// Yossi Rubner
// Last modified 2/24/98
//=================================================================== LAB_GEL Function
void RGB2Lab(unsigned char R, unsigned char G, unsigned char B,
int *L, int *a, int *b)
{
float X, Y, Z, fX, fY, fZ;
X = 0.412453R + 0.357580G + 0.180423B;
Y = 0.212671R + 0.715160G + 0.072169B;
Z = 0.019334R + 0.119193G + 0.950227*B;
X /= (255 * 0.950456);
Y /= 255;
Z /= (255 * 1.088754);
if (Y > 0.008856)
{
fY = pow(Y, 1.0/3.0);
L = (int)(116.0fY - 16.0 + 0.5);
}
else
{
fY = 7.787*Y + 16.0/116.0;
L = (int)(903.3Y + 0.5);
}
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;
a = (int)(500.0(fX - fY) + 0.5);
b = (int)(200.0(fY - fZ) + 0.5);
//printf(“RGB=(%d,%d,%d) ==> Lab(%d,%d,%d)\n”,R,G,B,*L,*a,*b);
}
void Lab2RGB(int L, int a, int b,
unsigned char *R, unsigned char *G, unsigned char *B)
{
float X, Y, Z, fX, fY, fZ;
int RR, GG, BB;
fY = pow((L + 16.0) / 116.0, 3.0);
if (fY < 0.008856)
fY = L / 903.3;
Y = fY;
if (fY > 0.008856)
fY = pow(fY, 1.0/3.0);
else
fY = 7.787 * fY + 16.0/116.0;
fX = a / 500.0 + fY;
if (fX > 0.206893)
X = pow(fX, 3.0);
else
X = (fX - 16.0/116.0) / 7.787;
fZ = fY - b /200.0;
if (fZ > 0.206893)
Z = pow(fZ, 3.0);
else
Z = (fZ - 16.0/116.0) / 7.787;
X *= (0.950456 * 255);
Y *= 255;
Z *= (1.088754 * 255);
RR = (int)(3.240479X - 1.537150Y - 0.498535Z + 0.5);
GG = (int)(-0.969256X + 1.875992Y + 0.041556Z + 0.5);
BB = (int)(0.055648X - 0.204043Y + 1.057311*Z + 0.5);
*R = (unsigned char)(RR < 0 ? 0 : RR > 255 ? 255 : RR);
*G = (unsigned char)(GG < 0 ? 0 : GG > 255 ? 255 : GG);
*B = (unsigned char)(BB < 0 ? 0 : BB > 255 ? 255 : BB);
//printf(“Lab=(%f,%f,%f) ==> RGB(%f,%f,%f)\n”,L,a,b,*R,*G,*B);
}
//
Cindy备注:此代码由于Lab采用int型,RGB2Lab和Lab2RGB的结果略有偏差,建议Lab采用float型。
L*a*b 颜色空间相关推荐
- OpenCV最经典的3种颜色空间(cv2.cvtColor)及互相转换
OpenCV最经典的3种颜色空间(cv2.cvtColor)及互相转换 1. 效果图 2. 原理 2.1 照明条件的重要性 2.2 OpenCV 中的3种颜色空间/模型 2.3 颜色空间的主要用途 3 ...
- OpenCV颜色空间——Luv颜色空间
Luv颜色空间,三个值的取值范围: ,, 调节L分量: #include<opencv2/core.hpp> #include<opencv2/imgproc.hpp> #in ...
- OpenCV颜色空间——Lab颜色空间
对于Lab颜色空间,OpenCV同样实现了BGR和Lab之间的转换,如果BGR的值在[0,1]之间,那么转换为Lab的取值范围为: ,, 通过以下程序调节L分量,观察其效果: #include< ...
- OpenCV—python 颜色空间(RGB,HSV,Lab)与 颜色直方图
文章目录 一.图像分类的过程 二.开发环境:(安装)OpenCV 计算机视觉库 三.颜色空间(颜色模型:RGB,HSV,Lab) 3.1 opencv--HSV颜色空间 四.OpenCV处理图片 4. ...
- CIE颜色空间LCh、Lab、XYZ-sRGB介绍与转换关系(包含源码)
项目场景: 提示:在颜色科学中,LCh和Lab是比较常用的 LCh是由MATLAB计算出的数据,但是我所需要在Qt的q3dsurface绘制出这个切面,看了Qt官方Examples,墨西哥草帽算法的3 ...
- 使用Python,OpenCV实现图像之间超快速的颜色转移
图像之间超快速的颜色转移 1. 效果图 2. 步骤 3. 改进算法的方法 4. 源码 参考 目标:源图像与目标图像,转移源图像的色彩空间到目标图像,生成一张新的图像: 有关如何在两个图像之间转移颜色, ...
- 使用Python,OpenCV确定对象的颜色
1. 如何利用Python.OpenCV计算轮廓的中心 2. Python,OpenCV应用轮廓逼近算法,检测对象的形状,如三角形,正方形,矩形,五边形,圆. 这一节学习应用 L * a * b * ...
- 机器视觉中彩色成像必须考虑的十个问题
来源:Imagination Tech 在为你的产品开发最适合的机器视觉系统时,需要考虑很多因素,以下列出开发过程中需要考虑的一些问题: 颜色准确性/差异化 首先要考虑的是应用程序所需的颜色精度和差异 ...
- 图像颜色迁移《color transfer between images》
前言 前段时间,在深度学习领域不是有个比较火的方向叫风格迁移的嘛,对于我这种不喜欢深度学习那种不稳定结果的人来说,还是想看看传统图像处理领域有什么类似的技术,发现了一个颜色迁移的算法,很久前的论文了. ...
最新文章
- SAP RETAIL 为物料组指派Merchandise Hierarchy Level Code
- 树莓派上搭建svn服务器
- Windows 环境下载安装Docker
- ios 容错处理JKDataHelper和AvoidCrash
- 定义和使用含有泛型的方法
- 我的领域驱动设计运用实例 - 领域啊领域
- html画特殊图形(待修改)
- 011235813用java写出来_【JAVA】关于在运行后控制台显示的一些功能问题,请吧友帮我解答...
- Apache Tomcat部署多个项目
- hadoop eclipse插件
- 网页设计制作CSS实现隔行换色两种方法
- 千脑——您的在线电脑
- AC控制器和无线路由器的区别
- 京东在线客服话术汇总!
- 用来打发时间的EUserv
- linux dd创建大文件模拟磁盘不足监控
- MySql定期备份数据到历史表的解决方案
- Cadence Orcad Capture元件位号自动编号的2种方法图文教程及视频演示
- destoon模板安装方法
- vi模式下的几种常用的保存文件并退出命令
热门文章
- 模块化UPS:卖点?买点?
- 图解TCP/IP——第三四章笔记
- 计算机系新年寄语,经典新年寄语(精选50句)
- 五一的旅游照如何消除路人,急,在线等
- fiddler 抓ios app包
- 苹果计算机删除可怎么恢复,苹果电脑怎么恢复垃圾桶已删除文件-万兴恢复专家...
- 对w10进行系统软件测试,W10专业版电脑显卡故障检测软件的使用方法
- 一些经典但惊人的知识
- 文件下载时直接对流进行zip加密压缩
- 黑龙江省二计算机考试教程,黑龙江省2019下半年计算机二级考试教程:VB语言程序设计...