msrcr(Multi-Scale Retinex with Color Restoration) 带色彩恢复的多尺度视网膜增强算法 整理

本文深入探讨了MSRCR(带色彩恢复的多尺度视网膜增强)算法,对比了其与其他图像增强技术的差异。通过RGB通道的独立处理、高斯滤波及对数转换,去除光照影响,同时解决色差问题。介绍了GIMP中MSRCR的应用,并提供了源码参考和相关论文链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文主要总结整理msrcr算法相关,包括基本原理,效果和实现代码


为了提高低亮度条件和背光条件下拍摄图像的效果,尝试了各种常规的数字图像处理方法,包括:

线性变换

对数变换

直方图均衡等

对yuv分量进行处理,对亮度分量进行处理,提升亮度对比,提升亮度低得值,提高可见度,uv分量不进行处理,避免色彩出现偏差。

这些方法有一定的效果,缺点也很明显,色度恢复不够,处理后的图像泛白,色彩饱和度降低。然后找到了msrcr算法,下文详细比较了msrcr算法和其他常规数字图像处理方法的异同:

Rahman Z, Woodell G A, Jobson D J. A comparison of the multiscale retinex with other image enhancement techniques[C]//Is and T Annual Conference. THE SOCIETY FOR IMAGING SCIENCE AND TECHNOLOGY, 1997: 426-431.

msrcr算法最早文献如下:

### MSRCR算法简介 MSRCRMulti-Scale Retinex with Color Restoration)是一种用于图像增强多尺度Retinex算法,其核心在于通过多个高斯核来模拟人类视觉系统的感受器特性,并结合颜色恢复机制以保持图像的真实色彩[^3]。 #### 原理概述 MSRCR算法基于Retinex理论的核心假设:人眼感知到的图像 \( I(x, y) \) 可以分解为物体反射分量 \( R(x, y) \) 和光照分量 \( L(x, y) \),即: \[ I(x, y) = R(x, y) \cdot L(x, y) \] 为了提取真实的反射分量并减少光照不均匀的影响,MSRCR采用多尺度高斯滤波的方式计算局部光照分量。具体而言,该算法利用不同尺寸的高斯核分别估计光照分量,并将其组合起来形成最终的结果。此外,MSRCR还引入了一个颜色恢复因子,用来校正因多次运算可能导致的颜色失真问题[^2]。 --- ### 算法实现流程 以下是MSRCR算法的主要实现步骤及其对应的逻辑描述: 1. **输入图像预处理** 输入彩色图像被转换为浮点数形式以便后续操作。设输入图像为 \( I_i(x, y) \),其中 \( i \) 表示红 (Red)、绿 (Green) 或蓝 (Blue) 颜色通道[^4]。 2. **多尺度高斯滤波** 对每个颜色通道应用一组大小不同的高斯核函数 \( G_{s_k}(x, y) \) 来估算局部光照分量 \( L_s(x, y) \)[^3]: \[ L_s(x, y) = I_i(x, y) * G_{s_k}(x, y) \] 这里 \( s_k \) 是高斯核的标准差参数,通常设置为几个离散值以覆盖多种空间频率范围。 3. **计算单尺度Retinex响应** 利用原始像素强度与相应尺度下的光照分量之间的比率定义单尺度Retinex响应: \[ SRR(I_i; s_k)(x, y) = \log[I_i(x, y)] - \log[L_s(x, y)] \] 4. **融合多尺度结果** 将来自各个尺度上的独立Retinex输出加权求和得到综合效果\( MSR(i) \): \[ MSR(i)=\sum _{k=1}^{N}\omega(s_k)\times SRR(I_i;s_k) \] 其中权重系数 \( w(s_k) \geqslant 0\) 并满足归一化条件 \( \Sigma_kw(s_k)=1 \). 5. **加入颜色修复项** 考虑到单纯执行上述过程可能引起整体色调偏移现象发生,因此还需附加一项专门针对此目的设计表达式如下所示: \[ alpha=\ln[N\times I_i]-[\ln(IR)+\ln(IG)+\ln(IB)] \] 6. **生成最终增强图片** 经过以上各步之后便可获得经过改进版多重比例视网膜效应修正后的目标产物了! --- ### Python代码实现示例 下面是使用Python语言编写的简化版本MSRCR算法实现代码片段: ```python import numpy as np from scipy.ndimage import gaussian_filter def msrcr(image, scales=[15, 80, 200], weights=None): if weights is None: weights = [1/len(scales)] * len(scales) image_float = image.astype(np.float32)/255. height, width, channels = image.shape retinex_images = [] for channel in range(channels): img_channel = image_float[:, :, channel] log_img = np.log(img_channel + 1e-6) ms_retinex = np.zeros_like(log_img) for scale, weight in zip(scales, weights): blurred = gaussian_filter(img_channel, sigma=scale) log_blurred = np.log(blurred + 1e-6) single_scale_retex = log_img - log_blurred ms_retinex += weight * single_scale_retex color_restoration = np.log(channels) + \ np.log(img_channel.sum(axis=-1)) - \ np.log(img_channel).sum(axis=-1) enhanced_channel = ms_retinex * color_restoration.reshape(height, width, 1) retinex_images.append(enhanced_channel) result = np.stack(retinex_images, axis=-1) return ((result - result.min()) / (result.max() - result.min()) * 255.).astype(np.uint8) ``` --- ###
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值