python RGB转HIS和YIQ,加噪声后转回RGB 输出所有图片
时间: 2023-06-08 13:07:41 浏览: 83
好的,以下是Python代码实现RGB转HIS和YIQ,加噪声后再转回RGB并输出所有图片的过程:
```python
import numpy as np
import cv2
# 定义转换矩阵
RGB2HIS = np.array([[0.299, 0.587, 0.114], [0.596, -0.274, -0.322], [0.211, -0.523, 0.312]])
HIS2RGB = np.linalg.inv(RGB2HIS)
RGB2YIQ = np.array([[0.299, 0.587, 0.114], [0.596, -0.274, -0.322], [0.211, -0.523, 0.312]])
YIQ2RGB = np.linalg.inv(RGB2YIQ)
# 读取RGB图像
img = cv2.imread('input.jpg')
# 转换为浮点型
img = img.astype(np.float32) / 255.0
# RGB转HIS
HIS_img = np.dot(img, RGB2HIS)
# HIS转回RGB
HIS2RGB_img = np.dot(HIS_img, HIS2RGB)
# RGB转YIQ
YIQ_img = np.dot(img, RGB2YIQ)
# 添加高斯噪声
noise = np.random.normal(0, 0.1, img.shape)
noisy_YIQ = YIQ_img + noise
# YIQ转回RGB
noisy_YIQ2RGB = np.dot(noisy_YIQ, YIQ2RGB)
# 输出所有图片
cv2.imwrite('RGB.jpg', img*255.0)
cv2.imwrite('HIS.jpg', HIS2RGB_img*255.0)
cv2.imwrite('noisy_YIQ.jpg', noisy_YIQ2RGB*255.0)
```
其中,我使用OpenCV库读取和输出图像,通过numpy库实现矩阵相乘和逆矩阵求解。在这个实现中,我先将RGB图像转换为浮点型,并使用`astype()`函数将像素值范围从0~255变为0~1,以方便计算。接着,我分别使用定义好的转换矩阵将RGB图像转换为HIS和YIQ图像。然后,我在YIQ图像上添加高斯噪声,使其变得更加真实。最后,我使用逆矩阵将HIS图像和加噪后的YIQ图像转换回RGB图像,并使用OpenCV库将所有图像输出到本地磁盘上。
阅读全文