基于暗通道先验的MATLAB图像增强系统
项目介绍
本项目实现了一套基于暗通道先验(Dark Channel Prior)理论的单幅图像去雾处理系统。该系统利用统计学规律,即在绝大多数非天空的户外无雾图像局部区域内,至少有一个颜色通道的像素值非常低。通过这一特性,系统可以从受雾气干扰的图像中估算出场景的透射率以及全球大气光成分,进而结合物理散射模型恢复出清晰、高对比度的原始图像。系统能够有效修复图像由于雾、霾、烟尘引起的对比度降低及色彩偏移问题。
功能特性
- 暗通道特征提取:自动计算输入图像的暗通道分布图,识别图像中受雾气影响程度不同的区域。
- 大气光自动估计:通过搜索暗通道中最亮区域的0.1%像素,并在原图中寻找最高强度点,精准确定环境大气光。
- 透射率精确计算:支持可调节的去雾强度因子,通过估计初始透射率分布来还原场景深度。
- 边缘保留滤波:采用导向滤波(Guided Filter)技术对粗略的透射率图进行优化,有效消除物体边缘的块状效应,保留锐利的边缘细节。
- 物理模型恢复:基于大气散射模型进行反向映射,输出经过范围裁剪和归一化的去雾结果图。
- 过程结果可视化:同步展示原始图、暗通道图、优化透射率图及最终去雾图,便于算法分析。
使用方法
- 在MATLAB环境下运行主程序。
- 在弹出的文件选择对话框中,选取需要处理的有雾图像(支持 jpg, png, bmp, tif 等格式)。
- 程序将自动进行数据类型转换、暗通道生成、大气光估计、透射率优化以及最终的图像重建。
- 处理完成后,系统会弹出一个图形窗口,分四个子图展示去雾过程的各个阶段,并在命令行中打印出估算的大气光值。
系统要求
- MATLAB R2016a 或更高版本。
- 图像处理工具箱(Image Processing Toolbox)。
核心功能与实现逻辑分析
#### 1. 数据预处理
系统首先将输入的RGB图像转换为双精度浮点型(double)并归一化到 [0, 1] 区间,以保证后续数学运算的精度。
#### 2. 暗通道计算
实现逻辑:首先获取图像三个颜色通道中的像素最小值,形成一副单通道图像。随后使用特定大小(15x15)的方形结构元素对该图像进行最小值滤波(等效于形态学腐蚀操作)。此步骤反映了暗通道先验的核心假设。
#### 3. 全球大气光(A)估计
实现逻辑:
- 统计暗通道图中亮度最高的前0.1%的像素位置。
- 在这些候选位置中,到原始输入图像中寻找像素强度总和(或向量长度)最大的点。
- 将该点的RGB值作为最终的大气光估计值。
#### 4. 透射率图估计与细化
实现逻辑:
- 初始估计:根据大气散射公式,通过对归一化后的图像(I/A)再次计算暗通道,并引入去雾因子(0.95)来控制保留少量的雾气,使结果更符合视觉习惯。
- 导向滤波优化:为了解决初始透射率图在物体边缘处的模糊现象,使用原图的灰度版本作为导向图像。通过局部线性模型对透射率进行平滑处理,在去除块状噪声的同时使透射率分布贴合景深边缘。
#### 5. 场景辐射恢复
实现逻辑:利用物理模型 $J(x) = (I(x) - A) / max(t(x), t0) + A$。
- 其中 $t0$ 为预设的下限值(0.1),用于防止在极端情况下分母趋近于0导致的图像数值爆炸。
- 对恢复出的像素值进行 [0, 1] 范围限定,确保图像能够正常显示。
关键函数说明
- calculate_dark_channel:执行多通道求最小及空间域最小值滤波,是算法提取深度特征的基础。
- estimate_atmospheric_light:基于统计学分布和像素点强度对比,锁定全局光照背景值。
- guided_filter:核心优化函数。它通过局部线性回归计算滤波输出,能在平滑去噪的同时保留强边缘特征,是解决去雾图像“光晕”问题的关键。
- box_filter:高效的快速均值滤波实现,通过计算积分图(累加和)的方式,使滤波运算时间不随窗口半径增大而增加,大大提升了透射率优化的效率。