一、RGB→HSI
function [H,S,I]=rgb2hsi(colorfig)
colorfig=im2double(colorfig);
R=colorfig(:,:,1);G=colorfig(:,:,2);B=colorfig(:,:,3);
theta=acos((0.5*((R-G)+(R-B)))./((R-G).^2+(R-B).*(G-B)).^0.5+eps);
H = theta;
H(B > G) = 2*pi - H(B > G);
H = H/(2*pi);
num = min(min(R, G),B);
den = R +G + B;
den(den == 0) = eps;
S = 1 - 3.* num./den;
H(S == 0) = 0;
I = (R + G + B)/3;
二、HSI→RGB
function [R,G,B]=hsi2rgb(hsi)
H=hsi(:,:,1)*2*pi;
S=hsi(:,:,2);
I=hsi(:,:,3);
R=zeros(size(hsi,1),size(hsi,2));
G=zeros(size(hsi,1),size(hsi,2));
B=zeros(size(hsi,1),size(hsi,2));
%RG 扇区 (0<=H<2*pi/3)
c=find((0<=H) & (H<2*pi/3));
B(c)=I(c).*(1-S(c));
R(c)=I(c).*(1+S(c).*cos(H(c))./cos((pi/3)-H(c)));
G(c)=3*I(c)-(R(c)+B(c));
%BG 扇区 (2*pi/3<=H<4*pi/3)
c=find((2*pi/3<=H) & (H<4*pi/3));
R(c)=I(c).*(1-S(c));
G(c)=I(c).*(1+S(c).*cos(H(c)-2*pi/3)./cos(pi-H(c)));
B(c)=3*I(c)-(R(c)+G(c));
%BR 扇区 (4*pi/3<=H<2*pi)
c=find((4*pi/3<=H) & (H<2*pi));
G(c)=I(c).*(1-S(c));
B(c)=I(c).*(1+S(c).*cos(H(c)-4*pi/3)./cos((5*pi/3)-H(c)));
R(c)=3*I(c)-(B(c)+G(c));
三、综合应用
保持图1的H分量和S分量不变,仅用大小为5×5的平均核对I分量进行平滑,然后把最终的HSI转换成RGB图像以便显示。
实验程序为:
clear all;close all;clc;
rgb_img=imread('实验5_测试图像\1.Lena.tif');
[H,S,I]=rgb2hsi(rgb_img);
w=1/25*ones(5,5);
I=imfilter(I,w,'symmetric','same');
hsi=cat(3,H,S,I);
[R,G,B]=hsi2rgb(hsi);
RGB_IMG=cat(3,R,G,B);
figure;imshow(RGB_IMG);title('平滑图像');
实验结果为: