失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > MATLAB 将RGB颜色空间转为HSI颜色空间 LAB颜色空间 原理及程序

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

时间:2019-01-25 22:49:18

相关推荐

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

一张彩色图像是由R、G、B三个通道组成,所以首先需要将彩色图像分为三个通道的图像。

以下是对猫图进行单通道提取得到的图像。

HSI颜色空间

HSI[Hue-Saturation-Intensity(Lightness),HSI或HSL]颜色模型用H、S、I三参数描述颜色特性,其中H定义颜色的频率,称为色调;S表示颜色的深浅程度,称为饱和度;I表示强度或亮度。

当人观察一个彩色物体时,用色调、饱和度、亮度来描述物体的颜色。色调是描述纯色的属性(纯黄色、橘黄或者红色);饱和度给出一种纯色被白光稀释的程度的度量;亮度是一个主观的描述,实际上,它是不可以测量的,体现了无色的强度概念,并且是描述彩色感觉的关键参数。而强度(灰度)是单色图像最有用的描述子,这个量是可以测量且很容易解释。则将提出的这个模型称作为HSI(色调、饱和度、强度)彩色模型,该模型可在彩色图像中从携带的彩色信息(色调和饱和度)里消去强度分量的影响,使得HSI模型成为开发基于彩色描述的图像处理方法的良好工具,而这种彩色描述对人来说是自然而直观的。

HSI模型是美国色彩学家孟塞尔(H.A.Munseu)于19提出的,它反映了人的视觉系统感知彩色的方式,以色调、饱和度和强度三种基本特征量来感知颜色。

HSI模型与RGB模型关系

彩色图像可以采用RGB或HSI等颜色模型来描述,它们之间存在着严格的数学关系,可以相互转换。实际应用时,应该根据需要选择适当的颜色模型。

HSI颜色模型中的H分量是确定颜色的主要因素,当它发生变化时色调值也将变化;S分量越大(接近1),颜色越纯,S分量越小(接近0),颜色越接近纯灰色。由此可见,与RGB颜色模型相比,HSI颜色模型比较符合人眼对景物颜色的感知。

HSI模型与RGB模型转换关系

给定一幅RGB彩色格式图像,每个RGB像素的H分量可用下式得到:

其中,

饱和度分量由下式给出:

最后,亮度分量由下式给出:

采用上式将RGB图像转为HSI图像

四、 CIE-Lab颜色空间

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

RGB转Lab颜色空间

RGB颜色空间不能直接转换为Lab颜色空间,需要借助XYZ颜色空间,把RGB颜色空间转换到XYZ颜色空间,之后再把XYZ颜色空间转换到Lab颜色空间。

(1) RGB到XYZ颜色空间有如下关系:

仔细观察式(1.7),其中

各系数相加之和为0.950456,非常接近于1,我们知道R/G/B的取值范围为[ 0,255 ],如果系数和等于1,则X的取值范围也必然在[ 0,255 ]之间,因此我们可以考虑等比修改各系数,使其之和等于1,这样就做到了XYZ和RGB在同等范围的映射。这也就是为什么代码里X,Y,Z会分别除以0.950456、1.0、1.088754。

(2) XYZ颜色空间到Lab颜色空间的转换

上面两个公式中,L*,a*,b*是最终的LAB色彩空间三个通道的值。X,Y,Z是RGB转XYZ后计算出来的值,Xn,Yn,Zn一般默认是95.047,100.0,108.883。

上图展示了将原图转换到Lab色彩空间后,单通道结果。从左到右依次是L通道、a通道、b通道。其中L通道代表亮度通道,L单通道图像与gray图像结果相似。a通道在深绿部分的值最低,洋红部分值最高。

主程序

path='D:\cat.jpg';%% RGBI=imread(path);figure();subplot(231);imshow(I);%显示原始彩色图像title('原始图像');gray = rgb2gray(I);r = I(:,:,1); %通道Rg = I(:,:,2); %通道Gb = I(:,:,3); %通道B% figure();subplot(232);imshow(r);title('r');% figure();subplot(233);imshow(g);title('g');% figure();subplot(234);imshow(b);title('b');%% HSI颜色空间iHsi=rgb2hsi(I);figure();hsi_H=iHsi(:,:,1); %色调hsi_S=iHsi(:,:,2); %饱和度hsi_I=iHsi(:,:,3); %亮度subplot(131);imshow(hsi_H);title('H(色调)');subplot(132);imshow(hsi_S);title('S(饱和度)');subplot(133);imshow(hsi_I);title('I(亮度)');%% CIE颜色空间iLab = RGB2Lab(I);L=iLab(:,:,1); %色调a=iLab(:,:,2); %饱和度 b=iLab(:,:,3); %亮度figure();subplot(131);imshow(L,[]);title('L(亮度)');subplot(132);imshow(a,[]);title('a(深绿-洋红)');subplot(133);imshow(b,[]);title('b(袅蓝-焦黄)');

rgb转hsi程序

function [hsi] = rgb2hsi(rgb)%UNTITLED3 此处显示有关此函数的摘要% 此处显示详细说明rgb=im2double(rgb);r=rgb(:,:,1);g=rgb(:,:,2);b=rgb(:,:,3);% H 单位弧度num=0.5*((r-g)+(r-b));den=sqrt( (r-g).^2 + (r-b).*(g-b) );theta=acos(num./(den+eps)); %分母+eps防止为0 acos得到的是弧度H0=theta.*(g>=b); %G>=BH1=(2*pi-theta).*(g<b); %G<BH=H0+H1;% %转成角度% H=H.*360./(2*pi);% Snum=3.*min(min(r,g),b);S=1-num./(r+g+b+eps);% II=(r+g+b)/3;H=(H-min(min(H)))./(max(max(H))-min(min(H)));S=(S-min(min(S)))./(max(max(S))-min(min(S)));hsi=cat(3,H,S,I);end

rgb转lab程序

function [Lab] = RGB2Lab(img)%UNTITLED 此处显示有关此函数的摘要% 此处显示详细说明if nargin == 1%nargin:输入参数的个数img=im2double(img);R=img(:,:,1);G=img(:,:,2);B=img(:,:,3);end% if nargin == 1%R = double(img(:,:,1));%G = double(img(:,:,2));%B = double(img(:,:,3));% % end% % if max(max(R)) > 1.0 || max(max(G)) > 1.0 || max(max(B)) > 1.0% R = double(R) / 255;% G = double(G) / 255;% B = double(B) / 255;% end% Set a thresholdT = 0.008856; % (6/29)^3[M, N] = size(R);s = M * N;RGB = [reshape(R,1,s); reshape(G,1,s); reshape(B,1,s)];% RGB to XYZMAT = [0.412453 0.357580 0.180423;0.212671 0.715160 0.072169;0.019334 0.119193 0.950227];XYZ = MAT * RGB;% Normalize for D65 white point% 调整x y z的取值范围在[0,255]X = XYZ(1,:) / 0.950456;Y = XYZ(2,:);Z = XYZ(3,:) / 1.088754;XT = X > T;YT = Y > T;ZT = Z > T;Y3 = Y.^(1/3); % 网络上说要除以Xn Yn Zn,但是除了以后范围跑了% X=X./95.047;% Y=Y./100.0;% Z=Z./108.883;% ~XT:举证0 1 取反fX = XT .* X.^(1/3) + (~XT) .* (7.787 .* X + 4/29);fY = YT .* Y.^(1/3) + (~YT) .* (7.787 .* Y + 4/29);fZ = ZT .* Z.^(1/3) + (~ZT) .* (7.787 .* Z + 4/29);% L = reshape(YT .* (116 * Y3 - 16.0) + (~YT) .* (903.3 * Y), M, N);L = reshape( 116 * fY - 16.0, M, N);a = reshape(500 * (fX - fY), M, N);b = reshape(200 * (fY - fZ), M, N);if nargout < 2%nargout:输出参数的个数Lab = cat(3,L,a,b);% 结果归一化到0-1Lab=Lab./255;end

如果觉得《MATLAB 将RGB颜色空间转为HSI颜色空间 LAB颜色空间 原理及程序》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。