用opencv 实现一个MSR图像增强算法
时间: 2023-06-13 16:04:51 浏览: 59
MSR(Multi-Scale Retinex)是一种图像增强算法,主要用于提高图像的对比度和亮度。下面是用OpenCV实现MSR算法的步骤:
1. 加载图像并将其转换为灰度图像。
```python
import cv2
img = cv2.imread('input.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
```
2. 对灰度图像进行高斯模糊。
```python
sigma_list = [15, 80, 250]
retinex = np.zeros_like(gray.astype(np.float32))
for sigma in sigma_list:
retinex += np.log10(gray) - np.log10(cv2.GaussianBlur(gray, (0, 0), sigma))
retinex = retinex / len(sigma_list) + np.log10(gray)
retinex = np.power(10, retinex)
```
3. 对高斯模糊后的图像进行差分。
```python
retinex_diff = np.zeros_like(gray.astype(np.float32))
for sigma in sigma_list:
retinex_diff += np.abs(cv2.GaussianBlur(gray, (0, 0), sigma) - gray)
retinex_diff = retinex_diff / len(sigma_list)
```
4. 对图像进行归一化处理。
```python
retinex_normalized = cv2.normalize(retinex, None, 0, 255, cv2.NORM_MINMAX, cv2.CV_8U)
retinex_diff_normalized = cv2.normalize(retinex_diff, None, 0, 255, cv2.NORM_MINMAX, cv2.CV_8U)
```
5. 将增强后的图像保存到本地。
```python
cv2.imwrite('output.jpg', retinex_normalized)
cv2.imwrite('diff.jpg', retinex_diff_normalized)
```
完整代码:
```python
import cv2
import numpy as np
# 加载图像并将其转换为灰度图像
img = cv2.imread('input.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 对灰度图像进行高斯模糊
sigma_list = [15, 80, 250]
retinex = np.zeros_like(gray.astype(np.float32))
for sigma in sigma_list:
retinex += np.log10(gray) - np.log10(cv2.GaussianBlur(gray, (0, 0), sigma))
retinex = retinex / len(sigma_list) + np.log10(gray)
retinex = np.power(10, retinex)
# 对高斯模糊后的图像进行差分
retinex_diff = np.zeros_like(gray.astype(np.float32))
for sigma in sigma_list:
retinex_diff += np.abs(cv2.GaussianBlur(gray, (0, 0), sigma) - gray)
retinex_diff = retinex_diff / len(sigma_list)
# 对图像进行归一化处理
retinex_normalized = cv2.normalize(retinex, None, 0, 255, cv2.NORM_MINMAX, cv2.CV_8U)
retinex_diff_normalized = cv2.normalize(retinex_diff, None, 0, 255, cv2.NORM_MINMAX, cv2.CV_8U)
# 将增强后的图像保存到本地
cv2.imwrite('output.jpg', retinex_normalized)
cv2.imwrite('diff.jpg', retinex_diff_normalized)
```
注意:该算法可能会导致图像出现过度增强的情况,需要根据实际情况进行调整。