几种颜色模型的转换--lxs

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1颜色模型:所谓颜色模型就是指某个三维颜色空间中的一个可见光子集,它包含某个颜色域的所有颜色。

颜色模型的用途是在某个颜色域内方便的指定颜色,由于每一个颜色域都是可见光的子集,所以任何一个颜色模型都无法包含所有的可见光。

在大多数的彩色图形显示设备一般都是使用红、绿、蓝三元色,我们的真实感图形学中的主要的颜色模型也是RGB 模型,但是红、绿、蓝颜色模型用起来不太方便,它与直观的颜色概念如色调、饱和度和亮度等没有直接的联系。

2 RGB 向HSI 模型的转换是由一个基于笛卡尔直角坐标系的单位立方体向基于圆柱极坐标的双锥体的转换。

基本要求是将RGB 中的亮度因素分离,将色度分解为色调和饱和度,并用角向量表示色调,如图2所示。

2. RGB 转换至HSI的几种常见方法
下图列出几种常用的RGB-HSI转换公式:
Matlab算法实现:
标注:这里是采用算法1,几何推导法实现的
%将RGB图像转换为HSI图像
% 显示HSI图像
%直方图均衡化HSI图像
%将HSI图像转换回RGB图像
function rgbtohsi(x)
F=imread('123.jpg'); %%相对路径下的文件图片
F=im2double(F);
r=F(:,:,1);
g=F(:,:,2);
b=F(:,:,3);
th=acos((0.5*((r-g)+(r-b)))./((sqrt((r-g).^2+(r-b).*(g-b)))+eps)); H=th;
H(b>g)=2*pi-H(b>g);
H=H/(2*pi);
S=1-3.*(min(min(r,g),b))./(r+g+b+eps);
I=(r+g+b)/3;
hsi=cat(3,H,S,I);
HE=histeq(HE);
HE=HE/(2*pi);
SE=histeq(S);
IE=histeq(I);
choice=input('1:RGB 转换为 HSI\n2:显示HSI图像\n3:HSI转换为RGB图像\n4:色调均衡\n5:饱和度均衡\n6:亮度均衡 \n7:HSI均衡\n 输入您的选择 :');
switch choice
case 1
figure,imshow(F),title('RGB 图像');
figure, imshow(hsi),title('HSI 图像');
case 2
figure,imshow(F),title('RGB 图像');
figure, imshow(H),title('Hue 图像');
figure, imshow(S),title('饱和度图像');
figure, imshow(I),title('亮度图像');
case 3
C=hsitorgb(hsi);
figure,imshow(hsi),title('HSI 图像');
figure, imshow(C),title('RGB 图像');
case 4
RV=cat(3,HE,S,I);
C=hsitorgb(RV);
figure,imshow(hsi),title('HSI 图像');
figure,imshow(F),title('RGB 图像');
figure, imshow(C),title('RGB Image-Hue Equalized');
case 5
RV=cat(3,H,SE,I);
C=hsitorgb(RV);
figure,imshow(hsi),title('HSI 图像');
figure,imshow(F),title('RGB 图像');
figure, imshow(C),title('RGB 饱和度均衡');
case 6
RV=cat(3,H,S,IE);
C=hsitorgb(RV);
figure,imshow(hsi),title('HSI 图像');
figure,imshow(F),title('RGB 图像');
figure, imshow(C),title('RGB 亮度均衡');
case 7
RV=cat(3,HE,SE,IE);
C=hsitorgb(RV);
figure,imshow(hsi),title('HSI 图像');
figure,imshow(F),title('RGB 图像');
figure, imshow(C),title('RGB HSI 均衡');
display('选择错误');
end
end
%函数,将HSI图像转换为RGB图像
function C=hsitorgb(hsi)
HV=hsi(:,:,1)*2*pi;
SV=hsi(:,:,2);
IV=hsi(:,:,3);
R=zeros(size(HV));
G=zeros(size(HV));
B=zeros(size(HV));
%RG Sector
id=find((0<=HV)& (HV<2*pi/3));
B(id)=IV(id).*(1-SV(id));
R(id)=IV(id).*(1+SV(id).*cos(HV(id))./cos(pi/3-HV(id)));
G(id)=3*IV(id)-(R(id)+B(id));
%BG Sector
id=find((2*pi/3<=HV)& (HV<4*pi/3));
R(id)=IV(id).*(1-SV(id));
G(id)=IV(id).*(1+SV(id).*cos(HV(id)-2*pi/3)./cos(pi-HV(id)));
B(id)=3*IV(id)-(R(id)+G(id));
%BR Sector
id=find((4*pi/3<=HV)& (HV<2*pi));
G(id)=IV(id).*(1-SV(id));
B(id)=IV(id).*(1+SV(id).*cos(HV(id)-4*pi/3)./cos(5*pi/3-HV(id))); R(id)=3*IV(id)-(G(id)+B(id));
C=cat(3,R,G,B);
C=max(min(C,1),0);
end
3
从相关的文献包括OpenCv的文档中可找到两者的理论转换算式如下: [X] [0.412453 0.357580 0.180423] [R]
[Y] = [0.212671 0.715160 0.072169] [G]
[Z] [0.019334 0.119193 0.950227] [B]
[R] [3.240479 -1.537150 -0.498535] [X]
[G] = [-0.969256 1.875992 0.041556] [Y]
[B] [0.055648 -0.204043 1.057311] [Z]
(注:可编辑下载,若有不当之处,请指正,谢谢!)。

相关文档
最新文档