对HSI图像进行色调平衡代码
时间: 2023-10-03 12:07:00 浏览: 39
以下是 Python 代码实现 HSI 图像的色调平衡:
```python
import cv2
import numpy as np
def histeq_HSI(img):
# 转换色彩空间为 HSI
hsi_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV_FULL)
h, s, i = cv2.split(hsi_img)
# 对亮度 i 进行直方图均衡化
i_equalized = cv2.equalizeHist(i)
# 合并 HSI 通道
hsi_equalized = cv2.merge((h, s, i_equalized))
# 转换色彩空间为 BGR
bgr_equalized = cv2.cvtColor(hsi_equalized, cv2.COLOR_HSV2BGR_FULL)
return bgr_equalized
```
以上代码中,`histeq_HSI` 函数接收一张 BGR 格式的图像,首先将其转换为 HSI 色彩空间,然后仅对亮度 i 进行直方图均衡化,最后将 HSI 通道合并并转换回 BGR 格式。
相关问题
matlab中对RGB图像进行HSI颜色空间转换的代码
以下是MATLAB中对RGB图像进行HSI颜色空间转换的代码:
```matlab
% 读入RGB图像
rgb = imread('test.jpg');
% 将RGB图像转换为浮点型数据,范围为[0,1]
rgb = im2double(rgb);
% 计算每个像素点的H、S、I值
r = rgb(:,:,1);
g = rgb(:,:,2);
b = rgb(:,:,3);
num = 0.5*((r-g)+(r-b));
den = sqrt((r-g).^2 + (r-b).*(g-b));
theta = acos(num./(den+eps));
H = theta;
H(b > g) = 2*pi - H(b > g);
H = H/(2*pi);
min_rgb = min(min(rgb,[],1),[],2);
I = (r+g+b)/3;
S = 1 - min_rgb./I;
% 将HSI图像转换为uint8类型
H = uint8(H*255);
S = uint8(S*255);
I = uint8(I*255);
% 显示原图和HSI图像
figure;
subplot(2,2,1);
imshow(rgb);
title('原图');
hsi = cat(3, H, S, I);
subplot(2,2,2);
imshow(hsi);
title('HSI图像');
```
其中,`test.jpg`为需要转换的RGB图像文件名。转换后的HSI图像以三个通道的形式存储在`hsi`中,可通过`imshow(hsi)`显示。
取出hsi图像的亮度通道代码
假设你已经加载了 HSI 图像,并且存储在变量 `hsi_image` 中,可以使用以下代码提取亮度通道:
```python
import cv2
import numpy as np
# 将 HSI 图像转换为 BGR 图像
bgr_image = cv2.cvtColor(hsi_image, cv2.COLOR_HSV2BGR)
# 分离 BGR 图像的各个通道
b_channel, g_channel, r_channel = cv2.split(bgr_image)
# 计算亮度通道,使用 OpenCV 自带的函数
y_channel = cv2.cvtColor(bgr_image, cv2.COLOR_BGR2YCrCb)[:, :, 0]
# 或者手动计算亮度通道,使用公式 Y = R * 0.299 + G * 0.587 + B * 0.114
y_channel_manual = cv2.merge([
cv2.addWeighted(r_channel, 0.299, 0, 0, 0),
cv2.addWeighted(g_channel, 0.587, 0, 0, 0),
cv2.addWeighted(b_channel, 0.114, 0, 0, 0)
]).astype(np.uint8)
```
其中,`cv2.cvtColor` 函数用于颜色空间转换,`cv2.split` 函数用于分离各个通道,`cv2.addWeighted` 函数用于加权求和。最终得到的 `y_channel` 和 `y_channel_manual` 都是包含亮度信息的图像数组。