Steven Wang's Blog
C'est la vie
rss
email
twitter
新浪微博
  • Home
  • About
  • Google Profile
  • 新浪微博

在Matlab中实现RGB颜色空间转换为Lab颜色空间

1 Comments
Posted on 六月 27 2010

这两天做实验要用到Lab颜色空间,图像从常规的RGB颜色空间转换为Lab颜色空间,在Matlab中没有现成的实现,而网上搜到的很多算法与书本上的总有些差距,并且效果不佳,所以自己按照书上的转换公式写了段程序。

Lab颜色空间的介绍,可以参考维基百科的Lab色彩空间,但其最后的转换公式不够完备。

Lab颜色空间一般从XYZ颜色空间导出,因此首先要从RGB颜色空间转换到XYZ颜色空间,转换公式如下:

从XYZ颜色空间到Lab颜色空间的转换关系为:

其中,Xn、Yn、Zn是参考白光的三色刺激值,而

根据以上的公式,可以得到相应的Matlab程序如下:

rgb2lab.m文件:

function [labFrame] = rgb2lab(rgbFrame)
% RGB色彩空间到Lab色彩空间的转换

    %初始化变量
    [frameHeight, frameWidth, frameDepth] = size(rgbFrame);
    labFrame = zeros(frameHeight, frameWidth, frameDepth);
    l = zeros(frameHeight, frameWidth);
    
    %RGB转换到XYZ
    R = double(rgbFrame(:, :, 1));
    G = double(rgbFrame(:, :, 2));
    B = double(rgbFrame(:, :, 3));
    X = 0.412 * R + 0.358 * G + 0.180 * B;
    Y = 0.213 * R + 0.715 * G + 0.072 * B;
    Z = 0.019 * R + 0.119 * G + 0.950 * B;
    x = X / 255;
    y = Y / 255;
    z = Z / 255;
    
    %XYZ转换到Lab
    index = find(y > 0.008856);
    l(index) = 166 .* y(index) .^ (1 / 3);
    index = setdiff((1 : frameHeight * frameWidth)', index);
    l(index) = 903.3 .* y(index);
    labFrame(:, :, 1) = l;
    labFrame(:, :, 2) = 500 .* (rgb2labft(x) - rgb2labft(y));
    labFrame(:, :, 3) = 200 .* (rgb2labft(y) - rgb2labft(z));
end

rgb2labft.m文件:

function ft = rgb2labft(t)
    [r, c] = size(t);
    ft = zeros(r, c);
    index = find(t > 0.008856);
    ft(index) = t(index) .^ (1 / 3);
    index = setdiff((1 : r * c)', index);
    ft(index) = 7.787 .* t(index) + 16 / 116;
end

此外,相应的逆变换也可以推导出来,详情请见参考资料。

 

Resources & Reference:
1、林福宗. 多媒体技术基础(第3版) [M]. 北京:清华大学出版社,2009,第6章,PPT链接.

--End--
作者:Steven Wang | 可以转载, 转载时务必以超链接形式标明文章原始出处和作者信息及版权声明
网址:http://blog.stevenwang.name/rgb-lab-matlab-246001.html

Relate Posts:

  • Matlab7.1读xvid编码的avi视频文件
  • 在Matlab中实现图像直方图均衡化
  • 在Matlab中使用Roberts算子进行边缘检测
  • 在Matlab中实现Hough变换检测直线

Tags: 颜色空间  matlab 
Categories: 数字图像处理 

1 Comments

  1. jill says:
    九月 21 2010 at 11:16 Reply

    结果里怎么会有负值?哪里错了?

Leave a Reply



About Me

    Steven Wang
    Student in Computer Software and Theory
    Life@Wuxi, Jiangsu
    Study@Jiangnan University
    more...

Feeds

  • Entries (RSS)
  • Comments (RSS)
  • 订阅到 Google Reader
  • 订阅到 抓虾
  • 订阅到 鲜果
  • 订阅到 QQ

Popular Posts

  • 围着脖子推GTalk机器人V1.0发布(26629)
  • 通过SSH + Chrome + Proxy Switchy!代理上网(19478)
  • 在GAE上部署Micolog博客系统(11098)
  • 围着脖子推V2.0 Beta1版发布 支持Twitter,新浪微博,人人网,嘀咕,做啥 同步更新(10660)
  • 围着脖子推GTalk机器人V1.0更新-增加接收Twitter更新等功能(10464)
  • 围着脖子推更新-增加同步更新网易微博、腾讯微博和搜狐微博(10092)
  • 在Matlab中实现Hough变换检测直线(8247)
  • Micolog主题(theme) —— translucence(7416)

Recent Posts

  • Steven Wang's 2011
  • 工作
  • T400升级Intel SSD
  • Java中的时区转换小结
  • 二值图像连通区标记之区域生长法
  • Steven Wang's 2010
  • 微博提醒应用上线
  • 双喜临门

Recent Comments

  • zhoudi:惊诧了,看来你应该和我是同门师兄弟。。。...
  • zhoudi:哇,校友。Wang Shitong的研究...
  • xiaozhang:第37这一行:int jMax = mi...
  • 小张:这一行:int jMax = min(w...
  • 小张:为什么运行出错呢...

Categories

  • Google App Engine(10)
  • 数字图像处理(11)
  • Micolog(7)
  • VPS(6)
  • 围着脖子推(15)
  • 人工神经网络(5)
  • 算法(11)
  • MyLife(16)
  • 媒体检索(4)
  • Others(8)
  • Python(2)

Archives

  • January 2012(1)
  • December 2011(2)
  • May 2011(1)
  • February 2011(1)
  • December 2010(3)
  • November 2010(1)
  • October 2010(1)
  • September 2010(4)
  • August 2010(2)
  • July 2010(5)
  • June 2010(4)
  • May 2010(7)

Blog roll

  • ~Issue
  • Fenng
  • 刘未鹏 | Mind Hacks
  • Grace Hopper
  • 林海听松
  • Yu Zheng
  • Johnny Han
  • xiang_闹闹
  • 静静的安静
  • Herei
  • Dbger
  • land of promise
  • 小龙的SEO学习之路
  • 星星
  • ISHENS|TECH
  • 天天软件园
  • joyone
  • leezhenchong's notes

  • Home
  • About
  • Google Profile
  • Twitter
  • 新浪微博
  • Login
Powered by Google App Engine  |   Designed by WebTreats  |   由 xuming 提供 Micolog程序