MATLAB的RGB和hsi互相转换,Matlab中RGB和HSI的相互转换

这篇博客介绍了如何在MATLAB中进行HSI到RGB和RGB到HSI的颜色空间转换。提供了两个函数,即hsi2rgb()用于将HSI图像转换为RGB,rgb2hsi()则完成RGB到HSI的转换。转换过程中涉及到角度归一化、饱和度计算和强度计算等步骤。
摘要由CSDN通过智能技术生成

HSI----->>>RGB:

function rgb = hsi2rgb(hsi)

%HSI2RGB Converts an HSI image to RGB.

% RGB = HSI2RGB(HSI) converts an HSI image to RGB, where HSI is

% assumed to be of class double with:

% hsi(:, :, 1) = hue image, assumed to be in the range

% [0, 1] by having been divided by 2*pi.

% hsi(:, :, 2) = saturation image, in the range [0, 1].

% hsi(:, :, 3) = intensity image, in the range [0, 1].

%

% The components of the output image are:

% rgb(:, :, 1) = red.

% rgb(:, :, 2) = green.

% rgb(:, :, 3) = blue.

% Copyright 2002-2004 R. C. Gonzalez, R. E. Woods, & S. L. Eddins

% Digital Image Processing Using MATLAB, Prentice-Hall, 2004

% $Revision: 1.5 $ $Date: 2003/10/13 01:01:06 $

% Extract the individual HSI component images.

H = hsi(:, :, 1) * 2 * pi;<

以下是 Matlab RGBHSI 之间的转换程序,其包括了 RGB 和波长的相互转换: ```matlab % RGB to HSI Conversion function [H,S,I] = rgb2hsi(R,G,B) R = double(R)./255; G = double(G)./255; B = double(B)./255; num = 0.5*((R-G)+(R-B)); den = sqrt((R-G).^2+(R-B).*(G-B)); theta = acos(num./(den+eps)); H = theta; H(B > G) = 2*pi-H(B > G); minRGB = min(min(R,G),B); S = 1 - 3.*minRGB./(R+G+B); S(R+G+B == 0) = 0; I = (R+G+B)/3; end % HSI to RGB Conversion function [R,G,B] = hsi2rgb(H,S,I) H = 2*pi*H; R = zeros(size(H)); G = zeros(size(H)); B = zeros(size(H)); % RG sector (0 <= H < 2*pi/3). idx = find( (0 <= H) & (H < 2*pi/3)); B(idx) = I(idx).*(1-S(idx)); R(idx) = I(idx).*(1 + S(idx).*cos(H(idx))./cos(pi/3-H(idx))); G(idx) = 3*I(idx) - (R(idx)+B(idx)); % BG sector (2*pi/3 <= H < 4*pi/3). idx = find( (2*pi/3 <= H) & (H < 4*pi/3) ); R(idx) = I(idx).*(1-S(idx)); G(idx) = I(idx).*(1 + S(idx).*cos(H(idx)-2*pi/3)./cos(pi-H(idx))); B(idx) = 3*I(idx) - (R(idx)+G(idx)); % BR sector. idx = find( (4*pi/3 <= H) & (H <= 2*pi) ); G(idx) = I(idx).*(1-S(idx)); B(idx) = I(idx).*(1 + S(idx).*cos(H(idx)-4*pi/3)./cos(pi/3-(H(idx)-4*pi/3))); R(idx) = 3*I(idx) - (G(idx)+B(idx)); R(R < 0) = 0; R(R > 1) = 1; G(G < 0) = 0; G(G > 1) = 1; B(B < 0) = 0; B(B > 1) = 1; R = round(R.*255); G = round(G.*255); B = round(B.*255); end % RGB to Wavelength Conversion function [wavelength] = rgb2wavelength(R,G,B) wavelength = -1; if R == 0 && G == 0 && B == 0 return; end if R == 255 && G == 255 && B == 255 return; end if R == 255 && G == 0 && B == 0 wavelength = 660; return; end if R == 255 && G == 255 && B == 0 wavelength = 590; return; end if R == 0 && G == 255 && B == 0 wavelength = 520; return; end if R == 0 && G == 255 && B == 255 wavelength = 490; return; end if R == 0 && G == 0 && B == 255 wavelength = 450; return; end if R == 255 && G == 0 && B == 255 wavelength = 400; return; end if R > G && R > B x = G; y = B; z = R; elseif G > R && G > B x = R; y = B; z = G; else x = R; y = G; z = B; end if z == 0 wavelength = 0; return; end if y == 0 wavelength = 0; return; end if x == z wavelength = 120; return; end wavelength = round(395 + (315*(z-x))/(z-2*x+y)); if wavelength < 400 wavelength = 400; end end ``` 其,`rgb2hsi` 函数将 RGB 图像转换HSI 图像,`hsi2rgb` 函数将 HSI 图像转换RGB 图像,`rgb2wavelength` 函数将 RGB转换为波长。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值