使用matlab,不借用matlab自带函数,实现RGB到HSI空间的转换
时间: 2023-08-26 11:10:32 浏览: 106
RGB到HSI的转换公式如下:
H = arccos(0.5*((R-G)+(R-B))/sqrt((R-G)^2+(R-B)*(G-B)))
if B > G
H = 360 - H
end
S = 1 - 3*(min(R,G,B))/(R+G+B)
I = (R+G+B)/3
其中,H表示色调,S表示饱和度,I表示亮度。
下面是一个实现RGB到HSI转换的Matlab代码:
```matlab
% 输入RGB图像
rgb_img = imread('input.png');
% 取出各通道数据
R = double(rgb_img(:,:,1));
G = double(rgb_img(:,:,2));
B = double(rgb_img(:,:,3));
% 计算H
numerator = 0.5*((R-G)+(R-B));
denominator = sqrt((R-G).^2+(R-B).*(G-B));
theta = acosd(numerator./(denominator+eps));
H = theta;
H(B>G) = 360 - H(B>G);
% 计算S
S = 1 - 3.*min(min(R,G),B)./(R+G+B+eps);
% 计算I
I = (R+G+B)./3;
% 合并为HSI图像
hsi_img = cat(3,H,S,I);
% 显示HSI图像
imshow(hsi_img);
```
需要注意的是,由于arccos函数的返回值是弧度制的角度,因此需要使用acosd函数将其转换为角度值。此外,在计算S时,需要将R、G、B的最小值分别与每个像素的和相除,因此使用min函数时需要使用两次嵌套,或者使用min函数的dim参数。
阅读全文