def multiScaleRetinex(img, sigma_list): retinex = np.zeros_like(img) for sigma in sigma_list: retinex += singleScaleRetinex(img, sigma) retinex = retinex / len(sigma_list) return retinex
时间: 2023-11-22 18:57:02 浏览: 137
这是一个多尺度Retinex算法的Python代码实现。Retinex算法是一种图像增强算法,它试图在保留图像结构的同时消除光照影响。
这个函数的输入是一张图像和一个sigma值的列表,sigma值表示高斯滤波器的标准差,用于在不同尺度下对图像进行滤波。接着,该函数调用singleScaleRetinex函数对每个sigma值进行处理,并将结果累加到一个输出图像中。最后,将输出图像除以sigma值的个数,得到最终的多尺度Retinex增强图像。
以下是singleScaleRetinex函数的代码实现,用于对单个sigma值对图像进行处理:
```
def singleScaleRetinex(img, sigma):
blur = cv2.GaussianBlur(img, (0, 0), sigma)
retinex = np.log10(img) - np.log10(blur)
return retinex
```
该函数首先对图像进行高斯滤波,然后计算原始图像与滤波后的图像的对数差,得到一个Retinex增强图像。
相关问题
import cv2 import numpy as np def retinex(img, sigma_list): retinex = np.zeros_like(img) for sigma in sigma_list: img_blur = cv2.GaussianBlur(img, (0, 0), sigma) img_blur = np.where(img_blur == 0, 0.1, img_blur) retinex += np.log10(img) - np.log10(img_blur) retinex = retinex / len(sigma_list) retinex = np.where(retinex < 0, 0, retinex) retinex = np.where(retinex > 1, 1, retinex) return retinex def enhance_image(img): hsi = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) h, s, i = cv2.split(hsi) i_enhanced = retinex(i.astype(np.float64), [15, 80, 250]) i_enhanced = (i_enhanced * 255).astype(np.uint8) s_enhanced = cv2.equalizeHist(s) hsi_enhanced = cv2.merge([h, s_enhanced, i_enhanced]) enhanced_img = cv2.cvtColor(hsi_enhanced, cv2.COLOR_HSV2BGR) return enhanced_img img = cv2.imread('low_illumination_1.png') enhanced_img = enhance_image(img) cv2.imshow('Enhanced Image', enhanced_img) cv2.waitKey(0) cv2.destroyAllWindows()
这是一段基于Retinex算法对图像进行增强的Python代码。Retinex算法是一种用于图像增强的经典算法,它可以增强图像的对比度和颜色鲜艳度,同时可以保留图像的细节信息。该算法的基本思想是将图像分解为多个尺度的高斯模糊图像,然后通过计算不同尺度的高斯模糊图像与原始图像之间的差异来获得图像的反射性和色彩性信息。在这段代码中,首先将输入图像转换为HSI颜色空间,然后对亮度通道进行Retinex增强处理,对饱和度通道进行直方图均衡化处理,最后将三个通道重新组合成BGR颜色空间的图像输出。
怎么解决C:\Users\hp\venv\Scripts\python.exe "D:\BI she\pythonProject3\MSRCR.py" Traceback (most recent call last): File "D:\BI she\pythonProject3\MSRCR.py", line 31, in <module> img_retinex = retinex_with_color_restoration(img) File "D:\BI she\pythonProject3\MSRCR.py", line 20, in retinex_with_color_restoration img_retinex = np.uint8(np.clip((img_retinex * img_msb) / 255.0, 0, 255)) ValueError: operands could not be broadcast together with shapes (1080,1440,3) (1080,1440)
这个报错是因为 `img_retinex` 和 `img_msb` 的形状不匹配导致的。根据代码,可以发现 `img_msb` 是一个二维数组,而 `img_retinex` 是一个三维数组。在计算 `(img_retinex * img_msb) / 255.0` 时,两个数组的形状不匹配,因此会报错。
为了解决这个问题,可以将 `img_msb` 扩展为与 `img_retinex` 相同的形状,即在第三个维度上复制两次。具体方法如下:
```python
img_msb = np.expand_dims(img_msb, axis=2)
img_msb = np.tile(img_msb, [1, 1, 3])
```
将上述代码添加到 `retinex_with_color_restoration()` 函数中,在计算 `(img_retinex * img_msb) / 255.0` 之前,即可解决这个问题。
完整代码示例:
```python
import cv2
import numpy as np
def retinex_with_color_restoration(img, sigma_list=[15, 80, 250], G=5, b=25, alpha=125, beta=46, low_clip=0.01, high_clip=0.99):
img = np.float64(img) + 1.0
img_retinex = np.zeros_like(img)
for sigma in sigma_list:
img_retinex += np.log10(img) - np.log10(cv2.GaussianBlur(img, (G, G), sigma))
img_color = np.zeros_like(img)
for channel in range(3):
img_color[:, :, channel] = np.median(img[:, :, channel])
img_msb = np.max(img_color, axis=2)
img_msb = (cv2.GaussianBlur(img_msb, (b, b), sigma_list[0]) + alpha) * 255 / (beta + alpha)
img_msb = np.expand_dims(img_msb, axis=2)
img_msb = np.tile(img_msb, [1, 1, 3])
img_retinex = cv2.normalize(img_retinex, None, 0, 255, cv2.NORM_MINMAX)
img_retinex = np.uint8(np.clip((img_retinex * img_msb) / 255.0, 0, 255))
low_val, high_val = np.percentile(img_retinex, [low_clip * 100, high_clip * 100])
img_retinex = np.uint8(cv2.normalize(img_retinex, None, low_val, high_val, cv2.NORM_MINMAX))
return img_retinex
# 读取图像
img = cv2.imread('example.jpg')
# 进行带色彩恢复因子的Retinex算法亮度增强
img_retinex = retinex_with_color_restoration(img)
# 显示结果
cv2.imshow('Original', img)
cv2.imshow('Retinex', img_retinex)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在上述代码示例中,`np.expand_dims()` 函数用于在第二个维度上添加一个长度为1的维度,将 `img_msb` 转换为二维数组,然后使用 `np.tile()` 函数将其复制两次,以匹配 `img_retinex` 的形状。
阅读全文