将RGB转化成为HSI图像,并将HSI的I通道取出
时间: 2023-12-14 10:40:06 浏览: 143
将RGB转化为HSI,需要进行以下步骤:
1. 将RGB转化为0到1之间的浮点数。
2. 计算出亮度I: I = (R + G + B) / 3
3. 计算出色调H: H = arccos( [ (R - 0.5G - 0.5B) / sqrt( (R - G)^2 + (R - B)(G - B) ) ] )
4. 计算出饱和度S: S = 1 - 3 / (R + G + B) * min(R, G, B)
以下是Python实现代码:
```python
import numpy as np
from skimage.color import rgb2hsi
# 读取RGB图像
rgb_img = cv2.imread("rgb_image.jpg")
# 转换为0到1之间的浮点数
rgb_img = rgb_img / 255.0
# 转换为HSI
hsi_img = rgb2hsi(rgb_img)
# 取出I通道
i_channel = hsi_img[:, :, 2]
```
其中,`rgb2hsi`函数是skimage中实现RGB转HSI的函数,返回的是一个与原图像大小相同的三通道HSI图像,其中第三个通道即为I通道。
相关问题
将RGB图像转化成HSI图像,并对I通道进行MSR算法图像增强代码
以下是将RGB图像转换为HSI图像,并对I通道进行MSR算法图像增强的Python代码:
```python
import cv2
import numpy as np
# 将 RGB 图像转换为 HSI 图像
def rgb_to_hsi(img):
img = img.astype(np.float32) / 255.0
r, g, b = cv2.split(img)
eps = 1e-6
num = 0.5 * ((r - g) + (r - b))
den = np.sqrt((r - g)**2 + (r - b)*(g - b)) + eps
theta = np.arccos(num / den)
h = theta.copy()
h[b > g] = 2 * np.pi - h[b > g]
s = 1 - 3 * np.minimum(r, np.minimum(g, b)) / (r + g + b + eps)
i = (r + g + b) / 3
hsi = cv2.merge((h, s, i))
return hsi
# 对 I 通道进行 MSR 算法图像增强
def msr_enhancement(img, a, b, d):
img = img.astype(np.float32)
i = img[:, :, 2]
log_i = np.log(i)
log_i_avg = cv2.boxFilter(log_i, -1, (d, d))
log_i_diff = log_i - log_i_avg
log_i_diff_var = cv2.boxFilter(log_i_diff**2, -1, (d, d))
alpha = b * log_i_diff_var / (i**a + 1e-6)
enhanced_i = i + alpha * log_i_diff
enhanced_i = np.clip(enhanced_i, 0, 255)
enhanced = img.copy()
enhanced[:, :, 2] = enhanced_i
return enhanced.astype(np.uint8)
# 加载图像
img = cv2.imread('test_image.jpg')
# 将 RGB 图像转换为 HSI 图像
hsi = rgb_to_hsi(img)
# 对 I 通道进行 MSR 算法图像增强
enhanced = msr_enhancement(hsi, a=0.1, b=0.5, d=5)
# 将增强后的 HSI 图像转换回 RGB 图像
enhanced_rgb = cv2.cvtColor(enhanced, cv2.COLOR_HSV2BGR)
# 显示原始图像和增强后的图像
cv2.imshow('Original Image', img)
cv2.imshow('Enhanced Image', enhanced_rgb)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
需要注意的是,MSR算法的参数a、b、d需要根据图像的特性进行调整。
将RGB图像转化为HSI图像
RGB图像可以通过以下公式转换为HSI图像:
H = arccos[0.5*((R−G)+(R−B))/√((R−G)^2+(R−B)(G−B))] if B ≤ G
H = 360 − arccos[0.5*((R−G)+(R−B))/√((R−G)^2+(R−B)(G−B))] if B > G
S = 1 − 3/(R+G+B) * min(R,G,B)
I = 1/3 * (R+G+B)
其中,H表示色相,S表示饱和度,I表示强度。R、G、B分别表示红、绿、蓝三个通道的像素值。
阅读全文