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); |
|