项目:基于MATLAB的纹理分析与图像分割系统
1. 项目简介
本项目是一个基于MATLAB开发的纹理图像分割系统的演示实现。该系统演示了从输入图像到最终分割结果的完整流程,重点展示了如何利用
Gabor滤波器组 提取纹理特征,并结合
K-means聚类算法 实现无监督的图像区域分割。
代码设计为自包含模式,无需读取外部图片文件,运行时会自动生成包含四种典型纹理的合成图像用于测试。该项目非常适合用于理解纹理分析的基本原理、信号处理在图像特征提取中的应用以及聚类算法在图像分割中的落地。
2. 功能特性
- 自动化数据生成:内置合成图像生成器,自动构建包含低频条纹、高频条纹、网格纹理和混合噪声纹理的测试图,并带有真值(Ground Truth)以便对比。
- 多尺度Gabor特征提取:构建包含不同波长(尺度)和方向的Gabor滤波器组,捕捉图像丰富的频率和方向信息。
- 自适应特征平滑:根据滤波器波长动态调整高斯平滑的尺度,有效聚合局部纹理能量。
- 空间约束增强:在特征向量中引入像素的空间坐标信息,提高分割结果的区域连续性。
- 形态学后处理:利用形态学开闭运算优化分割掩模,去除噪点和平滑边界。
- 全流程可视化:提供从滤波器形状、特征图响应、K-means聚类结果到最终边缘叠加图的完整可视化展示。
3. 系统要求
- MATLAB R2016a 或更高版本
- Image Processing Toolbox(图像处理工具箱)
- Statistics and Machine Learning Toolbox(统计与机器学习工具箱,用于K-means)
4. 使用方法
- 确保MATLAB的工作路径包含本项目的
main.m 文件。 - 在MATLAB命令行窗口输入
main 并回车,或直接运行该脚本。 - 系统将依次弹出窗口显示:
* 原始合成图像与真值对比。
* 生成的Gabor滤波器组可视化。
* 最终的分割结果对比图(包含原始图、特征图、伪彩色分割图及边缘叠加图)。
- 控制台将输出处理进度日志和参考文献信息。
5. 核心算法与实现细节(基于main.m)
本项目 main.m 严格按照以下流水线进行处理:
5.1 数据准备
程序首先调用内部函数生成一张 512x512 的合成图像。图像被划分为四个象限:
- 左上:由低频正弦波生成的垂直条纹。
- 右上:由高频正弦波生成的水平条纹。
- 左下:双向正弦波叠加形成的棋盘/网格纹理。
- 右下:斜向条纹与高斯随机噪声的混合。
- 最后全图叠加高斯白噪声以模拟真实成像环境的干扰。
5.2 Gabor滤波器组构建
系统构建了一个多通道滤波器组:
- 波长(Wavelengths):设定为 [8, 16] 像素,对应不同的纹理粗细尺度。
- 方向(Orientations):从0度到150度,步长为30度(共6个方向)。
- 滤波器生成:通过
buildGaborBank 函数,利用高斯包络乘以余弦载波生成二维Gabor核。
5.3 纹理特征提取
- 卷积滤波:将输入图像分别与Gabor滤波器组中的每一个核进行卷积。
- 能量计算:对卷积结果取绝对值,获得纹理能量响应(非线性变换)。
- 动态高斯平滑:为了消除高频波动并提取区域性的纹理统计特征,对能量图进行高斯滤波。代码中设定平滑参数 $sigma$ 为当前滤波器波长的 0.5 倍,确保平滑尺度与纹理尺度相匹配。
5.4 特征后处理与空间增强
- Z-score标准化:对特征矩阵进行归一化处理(减均值除以标准差),消除不同滤波器响应幅值的量纲差异。
- 空间位置特征(关键步骤):代码显式地将像素的行坐标(Row Index)和列坐标(Col Index)作为额外的特征加入特征向量中。
* 坐标特征同样经过标准化处理。
* 引入权重系数(代码中设为 0.5),使得相邻像素在特征空间中距离更近,从而在聚类时倾向于被归为同一类,减少“椒盐”噪声般的错误分割。
5.5 图像分割 (K-means)
- 使用 MATLAB 自带的
kmeans 函数。 - 参数设定:设定类别数 $K=4$,距离度量为平方欧氏距离,重复运行3次以避免局部最优解,最大迭代次数100。
- 聚类完成后,将标签向量重塑回图像矩阵形状。
5.6 结果优化与输出
- 形态学操作:对K-means输出的标签图依次进行“开运算”和“闭运算”(使用半径为3原本的圆盘结构元素),填补小孔洞并平滑区域边界。
- 边缘检测:使用Canny算子提取由于分割产生的区域边界。
- 可视化绘图:
* 使用
label2rgb 将分割标签转换为彩色图像。
* 将分割边界以红色线条叠加在原始灰度图像上,直观展示分割精度。
6. 函数说明及代码结构
代码主要由主入口函数和三个辅助函数组成:
* 控制程序的整体流程,包括初始化、调用各模块、绘图和打印日志。
* 如果不带参数运行,默认执行全流程演示。
*
输入:波长数组、方向角度数组。
*
功能:根据指定的频率和方向参数,生成各个Gabor滤波器的二维矩阵。计算中包含坐标旋转和高斯包络的生成逻辑。
*
输入:图像尺寸(如512)。
*
功能:程序化生成测试用的合成纹理图像及其对应的真值(Ground Truth)标签图。
*
输入:当前滤波器索引、方向数量、波长数组。
*
功能:辅助逻辑,用于在卷积循环中根据当前的线性索引反推当前滤波器所对应的波长,以便为
imgaussfilt 设置正确的平滑参数。
7. 参考资源
代码运行结束时会在控制台输出相关的学术参考资料:
- [SCI] A. K. Jain and F. Farrokhnia, "Unsupervised texture segmentation using Gabor filters," Pattern Recognition, 1991.
- [中文核心] 李博, 冯海林. 基于改进Gabor滤波器和FCM的纹理图像分割. 计算机工程与应用, 2018.