基于Retinex理论的图像去雾算法MATLAB系统
项目介绍
本项目是一套基于Retinex理论的图像增强与去雾处理系统。Retinex(视网膜皮层)理论的核心思想是认为物体的颜色和亮度是由物体对入射光的反射能力决定的,而不是由入射光的绝对强度决定的。
本系统通过物理成像模型的逆向思维,将观测到的雾天图像分解为反映环境光照的亮度分量(Illumination)和反映物体本质特征的反射分量(Reflectance)。通过精准估算并剔除亮度分量的影响,系统能够显著恢复图像在雾霾环境下的细节,提高对比度并纠正色彩偏移,实现高质量的去雾效果。
功能特性
- 多算法集成:系统在一个集成化框架内实现了单尺度Retinex(SSR)、多尺度Retinex(MSR)以及自商图像(SQI)三种经典且高效的增强算法,方便对比效果。
- 智能化输入处理:支持交互式文件选择,允许用户从本地选取真实的雾天图像;同时具备模拟去雾能力,若无本地文件,系统会自动生成带有透射率物理特性的模拟雾图进行演示。
- 自适应对比度拉伸:内置了基于标准差裁剪的线性拉伸算法,能够自动优化处理后图像的动态范围,确保视觉输出的最佳观感。
- 直观的可视化界面:程序运行后会自动弹出四分屏对比图,将原始雾图与三种算法的处理结果同屏展示,便于定性分析算法优劣。
逻辑流程说明
本项目的主要执行流程如下:
- 环境初始化:清除MATLAB工作区的变量、命令行输出,并关闭所有图形窗口,确保运行环境纯净。
- 数据加载与预处理:
- 调用系统对话框让用户选择图像文件(支持jpg、png、bmp格式)。
- 若选择取消,则通过大气物理散射模型(结合大气光、散射系数和模拟距离场)生成一张人工模拟的雾图。
- 将图像数据转换为双精度浮点数以保证后续计算精度,同时预留图像副本。
- 算法并行计算:
-
单尺度处理:使用大尺度高斯核估算光照分布,在对数域提取反射分量。
-
多尺度处理:组合不同尺度(小、中、大)的高斯平滑结果,平衡细节增强与色彩一致性。
-
自商处理:通过像素级除法直接计算反射率,并进行非线性映射。
- 后处理与显示:
- 对每个算法生成的结果执行对比度拉伸。
- 将结果转换回8位无符号整型(uint8)进行显示。
- 统一布局显示,生成包含各算法参数标识的最终对比图。
关键算法实现细节
1. 单尺度Retinex (SSR)
该算法首先利用高斯环绕函数对图像的每个通道进行卷积,以此模拟环境中光照分布。计算逻辑是在对数域中进行的,即将原始图像的对数减去高斯模糊后光照图的对数。公式表示为:R(x,y) = log(I(x,y)) - log(I(x,y) * G(x,y))。这种方法能有效提升图像的局部对比度,使处于阴影或雾气掩盖下的细节显现出来。
2. 多尺度Retinex (MSR)
由于单尺度处理在细节增强与色彩保真度之间存在矛盾(尺度小则细节多但色彩失真,尺度大则色彩准但细节平),本项目实现了MSR。它通过对三个不同尺度(sigma分别为15, 80, 250)的对数差值进行加权求和(权重各占1/3)。这种权重组合确保了在抑制雾气干扰的同时,最大程度地模拟人类视网膜对不同频率细节的感知。
3. 自商图像 (SQI)
这是一种非基于对数变换的反射分量提取方法。它通过原图与平滑版本进行点除运算(I/L)来获得商图。为了数值稳定性,系统在分母中引入了极小值(eps)。该算法在提取反射属性方面具有较强的边缘保留能力,随后通过log(1+q)的非线性变换进行增强,能有效避免传统方法中可能出现的“光晕”现象。
4. 对比度拉伸函数
系统的图像输出并非简单的截断,而是采用了智能拉伸策略。通过计算处理后数据的均值(mean)和标准差(std),将数值窗口限制在[均值-2倍标差, 均值+2倍标差]之间。超出范围的值分别被饱和到0或255。这种策略能自动滤除离散的极值噪声,极大提升了图像的通透度。
系统要求
- 环境版本:MATLAB R2016b 或更高版本。
- 工具箱:需要安装 Image Processing Toolbox(图像处理工具箱)。
- 硬件环境:支持常规PC运行,处理速度取决于图像分辨率大小。
使用方法
- 将所有代码文件下载至本地同一文件夹。
- 启动MATLAB,将当前工作路径切换至该文件夹。
- 在命令行窗口输入主函数名称并按回车键,或者直接打开主程序脚本点击“运行”按钮。
- 在弹出的文件选择器中挑选一张受雾霾干扰的图像,或者点击取消以查看模拟雾图的处理演示。
- 等待计算完成后,系统将自动展示四个对比子图,展示SSR、MSR与SQI的不同去雾表现。