将低照度图像转化成为HSI图像,并将I分量利用Retinex转化成为光照分量和反射分量代码
时间: 2023-12-14 13:38:45 浏览: 90
低照度图像增强代码汇总
把低照度图像转化为HSI图像的代码如下:
```python
import cv2
import numpy as np
def low_light_to_hsi(img):
# 转换为浮点型
img = img.astype(np.float) / 255.0
# 将RGB转换为HSI
hsi = cv2.cvtColor(img, cv2.COLOR_RGB2HSV_FULL)
hsi[:, :, 2] = (hsi[:, :, 1] + hsi[:, :, 2]) / 2.0
return hsi
```
将I分量利用Retinex转换成光照分量和反射分量的代码如下:
```python
def retinex_decomposition(img, sigma_list=[15, 80, 250], G=5, b=25):
# 将图像转换为浮点型
img = img.astype(np.float)
# 计算图像的对数
log_I = np.log10(img + 1)
# 对每个尺度进行高斯滤波
for sigma in sigma_list:
img_sigma = cv2.GaussianBlur(img, (G, G), sigma)
log_I_sigma = np.log10(img_sigma + 1)
diff = log_I - log_I_sigma
# 计算反射分量
R_sigma = np.max(diff - b, 0)
# 计算光照分量
S_sigma = np.max(log_I_sigma - diff - b, 0)
# 将反射分量和光照分量相加
img = R_sigma + S_sigma
return img
```
使用示例:
```python
# 读取低照度图像
img = cv2.imread('low_light_image.jpg')
# 转换为HSI图像
hsi = low_light_to_hsi(img)
# 提取I分量
I = hsi[:, :, 2]
# Retinex分解
R = retinex_decomposition(I)
# 将光照分量和反射分量转换回HSI空间
hsi[:, :, 2] = R
hsi[:, :, 1] = hsi[:, :, 1] * 0.5
# 将HSI图像转换回RGB空间
result = cv2.cvtColor(hsi, cv2.COLOR_HSV2RGB_FULL)
# 显示结果
cv2.imshow('Result', result)
cv2.waitKey(0)
```
阅读全文