基于MATLAB的单幅图像暗原色去雾系统
项目介绍
本项目是一个基于大气散射物理模型和暗原色先验(Dark Channel Prior)理论的图像修复系统。它专门用于解决因雾、霾、水汽等大气散射现象导致的图像对比度低、色彩暗淡和细节模糊等问题。系统通过分析图像的统计规律,估算环境大气光强度和媒介透射率,并通过数学逆运算实现图像的去雾还原,使其恢复到自然的清晰状态。
功能特性
- 智能图像读取与仿真:支持多种常用格式(JPG, PNG, BMP)的图像读入。若用户未提供输入图像,系统能够自动加载内置示例图像并模拟大气散射过程,生成非均匀分布的雾天效果进行算法演示。
- 暗通道自动计算:利用局部最小值滤波技术,提取图像各像素RGB三通道中的极小值,构建反映雾气浓度的暗通道图。
- 大气光强度精准估算:依据暗通道中亮度最高的0.1%像素区域,在原始图像中定位并计算全球大气光强度,确保去雾基准的准确性。
- 透射率估算与精细化:基于暗原色理论初步计算透射率,并引入高性能导向平滑滤波算法。该算法利用图像灰度信息作为引导,在去除噪声的同时精准保留物体的边缘纹理,有效消除了传统去雾算法常见的光晕效应。
- 物理模型复原:严格执行大气散射物理模型的逆运算,求解场景原始辐射强度。
- 视觉自动增强:在去雾基础上自动执行对比度拉伸处理,修正还原过程中的亮度损失,提升图像的整体色彩深度和通透度。
- 多维度结果分析:系统通过四分屏同步展示原始雾图、暗通道分布、精细化透射率图以及最终复原结果,方便用户直观对比处理效果。
使用方法
- 启动MATLAB软件。
- 将代码文件所在的文件夹设置为当前工作路径。
- 在命令行窗口直接运行主程序函数。
- 在弹出的文件选择对话框中,选择一张待处理的雾天图像进行确认。
- 若点击取消,系统将自动使用内置模型生成模拟雾气图像进行处理示范。
- 等待计算完成后,程序将自动弹出可视化窗口展示处理前后的详细结果。
系统要求
- 环境版本:MATLAB R2016b 及以上版本(需安装 Image Processing Toolbox 图像处理工具箱)。
- 硬件要求:建议内存4GB以上,以确保在大尺寸图像导向滤波运算时具备足够的系统资源。
核心算法与实现逻辑说明
1. 物理模型基础
算法基于经典的大气散射模型:I(x) = J(x)t(x) + A(1 - t(x))。其中 I(x) 是观测到的雾天图像,J(x) 是待恢复的清晰图像,A 是全球大气光,t(x) 是描述光线穿过介质后存留比例的透射率。
2. 暗通道提取模块
根据大量无雾户外图像的统计发现,非天空区域的像素中,至少有一个颜色通道的数值极低。程序通过 min(img, [], 3) 提取三通道中的最小值,随后利用 ordfilt2 滤波器执行 15x15 窗口的局部最小值运算。计算得到的暗通道图能直接反映场景深度的分布。
3. 大气光估算逻辑
为了避开图像中高亮白色物体(如白墙、路标)的干扰,程序从暗通道图中筛选出亮度排名前 0.1% 的像素坐标。返回到原图像中寻找这些坐标点中像素平均强度最大的值作为全球大气光强度 A。
4. 透射率计算与导向滤波优化
- 初步计算:根据公式 1 - omega * get_dark_channel(I/A) 计算初始透射率,其中 omega 设置为 0.95 以保留微量雾气,增强复原图像的真实感。
- 导向滤波(Guided Filter):这是本系统的关键环节。程序通过一个高性能的线性滤波函数,以原图的灰度版本作为引导图,对初始透射率进行保边平滑处理。该过程利用了均值滤波和窗口内的方差、协方差关系,相比中值滤波或高斯滤波,它能更好地贴合物体边缘,防止交界处出现伪影。
5. 图像复原与后处理
- 逆运算:根据公式 J(x) = (I(x) - A) / max(t(x), t0) + A 进行求解。其中 t0 设置为 0.1,作为透射率的下限,防止因分母过小导致复原值溢出或产生严重的噪声块。
- 对比度拉伸:复原后的图像往往整体偏暗,程序调用 imadjust 和 stretchlim 函数,根据像素分布的饱和度自动寻找最佳灰度范围进行拉伸,让画面更符合人眼的视觉感知。
6. 高效滤波器实现
为了保证处理速度,系统内部实现了快速均值滤波器。通过计算图像在水平和垂直方向的累积和(cumsum),实现了与滤波半径无关的 O(1) 复杂度运算,使得系统能够快速处理高分辨率的监控或航拍照片。