hsv2rgb HSV模型转换为RGB模型
ntsc2rgb NTSC模型转换为RGB模型
rgb2hsv RGB模型转换为HSV模型
rgb2ntsc RGB模型转换为NTSC模型
rgb2ycbcr RGB模型转换为YCbCr模型
ycbcr2rgb YCbCr模型转换为RGB模型
%%%%%%%%%%
彩色图向HSI模型的转换,matlab 里面没现成的函数,需自己编,程序如下:
function [H,S,I]=rgb2hsi(im1);
im3=im1;
im1=im2double(im1);
[m,n,q]=size(im1);
% 获取图像的 RGB 3个通道
R=im1(:,:,1);
G=im1(:,:,2);
B=im1(:,:,3);
% 改变通道来观察图像
figure,subplot(1,3,1),imshow(cat(3,R*0.5,G,B)),title('R通道减半');
set(gcf,'outerposition',get(0,'screensize'));
set(gcf,'NumberTitle','off','Name','改变通道来观察图像');
subplot(1,3,2),imshow(cat(3,R,G*2,B)),title('G通道翻倍');
subplot(1,3,3),imshow(cat(3,R,G,zeros(m,n))),title('B通道为0');
% 观察HSI通道图像
% 因系统没有rgb2hsi函数,只有rgb2hsv函数,所以自己编写程序实现
H=zeros(m,n);
S=H;
for i1=1:m
for i2=1:n
numerator=0.5*(R(i1,i2)-G(i1,i2)+R(i1,i2)-B(i1,i2));
denominator=sqrt((R(i1,i2)-G(i1,i2))^2+(R(i1,i2)-B(i1,i2))*(G(i1,i2)-B(i1,i2)));
theta=acos(numerator/denominator)*180/pi;
if(B(i1,i2)<=G(i1,i2))
H(i1,i2)=theta;
else
H(i1,i2)=360-theta;
end
min1=min(R(i1,i2),G(i1,i2));
min1=min(B(i1,i2),min1);
S(i1,i2)=1-3/(R(i1,i2)+G(i1,i2)+B(i1,i2))*min1;
end
end
I=(R+G+B)/3;
figure,subplot(1,3,1),imshow(H,[]),title('色度图H');
set(gcf,'outerposition',get(0,'screensize'));
set(gcf,'NumberTitle','off','Name','HSI通道图像');
subplot(1,3,2),imshow(S),title('饱和度图S');
subplot(1,3,3),imshow(I),title('强度图I');
%%%%%%%%%%%
RGB to Lab转换:
cform = makecform('srgb2lab');
lab_he = applycform(he,cform);