基于MATLAB的图像同态滤波增强系统
项目简介
本项目利用MATLAB编程环境深入实现了一种非线性图像处理技术——同态滤波(Homomorphic Filtering)。该系统旨在解决图像中由于光照不均或动态范围过大导致的细节模糊问题。
同态滤波通过将图像的灰度变换与频域滤波相结合,基于“图像 = 照射分量 $times$ 反射分量”的成像模型,在频域能够分别控制图像的低频分量(对应光照背景)和高频分量(对应景物细节)。系统通过对数变换将乘性噪声转化为加性噪声,利用高通滤波器压制低频亮度变化并增强高频边缘,最终实现光照校正与细节锐化。
功能特性
- 光照不均环境模拟:系统内置了光照模拟模块,能够自动生成高斯分布的光照掩模,并叠加到输入图像上,模拟中心亮、四周暗的拍摄环境,便于直观测试算法效果。
- 自适应颜色处理:针对彩色图像,算法自动将其转换至HSV色彩空间,仅提取V(亮度)分量进行同态滤波处理,处理后再还原为RGB图像。这确保了在增强对比度的同时,不会导致图像色彩失真。
- 可调参数的高斯同态滤波器:实现了基于高斯高通滤波器的同态滤波算法,支持自定义高频增益、低频增益、锐化系数和截止频率。
- 多维数据可视化:提供完善的结果分析视图,包括处理前后图像对比、滤波器三维频域响应、直方图统计对比以及单行像素亮度截面线对比。
- 鲁棒的输入处理:尝试读取标准测试图像,若读取失败会自动生成棋盘格图像通过测试。
系统要求
- MATLAB R2016a 或更高版本
- Image Processing Toolbox(图像处理工具箱)
使用方法
直接运行 main.m 脚本即可启动程序。
- 程序首先会清理工作区。
- 尝试读取
peppers.png,如果未找到文件,将生成测试用的棋盘格图像。 - 程序会自动为图像添加不均匀光照效果。
- 执行同态滤波算法。
- 弹出图形窗口展示处理结果和分析图表。
详细算法实现原理
该项目在 main.m 中完整实现了同态滤波的全过程,主要逻辑流程如下:
1. 预处理与光照模拟
算法首先将图像数据归一化到 [0, 1] 区间。为了演示滤波效果,代码显式构造了一个二维高斯分布矩阵作为光照分量,将其与原图相乘,人为制造出中心明亮、边缘昏暗的视觉效果。
2. 色彩空间转换
系统会检测输入图像的通道数。如果是三通道(RGB)图像,则通过
rgb2hsv 转换为HSV空间,提取其中的 V 通道(亮度)作为待处理数据;如果是灰度图则直接处理。这种处理方式避免了直接对RGB三通道分别滤波可能产生的颜色偏差。
3. 同态滤波核心算法(homomorphic_process 函数)
这是系统的核心处理模块,步骤严格遵循同态滤波理论:
- 对数变换:对输入图像进行
ln(I + 1) 运算。这一步将图像模型中相乘的照射分量和反射分量转换为在数学上相加的形式,使得后续通过线性滤波器分离两者成为可能。 - 频域转换 (FFT):利用二维快速傅里叶变换 (
fft2) 将图像从空间域转换到频率域。 - 滤波器构造:构建一个频域的高斯高通滤波器。代码通过网格生成频率坐标,并计算各点到频率中心的距离。滤波器传递函数 $H(u,v)$ 的设计逻辑为:
*
低频区:增益通过参数 $gamma_L$ 控制(设为0.5),用于衰减缓慢变化的光照分量,压缩动态范围。
*
高频区:增益通过参数 $gamma_H$ 控制(设为2.0),用于放大突变的边缘细节反射分量,增强对比度。
*
过渡带:通过参数 $c$(锐化系数)和 $D_0$(截止频率)控制滤波器从低频到高频的过渡形态。
- 频域滤波:将频域图像与滤波器传递函数点乘。
- 逆变换与恢复:执行二维傅里叶逆变换 (
ifft2) 并取实部,得到处理后的对数域图像。 - 指数变换:通过
exp(g) - 1 运算将图像还原回线性空间。 - 归一化:通过最小-最大值拉伸,将输出结果严格映射回 [0, 1] 范围,确保图像显示正常。
4. 结果分析与展示
程序最后生成一个包含六个子图的窗口:
- 输入图像:展示经过人工施加不均匀光照后的原始效果。
- 输出图像:展示经过同态滤波处理后的增强效果,阴影被去除,细节更清晰。
- 滤波器传输函数:以3D网格图形式展示滤波器的形状,直观呈现高低频增益的分布。
- 直方图对比:分别展示输入和输出图像的亮度直方图,通常输出图像的直方图分布会更加均匀。
- 截面线对比:提取图像中间行的像素亮度值绘制曲线。不仅展示了整体亮度的提升,还能清晰看到输出曲线在边缘处的波动幅度(对比度)显著增加。