Lab颜色空间及其应用

Lab颜色空间及其应用

from: http://nkwavelet.blog.163.com/blog/static/227756038201441624345947/

本文首先阐述Lab颜色模式的基本特性,然后介绍RGB和Lab颜色空间互相转换的算法,并给出算法核心代码和效果图,最后将Lab颜色空间应用到几个特效滤镜中,得到几个类似photoshop滤镜效果图。

【参考资料】 
http://hi.baidu.com/im_wxj/item/c43e52cbaab6373399b4984d
http://hao.qinz.net/comments.php?y=08&m=07&entry=entry080727-033517

http://blog.sina.com.cn/s/blog_46e3af5b0100u7wt.html               ( 该文中的代码有bug,在本文中已经修正 )

1. Lab颜色空间简介

      Lab是一种色彩空间,也即一种颜色模型,是在1931年国际照明委员会(CIE)制定的颜色度量国际标准的基础上建立的,在1976年又经修订并被命名为CIELab。这是一种与设备无关的颜色系统,也是一种基于生理特性的颜色系统,以数字化方式来描述人的视觉感应。它适用于一切光源色体或物体色的表示与计算。
      在Lab颜色空间中,一种颜色由L(亮度)、a颜色、b颜色三种参数表征.L表示照度(Luminosity),相当于亮度,L取值为0 -- 100(纯黑--纯白)。a表示从绿色至 红色 的范围,a取值为 -128 -- +127 ( 绿 --  洋红)。b表示从 蓝色 黄色的范围,b取值为 -128 -- +127( 蓝 --  黄).正为暖色,负为冷色.
    
 Lab颜色模式的特点:
     a)   Lab颜色空间中亮度和颜色是分开的, L通道没有颜色,a通道和b通道只有颜色。
     b)   在Lab中进行调节很简单,速度很快.
     c)   色域宽阔 。它不仅包含了RGB,CMYK的所有色域,还能表现它们不能表现的色彩,人的肉眼能感知的色彩,都能通过Lab模型表现出来.
     d)   它弥补了RGB色彩模型和CMYK色彩模式色彩分布不均的不足.
      下图所示为Lab颜色空间的图示:
      Lab颜色空间及其应用 - nkwavelet - 小波的世界     

2.  Lab和RGB颜色空间之间互转
     我们可以先观察RGB到XYZ的转换:
      Lab颜色空间及其应用 - nkwavelet - 小波的世界
     计算完成后,XYZ的取值范围分别是:[0, 0.950456],[0, 1],[0, 1.088754].  
     然后是XYZ到Lab的转换:
      Lab颜色空间及其应用 - nkwavelet - 小波的世界      
      其中函数 f(t) 的定义如下:
      Lab颜色空间及其应用 - nkwavelet - 小波的世界
      计算完成后,L的取值范围 [0, 100],而a和b则为[-128, +127] 和 [-128, +127]。
      接下来给出RGB和Lab互相转换的代码及效果图,此处代码将Lab数据归一化到 [0, 1] 区间。
     Lab颜色空间及其应用 - nkwavelet - 小波的世界       Lab颜色空间及其应用 - nkwavelet - 小波的世界
                                                 原始图                                                     RGB->Lab->RGB(中间未作任何处理) 

Lab颜色空间及其应用 - nkwavelet - 小波的世界      Lab颜色空间及其应用 - nkwavelet - 小波的世界
                                                   原始图                                                     RGB->Lab->RGB(中间未作任何处理) 

   // 将RGB转化为Lab值函数
    void RGB2Lab(int R, int G, int B, double &L, double &a, double &b)
    {
    double x,   y,  z;
    double fx, fy, fz;

    // 转至X-Y-Z
    x = 0.412453 * R + 0.357580 * G + 0.180423 * B;
    y = 0.212671 * R + 0.715160 * G + 0.072169 * B;
    z = 0.019334 * R + 0.119193 * G + 0.950227 * B;

    // 除以255,即归一化
    x /= (255.0 * 0.950456);
    y /=  255.0;
    z /= (255.0 * 1.088754);

    // 类似Gamma校正
    if (y > 0.008856)
fy = pow(y, 1.0/3.0);
    else
fy = 7.787 * y + 16.0 / 116.0;

    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;
    L = 116.0 * fy - 16.0;// 对于 y <= 0.008856 的情况,该公式可以简化为 L = 903.3 * y
    a = 500.0 * (fx - fy);
    b = 200.0 * (fy - fz);

    // Lab值归一化
    L = L / 100.0;
    a = (a + 128.0) / 255.0;
    b = (b + 128.0) / 255.0;
     }

    // 将Lab转化为RGB值函数
    void Lab2RGB(double L, double a, double b, int &R, int &G, int &B)
   {
    double  x,  y,  z;
    double fx, fy, fz;
    double dr, dg, db;

    L = L * 100.0;
    a = a * 255.0 - 128.0;
    b = b * 255.0 - 128.0;
   
    fy = (L + 16.0) / 116.0;
    fy = fy*fy*fy;

    if (fy > 0.008856)
   {
y = fy;
fy = (L + 16.0) / 116.0;
    }
    else
    {
y = L / 903.3;
fy = 7.787 * y + 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);
    else
z = (fz - 16.0/116.0) / 7.787;

    x *= (255.0 * 0.950456);
    y *= 255.0;
    z *= (255.0 * 1.088754);
   
    dr =  3.240479 * x  - 1.537150 * y - 0.498535 * z;
    dg = -0.969256 * x  + 1.875992 * y + 0.041556 * z;
    db =  0.055648 * x  - 0.204043 * y + 1.057311 * z;

    R = (dr < 0.0) ? 0 : (dr > 255.0) ? 255 : (unsigned int)dr;
    G = (dg < 0.0) ? 0 : (dg > 255.0) ? 255 : (unsigned int)dg;
    B = (db < 0.0) ? 0 : (db > 255.0) ? 255 : (unsigned int)db;
      }
    
     3.  Lab颜色小应用
        人在看物体时,首先看到的是明暗,次之是色彩,Lab模式就是这样的。
          L通道 : 调整图像的亮度,当然亮度有暗、中间调和高光区之分。对亮度实施线性或Gamma等变换相当于在图像上添加强光或暗光。
         
a通道 : 深绿 --- 50%灰(中性灰)--  红色。 
         
b通道 : 亮蓝 --- 50%灰(中性灰)--- 黄色
        在用photoshop给照片添加暖色或冷色,就是在Lab空间 中调节这3个参数。暖色通常有红紫、红、橘、黄橘、黄,因此需要将ab通道值加强冷色通常有蓝绿、蓝青、蓝、蓝紫,因此需要调低ab通道值。以下为程序生成的暖色、冷色、强光、暗光效果图:
Lab颜色空间及其应用 - nkwavelet - 小波的世界     Lab颜色空间及其应用 - nkwavelet - 小波的世界
                                                                  暖色                                                                  冷色
Lab颜色空间及其应用 - nkwavelet - 小波的世界     Lab颜色空间及其应用 - nkwavelet - 小波的世界
                                                                  强光                                                                  暗光
  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值