分享

matlab 颜色模型之间的转换

 幸福的一个人 2012-05-24
  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);

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多