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. void RGBToLab(unsigned char*rgbImg,float*labImg)
  4. {
[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++版本进行加速,速度也不理想,因为这个操作时逐像素的,每个像素做几十次浮点运算,耗时还是十分巨大的
点击打开链接

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

  1. MATLAB 将RGB颜色空间转为HSI颜色空间、LAB颜色空间 原理及程序

    一张彩色图像是由R.G.B三个通道组成,所以首先需要将彩色图像分为三个通道的图像. 以下是对猫图进行单通道提取得到的图像. HSI颜色空间 HSI[Hue-Saturation-Intensity(L ...

  2. 颜色空间直方图matlab,使用Matlab绘制图像的rgb颜色空间和Lab颜色空间分量图和分量直方图 | 学步园...

    %author sagittariusboy All right reserved 2013年7月28日 14:58:11 org = imread('laaa.jpg'); %org = imrea ...

  3. matlab中lab颜色空间,使用Matlab绘制图像的rgb颜色空间和Lab颜色空间分量图和分量直方图...

    %author sagittariusboy All right reserved 2013年7月28日 14:58:11 org = imread('laaa.jpg'); %org = imrea ...

  4. RGB、HSV和Lab颜色空间

    https://blog.csdn.net/fred_yang2013/article/details/11083691 http://blog.csdn.net/carson2005/article ...

  5. 对Lab颜色空间的学习(转)

    [摘要] 本文阐述了Lab颜色模式的基本特性,从数字图像处理方面介绍了Lab颜色模式的应用以及与其他常用色彩模式进行了比较!这种用数学理论量化的色彩空间使不同设备的色彩能够相互比较.模拟和匹配.在数字 ...

  6. RGB与Lab颜色空间互相转换

    RGB与Lab颜色空间互相转换 1.Lab颜色空间 同RGB颜色空间相比(见博客<光与色的故事--颜色空间浅析>),Lab是一种不常用的色彩空间.它是在1931年国际照明委员会(CIE)制 ...

  7. OpenCV4机器学习(三):颜色空间(RGB、HSI、HSV、Lab、Gray)之间的转换

    前言: 本专栏主要结合OpenCV4(C++版本),来实现一些基本的图像处理操作.经典的机器学习算法(比如K-Means.KNN.SVM.决策树.贝叶斯分类器等),以及常用的深度学习算法. 系列文章: ...

  8. RGB与Lab颜色空间互相转换 持续更新中

    RGB与Lab颜色空间互相转换 1.Lab颜色空间 同RGB颜色空间相比(见博客<光与色的故事–颜色空间浅析>),Lab是一种不常用的色彩空间.它是在1931年国际照明委员会(CIE)制定 ...

  9. Python实现RGB和Lab颜色空间互转

    Python实现RGB和Lab颜色空间互转 https://github.com/rubund/debian-home-assistant/blob/1a3e8f7e4b9ddec60a4380e14 ...

最新文章

  1. 用产品思路建设中台,这走得通吗?| 白话中台
  2. 利用OpenCV+ConvNets检测几何图形
  3. 安装sql server 2008 报错
  4. java common io_Java之Apache Commons-IO使用精讲
  5. U3D Debug.log的问题
  6. 使用jQuery图表插件Sparklines来开发一个实用的网站PV(page view)实时监控应用
  7. html5做的太阳系
  8. [分享]天轰穿VS2005视频教程
  9. maven安装过程以及手动添加jar包到本地仓库
  10. linux+硬盘rd5,Raid磁盘阵列
  11. 引入mui后,radio单选框不可点击问题解决
  12. 那些年我们office_那些年,我们的传奇三
  13. 2.1.5、会员权限管理系统应用
  14. Android Studio 升级到3.0后出现编译错误\.gradle\caches\transforms-1\files-1.1\*****-release.aar
  15. React实现实时/局部刷新
  16. 偶像来了 | 英雄请一起跳支舞!
  17. JS获取json子项/数组的个数/长度
  18. libev中ev_loop结构体中宏定义的理解
  19. oracle 安装后密码,oracle 11g 安装后默认密码
  20. vulnhub靶场,FirstBlood

热门文章

  1. 狂神说,mybatis-01 java.lang.ExceptionInInitializerError at com.kuang.dao.UserDaoTest.selectUser(UserD
  2. 因为计算机丢失D3DCOMPILER_47.dll 的解决方法
  3. 高职网络系统管理国赛--网络赛题1路由选路解析
  4. 计算机内部应用什么计算,计算机内部使用什么来计数
  5. mysql 创建日历表
  6. linux宝塔计划任务脚本内容怎么写,宝塔Linux面板计划任务按秒数执行脚本
  7. 活久见系列:微信推出收费服务了!
  8. 你见过的最差的程序员是怎样的?
  9. 一文读懂数据仓库、数据湖、湖仓一体
  10. UE4 通过UI蓝图来控制游戏的暂停和返回