基于MATLAB的数字图像处理经典算法库
项目介绍
本项目构建了一个全面且模块化的MATLAB图像处理算法演示系统。该系统旨在通过实际代码直观展示数字图像处理领域的经典操作与核心算法。代码结构设计清晰,所有的功能模块均集成在一个主流程中,配合详细的子函数实现,非常适合用于算法原理学习、高校教学演示以及计算机视觉基础研究。
项目不仅调用了MATLAB工具箱的函数,还在关键算法(如Sobel边缘检测、双线性插值旋转、频域滤波器构建)中进行了手动实现,以便深入理解算法底层逻辑。
功能特性
- 模块化设计:包含图像增强、滤波、频域处理、边缘检测、几何变换及形态学处理七大核心模块。
- 鲁棒性:内置图像加载异常处理机制,若缺少测试图片会自动生成合成图像(Phantom)。
- 可视化:每个模块均独立生成窗口,对比显示处理前后的图像及相关数据(如直方图、频谱图)。
- 底层实现:演示了手动卷积、自定义几何变换映射和频域滤波器构造过程。
系统要求
- MATLAB R2016b 或更高版本
- Image Processing Toolbox(图像处理工具箱)
使用方法
- 将项目代码保存为
main.m 并在MATLAB环境中打开。 - 确保当前目录下存在测试图片
peppers.png(或者直接运行,脚本会自动使用系统内置的 phantom 生成图像)。 - 在命令行窗口输入
main 并回车,或点击编辑器中的“运行”按钮。 - 系统将依次弹出7个独立的图形窗口,分别展示不同算法模块的处理结果。
详细功能实现与算法分析
本项目完全基于 main.m 的代码逻辑,包含以下七个具体的功能模块:
1. 图像增强与点运算
该模块展示了基于像素点的灰度变换技术,用于改善图像的视觉效果。
- 灰度反转:通过
1 - img 实现,将黑色变为白色,反之亦然。 - 对数变换:通过公式
s = c * log(1 + r) 实现,用于扩展图像中的暗像素值,增强低灰度区域细节。 - 伽马校正(幂律变换):实现了 $gamma=0.4$(变亮)和 $gamma=2.5$(变暗)两种情况,演示非线性灰度映射对对比度的影响。
- 分段线性变换(对比度拉伸):手动实现了分段函数逻辑,将原图中
[0.3, 0.7] 的灰度范围线性拉伸至 [0.1, 0.9],从而提高特定范围内的图像对比度。
2. 直方图处理
该模块专注于图像的统计特性分析与调整。
- 直方图统计:使用
imhist 计算并绘制原始图像的灰度分布。 - 直方图均衡化 (HE):调用
histeq 函数,将图像的灰度直方图变换为近似均匀分布,显著增强了图像的全局对比度。
3. 空间域滤波
该模块演示了在空间域通过卷积操作去除噪声或增强细节。
- 噪声模拟:分别为图像添加了 5% 密度的椒盐噪声和方差为 0.01 的高斯噪声。
- 线性平滑滤波:
*
均值滤波:使用 3x3 平均模板,平滑图像但会导致边缘模糊。
*
高斯滤波:使用 5x5、Sigma=1.0 的高斯模板,实现更自然的平滑效果。
- 非线性滤波:使用 3x3 中值滤波器 (
medfilt2),展示了其在去除椒盐噪声同时保留边缘细节方面的优势。 - 图像锐化:利用拉普拉斯算子 (
fspecial('laplacian')) 提取高频分量,通过原图减去拉普拉斯分量的方式增强图像边缘。
4. 频域分析与处理
该模块展示了图像在频率域的特性及滤波操作,包含了完整的频域处理流水线。
- FFT变换与频谱显示:对图像进行填充(Padding)以避免周期性混叠,计算二维快速傅里叶变换,并利用对数变换和频谱中心化技术可视化频谱图。
- 滤波器构造:
*
高斯低通滤波器 (GLPF):手动构建高斯传递函数,截止频率设为 60,通过网格计算距离矩阵,用于平滑图像。
*
巴特沃斯高通滤波器 (BHPF):手动构建 2 阶巴特沃斯传递函数,截止频率设为 30,用于锐化和提取边缘。
- 频域滤波:将频域图像与滤波器函数点乘,再进行傅里叶反变换(IFFT)并裁剪回原始尺寸。
5. 边缘检测与特征提取
对比了多种经典算子的边缘检测效果。
- Manual Sobel:手工定义水平和垂直方向的 Sobel 卷积核,分别计算梯度,最后通过平方和开方计算梯度幅值。
- 经典算子对比:
*
Roberts:对噪声敏感,定位精度一般。
*
Prewitt:抑制噪声能力略优于 Roberts。
*
LoG (Laplacian of Gaussian):先高斯平滑再拉普拉斯边缘检测,检测效果更连贯。
*
Canny:利用双阈值和非极大值抑制,展示了最佳的单像素边缘定位效果。
6. 几何变换
展示了改变图像空间位置和形状的操作,包含内置函数与自定义实现。
- 缩放:使用双线性插值将图像缩小至 50%。
- 错切 (Shear):构建仿射变换矩阵(Affine2d),实现图像的水平错切。
- 镜像:通过矩阵索引操作实现水平镜像翻转。
- 旋转:
* 自定义实现了
rotate_bilinear_custom 函数。
* 演示了旋转算法的核心原理:计算新画布尺寸、反向映射(从输出像素找回输入像素)以及双线性插值的坐标计算逻辑(代码中展示了坐标变换框架)。
7. 形态学图像处理
基于二值图像的集合运算,用于形状提取和后处理。
- 预处理:使用 Otsu 算法(最大类间方差法)自动确定阈值并将图像二值化。
- 基本运算:
*
腐蚀:缩小高亮区域,消除细小噪点。
*
膨胀:扩大高亮区域,填充物体内部孔洞。
*
开运算:先腐蚀后膨胀,用于断开狭窄连接和去噪。
*
闭运算:先膨胀后腐蚀,用于平滑轮廓和填充断裂。
*
形态学梯度:通过膨胀图减去腐蚀图,提取物体的形态学边界。