不借用matlab自带函数,实现RGB到HSI空间的转换
时间: 2024-02-01 15:17:06 浏览: 94
RGB到HSI的转换公式如下:
H = atan2(G-B, R-B) + 2π(I(R≥G) - 1/3(I(G>R&B≥R) + 2/3(I(B≥R&G>R))))
S = 1 - 3(min(R,G,B))/(R+G+B)
I = (R+G+B)/3
其中,R、G、B分别为RGB三原色的值,H、S、I分别为HSI空间中色调、饱和度和强度的值。
以下是Python代码实现:
```python
import numpy as np
def rgb2hsi(rgb):
r, g, b = rgb[0], rgb[1], rgb[2]
num = 0.5 * ((r - g) + (r - b))
den = np.sqrt((r - g) ** 2 + (r - b) * (g - b))
theta = np.arccos(num / (den + 1e-7))
if b > g:
h = 2 * np.pi - theta
else:
h = theta
min_val = min(r, g, b)
s = 1 - 3 * min_val / (r + g + b + 1e-7)
i = (r + g + b) / 3
return np.array([h, s, i])
```
其中,rgb为RGB颜色的数组,类型为np.array,例如[255, 0, 0]代表红色。函数返回HSI颜色的数组,类型为np.array,例如[0, 1, 0.3333]代表红色。
阅读全文