图像增强之Retinex 算法MSRCR 与 MSRCP 的 Python 实现

Retinex 算法:MSRCR 与 MSRCP 的 Python 实现

1. Retinex 算法简介

Retinex 理论由 Edwin Land 提出,旨在模拟人类视觉系统对颜色和亮度的感知。其核心思想是将图像分解为 照度分量(illumination)和 反射分量(reflection),通过去除照度的影响,增强图像的细节和颜色。Retinex 算法广泛应用于图像增强、去雾、低光照图像处理等领域。

2. 多尺度 Retinex (MSR)

多尺度 Retinex (MSR) 是 Retinex 的扩展版本,通过在多个尺度上对图像进行高斯滤波,获得更稳定的照度估计。MSR 的公式如下:
R ( x , y ) = ∑ i = 1 N w i ⋅ ( log ⁡ ( I ( x , y ) ) − log ⁡ ( G i ( 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=1Nwi(log(I(x,y))log(Gi(x,y)I(x,y)))
其中:
I ( x , y ) I(x, y) I(x,y) 是输入图像。
G i ( x , y ) G_i(x, y) Gi(x,y) 是第 i i i 个尺度的高斯核。
w i w_i wi 是第 i i i 个尺度的权重。
N N N 是尺度数量。

MSR 通过加权求和多个尺度的结果,能够更好地处理不同尺度的图像细节。

3. MSRCR 与 MSRCP

MSRCR (Multi-Scale Retinex with Color Restoration) 在 MSR 的基础上引入了颜色恢复机制,解决了 MSR 可能导致颜色失真的问题。其公式如下:
R M S R C R ( x , y ) = C ( x , y ) ⋅ R M S R ( 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) 则通过保留图像的色度信息,进一步优化颜色表现。其公式如下:
R M S R C P ( x , y ) = α ⋅ R M S R ( x , y ) + ( 1 − α ) ⋅ I c h r o m ( 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)
其中 I c h r o m ( 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


图像增强之Retinex 算法MSRCR 与 MSRCP 的 Python 实现_第1张图片

5. 实验结果与分析

MSRCR 在增强图像细节的同时,能够较好地恢复颜色,适用于低光照或雾天图像。
MSRCP 则更注重色度的保留,适合处理颜色丰富的图像。

6. 应用场景

医学图像处理:增强 X 光或 MRI 图像的细节。
自动驾驶:改善低光照或雾天条件下的道路图像。
摄影:修复曝光不足或过曝的照片。

7. 总结

Retinex 算法通过模拟人类视觉系统,能够有效增强图像的细节和颜色。MSRCR 和 MSRCP 作为其扩展版本,分别在颜色恢复和色度保留方面表现出色。通过 Python 实现,可以方便地将这些算法应用于实际场景中。

参考文献:

你可能感兴趣的:(计算机视觉实战项目集合,算法,python,开发语言,图像增强,暗光增强,retinex,msrcr)