基于SSR/MSR/MSRCR三种Retinex算法的图像增强系统
项目简介
本项目是一个基于MATLAB开发的图像增强工具包,完整实现了Retinex理论中的三种核心算法:单尺度Retinex(SSR)、多尺度Retinex(MSR)以及带色彩恢复的多尺度Retinex(MSRCR)。系统基于光照-反射成像模型,旨在消除光照不均的影响,恢复图像物体的真实色彩与细节,特别适用于低照度图像的增强处理。
程序采用纯MATLAB代码编写,无复杂的外部依赖,包含了从图像读取、模拟低照度环境、核心算法处理到结果可视化对比的全流程。
功能特性
- 自动化环境模拟:自动读取测试图像并进行亮度衰减处理(乘以0.3系数),以模拟真实的低照度环境;若缺少测试图,则自动生成合成的暗色测试图案。
- 单尺度Retinex (SSR):通过高斯滤波估计光照分量,利用对数域差分分离反射分量,结合动态范围归一化提升图像可视度。
- 多尺度Retinex (MSR):融合小、中、大三种不同尺度的SSR处理结果,平衡了细节增强与色彩保真度,解决了单一尺度可能带来的光晕或对比度不足问题。
- 带色彩恢复的Retinex (MSRCR):在MSR基础上引入色彩恢复因子(CRF),通过修正RGB通道比例,解决Retinex算法常见的“泛灰”问题,结合增益与偏差调整,显著提升色彩饱和度。
- 多维度可视化分析:提供增强前后的图像并排对比,以及对应的RGB直方图分布对比,直观展示算法对图像亮度分布和动态范围的改善效果。
系统要求
- MATLAB:建议使用 R2016a 或更高版本。
- 工具箱:Image Processing Toolbox(用于图像读取、高斯滤波、直方图计算等函数)。
使用方法
- 将
main.m 文件放置于MATLAB工作路径中。 - 确保当前目录下存在
peppers.png 图像文件(MATLAB内置图片),或者让程序自动生成合成图像。 - 直接运行
main 函数。 - 程序将自动根据预设参数处理图像,并弹出一个包含8个子图的窗口展示处理结果与直方图数据。
代码实现逻辑与算法细节
本项目的主程序 main.m 通过模块化设计实现了以下核心逻辑:
1. 图像预处理与环境构建
程序启动后首先清理工作区。尝试读取
peppers.png,读取成功后使用
immultiply 将图像亮度降低至原图的30%,以此作为待处理的“模拟低照度图像”。如果读取失败,利用
meshgrid 和三角函数生成一张包含渐变纹理的合成暗图,确保程序在任何环境下均可运行。
2. 核心算法参数配置
代码中硬编码了经过优化的算法参数:
- SSR参数:高斯模糊尺度 Sigma = 80。
- MSR参数:使用了三个尺度 [15, 80, 250],分别对应细节提取、中等范围和全局光照估计。
- MSRCR参数:色彩恢复因子 Alpha = 125,Beta = 46,增益 G = 192,偏差 b = -30。
3. 三大算法具体实现
A. 单尺度 Retinex (SSR)
由 process_ssr 函数实现。
- 将图像转换为双精度并加1(防止对数运算出现无穷小)。
- 利用
imgaussfilt 对图像进行高斯模糊以估计光照分量。 - 在对数域中执行
log(原始) - log(光照) 得到反射分量。 - 归一化策略:使用均值方差法(Mean +/- 2*Std)进行线性拉伸,将涵盖约95%像素值的范围映射到0-255,有效去除极端噪点影响。
B. 多尺度 Retinex (MSR)
由
process_msr 函数实现。
- 作为SSR的加权扩展,迭代使用[15, 80, 250]三个尺度进行SSR处理。
- 对三个尺度的处理结果取平均值(权重均为1/3)。
- 归一化策略同样采用基于均值和标准差的动态范围调整。
C. 带色彩恢复的多尺度 Retinex (MSRCR)
由
process_msrcr 函数实现,分为四个步骤:
- 基础MSR计算:计算三个尺度的SSR加权和,此时暂不进行归一化。
- 色彩恢复因子 (CRF) 计算:根据各通道像素值与像素总和的比例关系计算CRF,公式涉及参数 Alpha 和 Beta。此步骤用于修正增强后图像各颜色通道比例失调的问题。
- 最终合成:应用经典公式
G * (MSR结果 .* CRF + b),引入增益G和偏差b调整整体亮度和对比度。 - 归一化策略:采用了与SSR/MSR不同的“百分位裁剪法(Clipping)”。裁剪掉直方图两端各0.5%的像素(极暗和极亮),将剩余部分拉伸至0-255。这种方法对于包含增益放大的MSRCR结果能提供更强烈的对比度表现。
4. 结果可视化
程序最后创建一个包含2行4列子图的图形窗口:
- 第一行(图像):依次显示“原始低照度图”、“SSR增强图”、“MSR增强图”、“MSRCR增强图”。
- 第二行(直方图):利用
draw_histogram 辅助函数,分别绘制上述四张图像的R、G、B三通道直方图,横坐标为0-255灰度级,展示像素分布的变化。 - 计时功能:控制台会实时输出每种算法的计算耗时,便于性能评估。
注意事项
- 代码中的归一化函数分为
normalize_retinex(用于SSR/MSR)和 normalize_with_clipping(用于MSRCR),体现了针对不同算法输出特性的后处理差异。 - MSRCR算法中的 G 和 b 参数对最终图像亮度和对比度影响巨大,当前参数是基于通用场景调整的经验值。