基于MATLAB的灰度共生矩阵(GLCM)纹理特征提取系统
项目简介
本项目是一个基于MATLAB开发的图像纹理分析工具,专注于利用灰度共生矩阵(Gray Level Co-occurrence Matrix, GLCM)提取图像的纹理特征。系统集成了图像预处理、灰度级量化、多方向GLCM构建、Haralick纹理特征计算以及全方位的数据可视化功能。该工具能够定量描述图像纹理的粗细、规则程度及复杂性,适用于图像分割、医学影像分析及遥感图像分类等领域的特征提取任务。
功能特性
- 多格式图像支持:支持读取 JPG, PNG, BMP, TIF 等常见格式的图像文件。若用户取消选择,系统会自动加载内置演示图像。
- 智能预处理与量化:自动将彩色图像转换为灰度图像,并执行灰度级压缩(默认将256级压缩为16级),以减少计算量并提高矩阵统计的稳定性。
- 多方向GLCM计算:支持同时计算 0°、45°、90°、135° 四个经典方向的灰度共生矩阵。
- 矩阵优化处理:算法内部自动对GLCM进行对称化(Symmetric)和归一化(Normalization)处理,确保特征计算的准确性。
- 关键纹理特征提取:实现了Haralick定义的五大核心特征:
1.
能量 (Energy)
2.
对比度 (Contrast)
3.
相关性 (Correlation)
4.
均匀性 (Homogeneity)
5.
熵 (Entropy)
- 综合可视化界面:生成包含6个子图的分析面板,直观展示原始图像、量化图像、GLCM热力图、特征柱状图及数值统计汇总。
系统要求
- MATLAB R2016a 或更高版本
- Image Processing Toolbox(用于图像读取与基本处理)
使用方法
- 在MATLAB环境中打开项目所在文件夹。
- 直接运行主脚本。
- 系统将弹出文件选择对话框,请选择一张待分析的图片。
- 程序运行结束后,将自动生成一个包含图像展示和特征数据分析的窗口,并在命令行窗口输出详细的计算结果。
---
核心算法与实现逻辑分析
本项目的主逻辑完全包含在一个主脚本中,通过参数设置、流程控制和本地子函数调用实现完整的分析流程。
1. 参数配置模块
脚本开头定义了GLCM计算的关键参数:
- 灰度级 (GrayLevels):设置为16。这意味着原始0-255的像素值会被映射到1-16的区间。减少灰度级可以避免GLCM过于稀疏,提高统计意义。
- 步长 (Distance):默认为1,即统计相邻像素之间的关系。
- 方向 (Angles):定义了 [0, 45, 90, 135] 四个角度,覆盖了水平、垂直和两个对角线方向。
2. 图像读取与预处理 (loadImageAndPreprocess)
该模块实现了图像的加载和标准化:
- 交互式加载:利用
uigetfile 获取用户选择的文件路径。如果用户取消,则默认读取系统内置的 peppers.png 作为演示。 - 灰度转换:通过检测图像维度,若为三通道RGB图像,则调用
rgb2gray 转换为单通道灰度图。 - 线性量化:为了构建指定大小(16x16)的GLCM,代码使用线性量化公式
floor(pixel / 256 * levels) + 1,将像素值域从 [0, 255] 线性映射到 [1, 16]。这是构建GLCM前的关键步骤。
3. GLCM 矩阵构建核心 (computeGLCM)
这是系统的核心计算模块,手动实现了GLCM的生成逻辑,未依赖MATLAB内置的
graycomatrix 函数,以便更灵活地控制计算过程:
- 方向偏移定义:根据MATLAB矩阵索引规则(行向下增加,列向右增加),定义了四个方向的偏移量 $(dr, dc)$:
* 0°: (0, 1)
* 45°: (-1, 1) —— 对应右上方向
* 90°: (-1, 0) —— 对应正上方向
* 135°: (-1, -1) —— 对应左上方向
- 矩阵填充:遍历图像矩阵的每一个像素,根据当前方向找到邻域像素,在GLCM对应坐标位置累加计数。
- 对称化处理:为了消除方向正反的影响(即认为 A到B 与 B到A 的纹理关系一致),代码执行了
currentGLCM + currentGLCM' 操作,生成对称矩阵。 - 概率归一化:将计数矩阵除以所有元素之和,将其转化为概率矩阵 $P(i,j)$,这是后续特征计算的基础。
4. Haralick 特征计算 (calculateHaralickFeatures)
基于归一化的GLCM,代码实现了五个标量特征的数学运算:
- 能量:计算矩阵元素的平方和,反映纹理的均匀度和粗细。
- 对比度:利用权重
(i-j)^2 对矩阵元素加权求和,重点衡量远离对角线的元素,反映纹理的深浅和清晰度。 - 均匀性:利用权重
1/(1+|i-j|),衡量分布在对角线附近的元素,反映图像纹理的规则性。 - 熵:计算
-sum(p * log(p))。代码中特别处理了 log(0) 的情况,使用 eps(极小值)替代0,防止产生 NaN 错误,反映纹理的复杂度和信息量。 - 相关性:计算行与列的统计相关系数。代码中包含了标准差为0的特判逻辑,以防止纯色图像处理时出现除以零的错误。
5. 数据分析与可视化
系统通过单一 Figure 窗口展示完整结果:
- 图像展示区:并列显示原始彩色图和量化后的灰度索引图,方便观察量化对图像细节的影响。
- 矩阵热力图:使用
imagesc 绘制 0° 方向的GLCM热力图,直观展示像素对的分布模式。 - 特征图表:绘制“能量”和“熵”随角度变化的柱状图,帮助分析纹理的方向性(各向同性或各向异性)。
- 数值汇总:在界面右下角直接打印各角度特征的平均值,提供量化的最终分析结论。同时,控制台会输出每个具体角度的详细特征值。