Retinex 算法:MSRCR 与 MSRCP 的 Python 实现
1. Retinex 算法简介
Retinex 理论由 Edwin Land 提出,旨在模拟人类视觉系统对颜色和亮度的感知。其核心思想是将图像分解为 照度分量(illumination)和 反射分量(reflection),通过去除照度的影响,增强图像的细节和颜色。Retinex 算法广泛应用于图像增强、去雾、低光照图像处理等领域。
2. 多尺度 Retinex (MSR)
多尺度 Retinex (MSR) 是 Retinex 的扩展版本,通过在多个尺度上对图像进行高斯滤波,获得更稳定的照度估计。MSR 的公式如下:
R(x,y)=∑i=1Nwi⋅(log(I(x,y))−log(Gi(x,y)∗I(x,y)))
R(x, y) = \sum_{i=1}^{N} w_i \cdot \left( \log(I(x, y)) - \log(G_i(x, y) * I(x, y)) \right)
R(x,y)=i=1∑Nwi⋅(log(I(x,y))−log(Gi(x,y)∗I(x,y)))
其中:
• I(x,y)I(x, y)I(x,y) 是输入图像。
• Gi(x,y)G_i(x, y)Gi(x,y) 是第 iii 个尺度的高斯核。
• wiw_iwi 是第 iii 个尺度的权重。
• NNN 是尺度数量。
MSR 通过加权求和多个尺度的结果,能够更好地处理不同尺度的图像细节。
3. MSRCR 与 MSRCP
MSRCR (Multi-Scale Retinex with Color Restoration) 在 MSR 的基础上引入了颜色恢复机制,解决了 MSR 可能导致颜色失真的问题。其公式如下:
RMSRCR(x,y)=C(x,y)⋅RMSR(x,y)
R_{MSRCR}(x, y) = C(x, y) \cdot R_{MSR}(x, y)
RMSRCR(x,y)=C(x,y)⋅RMSR(x,y)
其中 C(x,y)C(x, y)C(x,y) 是颜色恢复因子,用于调整颜色平衡。
MSRCP (Multi-Scale Retinex with Chromaticity Preservation) 则通过保留图像的色度信息,进一步优化颜色表现。其公式如下:
RMSRCP(x,y)=α⋅RMSR(x,y)+(1−α)⋅Ichrom(x,y)
R_{MSRCP}(x, y) = \alpha \cdot R_{MSR}(x, y) + (1 - \alpha) \cdot I_{chrom}(x, y)
RMSRCP(x,y)=α⋅RMSR(x,y)+(1−α)⋅Ichrom(x,y)
其中 Ichrom(x,y)I_{chrom}(x, y)Ichrom(x,y) 是图像的色度分量,α\alphaα 是权重系数。
4. Python 实现
以下是 MSRCR 和 MSRCP 的 Python 实现代码:
import cv2
import numpy as np
def gaussian_kernel(size, sigma):
"""生成高斯核"""
kernel = cv2.getGaussianKernel(size, sigma)
return kernel * kernel.T
def MSR(img, sigma_list):
"""多尺度 Retinex"""
retinex = np.zeros_like(img, dtype=np.float32)
for sigma in sigma_list:
kernel = gaussian_kernel(3, sigma)
log_img = np.log1p(img.astype(np.float32))
blur_img = cv2.filter2D(log_img, -1, kernel)
retinex += (log_img - blur_img) / len(sigma_list)
return retinex
def MSRCR(img, sigma_list, G, b, alpha, beta, low_clip, high_clip):
"""MSR with Color Restoration"""
msr = MSR(img, sigma_list)
color_restoration = G * (np.log1p(img * alpha) - np.log1p(b))
msrcr = beta * (msr * color_restoration)
msrcr = np.clip(msrcr, low_clip, high_clip)
return msrcr
def MSRCP(img, sigma_list, low_clip, high_clip):
"""MSR with Chromaticity Preservation"""
msr = MSR(img, sigma_list)
chrom = img / (np.sum(img, axis=2, keepdims=True) + 1e-6)
msrcp = 0.5 * msr + 0.5 * chrom
msrcp = np.clip(msrcp, low_clip, high_clip)
return msrcp
5. 实验结果与分析
• MSRCR 在增强图像细节的同时,能够较好地恢复颜色,适用于低光照或雾天图像。
• MSRCP 则更注重色度的保留,适合处理颜色丰富的图像。
6. 应用场景
• 医学图像处理:增强 X 光或 MRI 图像的细节。
• 自动驾驶:改善低光照或雾天条件下的道路图像。
• 摄影:修复曝光不足或过曝的照片。
7. 总结
Retinex 算法通过模拟人类视觉系统,能够有效增强图像的细节和颜色。MSRCR 和 MSRCP 作为其扩展版本,分别在颜色恢复和色度保留方面表现出色。通过 Python 实现,可以方便地将这些算法应用于实际场景中。
参考文献: