hsi和rgb转换公式matlab
时间: 2024-10-08 19:03:32 浏览: 63
hsi (色度饱和度强度) 和 RGB (红绿蓝) 都是常见的颜色空间表示方式。在MATLAB中,这两种颜色空间之间的转换通常涉及一些数学变换。
从RGB到HSI的转换,可以分为三个步骤:
1. 计算亮度(Intensity, I):取三通道值之和除以3。
2. 计算色调(Hue, H):通过查找表找到最大分量对应的角(0~360度),并进行调整。例如,如果红色最强,则H = 0,绿色最强则H = 120等。
3. 计算饱和度(Saturation, S):当所有分量相同时,S=0(代表灰度)。否则,S=(最大分量 - 平均分量) / 最大分量。
从HSI到RGB的转换相对复杂一些,涉及到反向计算。以下是基本的公式:
- 色调(H)到弧度制:H * π / 180
- 素数(S)乘上对应的颜色通道的最大值:S * max(RGB)
- 对于每个通道,计算新的值:R = HSI[I] + S * cos(H), G = HSI[I] + S * sin(H) (如果通道是原色),B = HSI[I]
具体的MATLAB代码示例:
```matlab
% RGB to HSI
function [h, s, i] = rgb_to_hsi(rgb)
i = mean(rgb);
f = rgb / i;
max_channel = max(f(:));
min_channel = min(f(:));
if max_channel == min_channel
s = 0;
else
s = max_channel - min_channel;
end
% Calculate hue
[~, idx] = max(f);
h = deg2rad(idx - 1);
h = mod(h, 2*pi);
end
% HSI to RGB
function rgb = hsi_to_rgb(h, s, i)
H = rad2deg(h);
S = s;
if S > 0
R = i + S * cosd(H);
G = i + S * sind(H);
B = i;
% Ensure RGB values are in the correct range (0-1)
rgb = round(min([max([R, G, B], 0), 1]) * 255); % or convert back to uint8 for image display
else
rgb = ones(1, 3) * i; % grayscale
end
end
```
阅读全文