基于GLCM与K-Means的纹理图像分割系统
项目介绍
本项目实现了一个基于MATLAB的高级图像分割工具,专门针对单纯依靠颜色或灰度阈值难以分割的复杂纹理图像。系统通过计算灰度共生矩阵(GLCM)提取局部纹理特征,并结合K-Means聚类算法实现无监督的图像分割。
该方案模拟了完整的计算机视觉处理流程,从合成数据的生成、图像预处理、滑动窗口特征提取、多维特征聚类到最终的形态学优化与可视化展示。它通过分析图像局部的统计特性(如对比度、能量等),能够有效区分具有不同表面结构的区域。
功能特性
- 合成纹理数据生成:内置自动化脚本,可生成包含随机噪声、垂直条纹、棋盘格和网格纹理的测试图像,用于算法验证。
- 图像增强与量化:包含直方图均衡化以增强对比度,并执行灰度级量化(降至16级)以优化计算效率。
- 滑动窗口特征提取:采用13x13的滑动窗口遍历图像,捕捉局部纹理细节。
- 旋转不变性GLCM:综合计算水平、垂直及两个对角线方向(0°, 45°, 90°, 135°)的共生矩阵,确立特征的旋转不变性。
- 多维纹理特征构建:提取对比度(Contrast)、相关性(Correlation)、能量(Energy)和同质性(Homogeneity)四个核心统计量。
- 特征图平滑处理:应用中值滤波去除特征图中的噪点和离群值。
- 无监督聚类分割:利用K-Means算法对高维特征向量进行自动分类,无需人工标注数据。
- 结果优化与可视化:通过形态学开闭运算去除分割碎片,并提供特征热力图、伪彩色分割图及边界叠加图的直观展示。
系统要求
- MATLAB R2016a 或更高版本
- Image Processing Toolbox(图像处理工具箱)
- Statistics and Machine Learning Toolbox(统计与机器学习工具箱)
使用方法
- 确保MATLAB环境已安装上述所需的工具箱。
- 将脚本文件保存到MATLAB工作路径中。
- 直接运行主函数。
- 程序将自动执行以下步骤:
* 生成并显示合成纹理图像。
* 显示带有进度条的特征提取过程。
* 弹出GLCM特征的可视化窗口。
* 弹出最终的分割结果对比窗口。
算法实现细节与逻辑分析
本项目核心代码采用了模块化设计,主要处理流程如下:
1. 图像获取与预处理
- 数据源:程序首先调用内部辅助函数
generateSyntheticTexture,生成一个256x256像素的合成图像,该图像被划分为四个区域,分别填充了高斯噪声、正弦波条纹、棋盘格和斜线网格四种截然不同的纹理。 - 灰度化与均衡化:无论输入源如何,首先将其转换为灰度图,并使用
histeq 进行直方图均衡化,以覆盖更广的灰度范围,增强纹理细节。 - 灰度量化:为了大幅降低GLCM计算的计算量,将图像的灰度级归一化并量化为16级。这是GLCM算法优化的关键步骤,能显著减少共生矩阵的稀疏性。
2. GLCM纹理特征提取(核心算法)
- 滑动窗口机制:代码定义了一个13x13像素的窗口,对图像进行逐像素遍历。虽然使用了显式的双重循环(并在代码中通过进度条可视化进度),但这种方式清晰展示了局部邻域处理的逻辑。为了处理图像边缘,采用了对称填充(symmetric padding)。
- 多方向GLCM计算:对于每一个窗口区域,计算其灰度共生矩阵。代码设置了四个偏移量
[0 1; -1 1; -1 0; -1 -1],分别对应0度、45度、90度和135度方向。 - 融合策略:为了保证纹理识别不受旋转角度影响,代码将这四个方向生成的GLCM矩阵进行累加求和(
sum(glcm, 3)),基于累加后的矩阵计算统计量。 - 指标计算:利用
graycoprops 函数提取四个关键纹理描述子:
*
Contrast(对比度):度量矩阵值的变化程度,反映纹理的沟纹深浅。
*
Correlation(相关性):度量灰度级明显的线性依赖关系。
*
Energy(能量):各元素平方和,反映纹理的均匀程度和规则性。
*
Homogeneity(同质性):度量图像局部灰度的均匀性。
3. 数据后处理与聚类准备
- 特征图滤波:原始提取的特征图往往含有噪声。代码在进入聚类前,使用5x5的中值滤波器(
medfilt2)对四个特征通道分别进行平滑处理,这能有效提升后续分割区域的连通性。 - 特征向量化与标准化:将四个二维特征矩阵拉直为一维向量,并组合成
[N, 4] 的特征矩阵。随后使用Z-score标准化(zscore),消除不同特征量纲(如能量值通常很小,而对比度可能很大)对距离计算的影响。
4. K-Means 聚类分割
- 参数配置:鉴于合成图像已知包含4种纹理,代码将聚类中心数
K 设定为4。 - 聚类执行:调用
kmeans 函数,使用“欧氏距离的平方”作为度量标准,并设置了3次重复聚类(Replicates),以防止算法陷入局部最优解。 - 结果重构:将聚类输出的标签向量重新整形为与原图像一致的二维矩阵。
5. 分割结果优化与展示
- 形态学操作:初步的K-Means结果可能包含细碎的噪点或孔洞。代码依次执行形态学“开运算”和“闭运算”(使用半径为3的圆盘结构元素),平滑分割边界并填充孔洞。
- 可视化输出:
*
特征图:使用Jet伪彩色图展示四个纹理特征的空间分布。
*
分割掩膜:将最终的标签矩阵转换为RGB彩色图显示。
*
边界叠加:使用Canny算子提取分割区域的边缘,并将其以红色线条叠加在原始图像上,直观展示分割精度。