RGB颜色空间与Lab颜色空间区别与联系(附转换代码)

article/2025/10/6 4:54:45

RGB颜色空间

RGB颜色是红色(Red)、绿色(Green)和蓝色(Blue)三基色的字母缩写。RGB色彩模式是通过三种基本颜色的不同程度的迭加来产生各种各样的不同颜色。这个标准能够涵盖人类视力所能感知的所有颜色,是目前运用广泛的颜色系统之一。

RGB(red,green,blue)颜色空间最常用的用途就是显示器系统,彩色阴极射线管,彩色光栅图形的显示器 都使用R、G、B数值来驱动R、G、B 电子枪发射电子,并分别激发荧光屏上的R、G、B三种颜色的荧光粉 发出不同亮度的光线,并通过相加混合产生各种颜色;扫描仪也是通过吸收原稿经反射或透射而发送来 的光线中的R、G、B成分,并用它来表示原稿的颜色。RGB色彩空间称为与设备相关的色彩空间,因为不同 的扫描仪扫描同一幅图像,会得到不同色彩的图像数据;不同型号的显示器显示同一幅图像,也会有不同 的色彩显示结果。显示器和扫描仪使用的RGB空间与CIE 1931 RGB真实三原色表色系统空间是不同的,后者 是与设备无关的颜色空间。btw:Photoshop的色彩选取器(Color Picker)。可以显示HSB、RGB、LAB和CMYK 色彩空间的每一种颜色的色彩值。

                                                                                          

RBG颜色的表示语法是(Red, Green, Blue), 因此各种颜色的标识值可以由公式计算得:65536*Blue+256*Green+Red。各个分量的数值越小,亮度越低;数值越大,亮度越高。(0,0,0)为黑色;(255,255,255)为白色。

RGB的格式有RGB565,RGB555,RGB24和RGB32等等。

Lab 颜色空间

    同RGB颜色空间相比,Lab是一种不常用的色彩空间。它是在1931年国际照明委员会(CIE)制定的颜色度量国际标准的基础上建立起来的。1976年,经修改后被正式命名为CIELab它是一种设备无关的颜色系统也是一种基于生理特征的颜色系统。这也就意味着,它是用数字化的方法来描述人的视觉感应Lab颜色空间中的L分量用于表示像素的亮度,取值范围是[0,100],表示从纯黑到纯白;a表示从红色到绿色的范围,取值范围是[127,-128]b表示从黄色到蓝色的范围,取值范围是[127,-128]。下图所示为Lab颜色空间的图示;

                          

    需要提醒的是,Lab颜色空间比计算机显示器、打印机甚至比人类视觉的色域都要大,表示为 Lab 的位图比 RGB 或 CMYK 位图获得同样的精度要求更多的每像素数据。虽然我们在生活中使用RGB颜色空间更多一些,但也并非Lab颜色空间真的一无所有。例如,在 Adobe Photoshop图像处理软件中,TIFF格式文件中,PDF文档中,都可以见到Lab颜色空间的身影。而在计算机视觉中,尤其是颜色识别相关的算法设计中,rgb,hsv,lab颜色空间混用更是常用的方法。

两者的区别:

    RGB的是由红色通道(R)、绿色通道(G)、蓝色通道(B)组成的,最亮的红色+最亮的绿色+最亮的蓝色=白色;最暗的红色+最暗的绿色+最暗的蓝色=黑色;而在最亮和最暗之间,相同明暗度的红色+相同明暗度的绿色+相同明暗度的蓝色=灰色。在RGB的任意一个通道内,白和黑表示这个颜色的明暗度。所以,有白色或者灰白色的地方,R、G、B三个通道都不可能是黑色的,因为必须要有R、G、B三个通道来构成这些颜色。
    而LAB不一样,LAB中的明度通道(L)专门负责整张图的明暗度,简单的说就是整幅图的黑白版。a通道和b通道只负责颜色的多少。a通道表示从洋红色(通道里的白色)至深绿色(通道里的黑色)的范围;b表示从焦黄色(通道里的白色)至袅蓝色(通道里的黑色)的范围;a、b通道里的50%中性灰色表示没有颜色,所以越接近灰色说明颜色越少,而且a通道和b通道的颜色没有亮度。这就说明了为什么在a、b通道中红色T恤的轮廓是那么的清晰!因为红色是洋红色+焦黄色组成的。
    总的来说:
      1、适合RGB通道抠的图大部分LAB模式能完成,反之不成立。
      2、任何单一色调背景下,用通道抠有明显颜色区别的部分,用LAB模式很快能完成
      3、LAB模式下对明度(L)通道做任何操作(如锐化、模糊等)不会影响到色相。

RGB转LAB色彩空间

1.原理

RGB无法直接转换成LAB,需要先转换成XYZ再转换成LAB,即:RGB——XYZ——LAB

因此转换公式分两部分:

(1)RGB转XYZ

假设r,g,b为像素三个通道,取值范围均为[0,255],转换公式如下:

    (1)      

    (2)

    (3)

 

M=

0.4124,0.3576,0.1805

0.2126,0.7152,0.0722

0.0193,0.1192,0.9505

等同于如下公式:

X = var_R * 0.4124 + var_G * 0.3576 + var_B * 0.1805
Y = var_R * 0.2126 + var_G * 0.7152 + var_B * 0.0722
Z = var_R * 0.0193 + var_G * 0.1192 + var_B * 0.9505

上面的gamma函数,是用来对图象进行非线性色调编辑的,目的是提高图像对比度。

这个函数不是唯一的,但是我在网上查到的基本都使用上式。

 

(2)XYZ转LAB

    (5)

 

    (6)

上面两个公式中,L*,a*,b*是最终的LAB色彩空间三个通道的值。X,Y,Z是

RGB转XYZ后计算出来的值,Xn,Yn,Zn一般默认是95.047,100.0,108.883。

2.代码实现

 (1)完全按照算法无优化实现

[cpp] view plain copy print ?
  1. <span style="font-size:14px;">inline float gamma(float x)  
  2. {return x>0.04045?pow((x+0.055f)/1.055f,2.4f):x/12.92;};  
  3.   
  4. void RGBToLab(unsigned char*rgbImg,float*labImg)  
  5. {  

[cpp] view plain copy print ?
  1. float R=gamma(rgbImg[2]/255.0f);  
  2. float X=0.412453*R+0.357580*G+0.180423*B;  
  3. float Y=0.212671*R+0.715160*G+0.072169*B;  
  4. float Z=0.019334*R+0.119193*G+0.950227*B;  
  5. float X/=95.047;  
  6. float Y/=1000.0;  
  7. float Z/=108.883;  
  8. float FX = X > 0.008856f ? pow(X,1.0f/3.0f) : (7.787f * X +0.137931f);  
  9. float FY = Y > 0.008856f ? pow(Y,1.0f/3.0f) : (7.787f * Y +0.137931f);  
  10. float FZ = Z > 0.008856f ? pow(Z,1.0f/3.0f) : (7.787f * Z +0.137931f);  
  11. labImg[0] = Y > 0.008856f ? (116.0f * FY - 16.0f) : (903.3f * Y);  
  12. labImg[1] = 500.f * (FX - FY);  

    上面是完全按照转换算法做的无优化的实现,里面涉及了大量的浮点运算,在PC上可能没什么问题,但是如果是在Android操作系统的移动端上,即使利用JNI,把转换算法写成C++版本进行加速,速度也不理想,因为这个操作时逐像素的,每个像素做几十次浮点运算,耗时还是十分巨大的
点击打开链接


http://chatgpt.dhexx.cn/article/dqBEu9cK.shtml

相关文章

matlab中的xlabel, ylabel, zlabel

随时随地阅读更多技术实战干货&#xff0c;获取项目源码、学习资料&#xff0c;请关注源代码社区公众号(ydmsq666) 标注x&#xff0c;y和z轴 语法 xlabel(string) xlabel(fname) xlabel(...,PropertyName,PropertyValue,...) xlabel(axes_handle,...) h xlabel(...) ylabel…

在CIELab颜色空间下使用八方向Sobel算子实现边缘检测

参考河北师范大学硕士学位论文——基于八方向Sobel算子的边缘检测算法研究。 由于自己实现滤波器运算&#xff0c;计算速度很慢&#xff0c;以后有能力再进行改进。 算子定义如下&#xff1a; 算法思路&#xff1a; 1.将RGB图像转化为CIELab颜色空间的图像。 2.计算不同方…

RGB转Lab的那些事(一)

Matlab与OpenCV都有RGB转Lab的具体实现&#xff0c;然而两种版本给出的结果似乎并不一样&#xff0c;那么两者有何区别呢&#xff1f; 首先了解RGB转Lab的理论知识&#xff1a; 一般地&#xff0c;由RGB转Lab都需要先将RGB转为XYZ&#xff0c;再由XYZ转为Lab。通常我们获取的…

CIE颜色空间

国际照明委员会&#xff08;CIE&#xff0c;Commission Internationale de LEclairage / International&#xff09;的色度模型是最早使用的模型之一。它是三维模型&#xff0c;其中&#xff0c;x和y两维定义颜色&#xff0c;第3维定义亮度。 CIE 1931RGB 1.颜色匹配实验 根…

LAB色彩模型

LAB色彩模型 LAB色彩模式名称由来组成数值范围 优点设备无关。色域宽阔 Adobe photoshop中的LAB: LAB色彩模式 名称由来 Lab的全称是CIELAB&#xff0c;有时候也写成CIE Lab*。 是根据Commission International Eclairage&#xff08;CIE&#xff09;在1931年所制定的一种测定…

彻底搞懂Lab 颜色空间

本文参考wikipedia&#xff0c;并加入了自己的理解&#xff0c;有不对的地方多多指教~ 名称 在开始之前&#xff0c;先明确一下Lab颜色空间&#xff08;Lab color space&#xff09;的名字&#xff1a; - Lab的全称是CIELAB&#xff0c;有时候也写成CIE L*a*b* - 这里的CIE…

颜色空间之CIE色度模型

国际照明委员会&#xff08;CIE&#xff0c;Commission Internationale de LEclairage / International&#xff09;的色度模型是最早使用的模型之一。它是三维模型&#xff0c;其中&#xff0c;x和y两维定义颜色&#xff0c;第3维定义亮度。CIE在1976年规定了两种颜色空间。 一…

Matlab中CIC滤波器的应用

Matlab中CIC滤波器的应用 CIC滤波器基本原理 CIC&#xff08;积分梳状级联&#xff09;滤波器是工程上经常用的滤波器&#xff0c;因为CIC滤波器不需要乘法&#xff0c;CIC滤波器往往在级联抽取滤波器的第一级和级联插值滤波器的最后一级。这一节我们以CIC抽取滤波器为例来讲C…

OpenCV中Lab空间简介及RGB转Lab

Lab颜色模式简介&#xff1a; From&#xff1a;http://wenku.baidu.com/view/67b1b11f650e52ea551898f7.html OpenCV中使用cvCvtColor加CV_BGR2Lab转成CIELAB后取值范围&#xff1a; 有时根据需要&#xff0c;我们使用 cvCvtColor( img, img, CV_BGR2Lab );把色彩空间从RGB转换…

【CIC滤波器】基于MATLAB/FPGA的数字CIC滤波器的设计

FPGA代码&#xff1a; module down(i_clk,//输入时钟i_rst,//输入复位信号i_M, //抽取值i_data,//输入信号o_data,//输出信号r_clk);input i_clk;//输入时钟 input i_rst;//输入复位信号 input [7:0] i_M; //抽取值 input signe…

CIE RGB、CIE XYZ、 Lab空间转换

颜色空间转换 CIE RGB转化到CIE XYZCIE XYZ到Lab空间 CIE RGB转化到CIE XYZ 由于CIE RGB空间在描述色彩时会出现负值&#xff0c;因此为了方便计算&#xff08;1931年&#xff09;&#xff0c;CIE提出了一种新的色彩空间 CIE XYZ。 转换公式如下&#xff1a; 可见&#xff0c;…

【Matlab 图像】LAB 色彩空间分析

名称 在开始之前&#xff0c;先明确一下Lab颜色空间&#xff08;Lab color space&#xff09;的名字&#xff1a; Lab的全称是CIELAB&#xff0c;有时候也写成CIE Lab*这里的CIE代表International Commission on Illumination&#xff08;国际照明委员会&#xff09;&#xf…

C计算CIELAB、CIELUV均匀颜色空间中两种颜色的色差

C计算CIELAB、CIELUV均匀颜色空间中两种颜色的色差 ** 如何利用C语言计算两种颜色在CIELAB、CIELUV的总色差&#xff1f;例如&#xff1a;已知两颜色样品的色度值为&#xff1a;Y176.79&#xff0c;x10.4480&#xff0c; y10.3478&#xff1b;Y275.67&#xff0c;x20.4621&…

CIE颜色空间LCh、Lab、XYZ-sRGB介绍与转换关系(包含源码)

项目场景&#xff1a; 提示&#xff1a;在颜色科学中&#xff0c;LCh和Lab是比较常用的 LCh是由MATLAB计算出的数据&#xff0c;但是我所需要在Qt的q3dsurface绘制出这个切面&#xff0c;看了Qt官方Examples&#xff0c;墨西哥草帽算法的3D模型就是由XYZ组成的。所以我需要LC…

RGB和CIELAB颜色空间转换及偏色检测

RGB转为CIELAB 首先RGB是不可以直接转为CIELAB颜色空间的&#xff0c;RGB需要先转为CIEXYZ颜色空间&#xff0c;然后再由CIEXYZ颜色空间转为CIELAB颜色空间。关于这2个颜色空间的互转&#xff0c;主要参考了http://www.cnblogs.com/Imageshop/archive/2013/02/02/2889897.html…

sRGB转CIEXYZ转CIELAB,以及色彩距离

sRGB是标准色彩空间 是一个微软和惠普于1996年定义的标准色彩空间 如果想从sRGB转到CIEXYZ空间&#xff0c;要乘以这个矩阵&#xff1a; 得到CIEXYZ之后&#xff0c;可以再转成CIELAB&#xff1a; 其中 X 0 , Y 0 , Z 0 X_0, Y_0, Z_0 X0​,Y0​,Z0​是定义的参考白点&#…

深入理解color model(颜色模型)

什么是颜色 Wiki是这样说的&#xff1a;颜色或色彩是通过眼、脑和我们的生活经验所产生的一种对光的视觉效应。嗯&#xff0c;简单点说&#xff0c;颜色就是人对光的一种感觉&#xff0c;由大脑产生的一种感觉。感觉是一个很主观的东西&#xff0c;你怎么确定你看到的红色和我…

深度学习AI美颜系列---肤色相似度计算(CIELAB色差计算)

深度学习AI美颜系列---肤色相似度计算&#xff08;CIELAB色差计算&#xff09; 在AI美颜中&#xff0c;经常会用到肤色相似度计算&#xff0c;如何实现这个算法&#xff1f; 步骤如下&#xff1a; 1&#xff0c;人脸皮肤分割&#xff1b; 2&#xff0c;对人脸皮肤分割结果进…

彩色图像--色彩空间 CIELAB、CIELUV

学习DIP第65天 转载请标明本文出处&#xff1a;http://blog.csdn.net/tonyshengtan &#xff0c;出于尊重文章作者的劳动&#xff0c;转载请标明出处&#xff01;文章代码已托管&#xff0c;欢迎共同开发&#xff1a;https://github.com/Tony-Tan/DIPpro 更多图像处理机器学习内…

【视觉基础篇】10 # 图形系统如何表示颜色?

说明 【跟月影学可视化】学习笔记。 RGB 和 RGBA 颜色 RGB 和 RGBA 的颜色表示法 #RRGGBB 是 RGB 颜色的十六进制表示法&#xff0c;其中 RR、GG、BB 分别是两位十六进制数字&#xff0c;表示红、绿、蓝三色通道的色阶。 色阶可以表示某个通道的强弱。 每个通道一共有 25…