MATLAB 将RGB颜色空间转为HSI颜色空间、LAB颜色空间 原理及程序 |
您所在的位置:网站首页 › RGB数字颜色模型是怎么定义的 › MATLAB 将RGB颜色空间转为HSI颜色空间、LAB颜色空间 原理及程序 |
一张彩色图像是由R、G、B三个通道组成,所以首先需要将彩色图像分为三个通道的图像。 HSI[Hue-Saturation-Intensity(Lightness),HSI或HSL]颜色模型用H、S、I三参数描述颜色特性,其中H定义颜色的频率,称为色调;S表示颜色的深浅程度,称为饱和度;I表示强度或亮度。 当人观察一个彩色物体时,用色调、饱和度、亮度来描述物体的颜色。色调是描述纯色的属性(纯黄色、橘黄或者红色);饱和度给出一种纯色被白光稀释的程度的度量;亮度是一个主观的描述,实际上,它是不可以测量的,体现了无色的强度概念,并且是描述彩色感觉的关键参数。而强度(灰度)是单色图像最有用的描述子,这个量是可以测量且很容易解释。则将提出的这个模型称作为HSI(色调、饱和度、强度)彩色模型,该模型可在彩色图像中从携带的彩色信息(色调和饱和度)里消去强度分量的影响,使得HSI模型成为开发基于彩色描述的图像处理方法的良好工具,而这种彩色描述对人来说是自然而直观的。 HSI模型是美国色彩学家孟塞尔(H.A.Munseu)于1915年提出的,它反映了人的视觉系统感知彩色的方式,以色调、饱和度和强度三种基本特征量来感知颜色。 HSI模型与RGB模型关系 彩色图像可以采用RGB或HSI等颜色模型来描述,它们之间存在着严格的数学关系,可以相互转换。实际应用时,应该根据需要选择适当的颜色模型。 HSI颜色模型中的H分量是确定颜色的主要因素,当它发生变化时色调值也将变化;S分量越大(接近1),颜色越纯,S分量越小(接近0),颜色越接近纯灰色。由此可见,与RGB颜色模型相比,HSI颜色模型比较符合人眼对景物颜色的感知。 给定一幅RGB彩色格式图像,每个RGB像素的H分量可用下式得到:
采用上式将RGB图像转为HSI图像 同RGB颜色空间相比Lab是一种不常用的色彩空间。它是在1931年国际照明委员会(CIE)制定的颜色度量国际标准的基础上建立起来的。1976年,经修改后被正式命名为CIELab。它是一种设备无关的颜色系统,也是一种基于生理特征的颜色系统。这也就意味着,它是用数字化的方法来描述人的视觉感应。Lab颜色空间中的L分量用于表示像素的亮度,取值范围是[0,100],表示从纯黑到纯白;a表示从红色到绿色的范围,取值范围是[127,-128];b表示从黄色到蓝色的范围,取值范围是[127,-128]。下图所示为Lab颜色空间的图示;
RGB颜色空间不能直接转换为Lab颜色空间,需要借助XYZ颜色空间,把RGB颜色空间转换到XYZ颜色空间,之后再把XYZ颜色空间转换到Lab颜色空间。 (1) RGB到XYZ颜色空间有如下关系: 仔细观察式(1.7),其中 主程序 path='D:\cat.jpg'; %% RGB I=imread(path); figure(); subplot(231); imshow(I);%显示原始彩色图像title('原始图像'); gray = rgb2gray(I); r = I(:,:,1); %通道R g = I(:,:,2); %通道G b = 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>=B H1=(2*pi-theta).*(g 1.0 || max(max(B)) > 1.0 % R = double(R) / 255; % G = double(G) / 255; % B = double(B) / 255; % end % Set a threshold T = 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 XYZ MAT = [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 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |