基于灰度共生矩阵的多方向纹理特征提取系统
项目简介
本项目是一个在 MATLAB 环境下构建的图像纹理分析算法。其核心机制利用灰度共生矩阵(Gray-level Co-occurrence Matrix, GLCM)量化图像像素间的空间灰度依赖关系。该系统能够对输入图像进行预处理,计算四个关键方向(0°、45°、90°、135°)的 GLCM,并从中提取最具代表性的二阶统计特征(Haralick 特征)。最终,算法将这些特征融合为特征向量,并在图形界面中直观展示分析结果。该工具适用于医学影像分析、遥感分类、材料表面检测等需要纹理描述的场景。
功能特性
- 鲁棒的图像读取机制:默认读取标准测试图像(peppers.png),若文件缺失,系统会自动生成带有椒盐噪声的合成正弦光栅纹理图像,确保程序在任何环境下均可运行。
- 图像预处理:包含彩色图像自动灰度化处理,以适应下游计算需求。
- 多方向 GLCM 构建:针对 0 度、45 度、90 度、135 度四个方向分别计算灰度共生矩阵,全方位捕捉纹理的方向性。
- 灰度级量化优化:将原始 256 灰度级量化压缩至 16 级,有效减少计算量的同时提高了统计特征的稀疏性与稳定性。
- 关键纹理特征提取:提取四大核心统计量:对比度(Contrast)、相关性(Correlation)、能量(Energy/ASM)和同质性(Homogeneity)。
- 多维度数据可视化:
* 原始图像与灰度图像对比。
* 对数变换后的 GLCM 热力图,直观展示纹理分布。
* 多方向特征对比柱状图,并带有数值标注。
- 详细的数据报告:在命令行窗口输出格式化的特征数据表、均值统计以及最终的综合特征向量。
系统要求
- MATLAB R2014b 或更高版本
- Image Processing Toolbox(图像处理工具箱)
使用方法
- 将项目代码保存为
main.m 文件。 - 确保 MATLAB 的当前工作目录包含该文件。
- (可选)将待分析的图片命名为
peppers.png 放入同级目录,或修改代码中的文件名。 - 在 MATLAB 命令行窗口输入
main 并回车。 - 程序将自动执行,弹出包含图像和图表的分析窗口,并在命令行打印详细数据。
算法实现细节与逻辑分析
本项目主要通过 main 函数实现,具体逻辑流程如下:
1. 环境初始化与图像加载
程序启动时首先清理工作区变量和图形窗口。利用
try-catch 结构尝试读取
peppers.png。如果读取失败,则通过
meshgrid 和
sin/cos 函数生成一个合成纹理,并添加 2% 的椒盐噪声,这一设计保证了代码的可演示性。读取后的图像包含 RGB 通道检测,若为彩色图像则调用
rgb2gray 转换为单通道灰度图。
2. GLCM 参数配置与构建
这是算法的核心部分。为了提高计算效率和统计显著性,代码定义了
numLevels = 16,即将图像灰度压缩到 16 个级别。
程序定义了四个方向的偏移量(Offsets)矩阵:
- 0°:[0, 1](水平向右)
- 45°:[-1, 1](右上方向)
- 90°:[-1, 0](垂直向上)
- 135°:[-1, -1](左上方向)
调用
graycomatrix 函数生成 GLCM,并开启
'Symmetric' 选项,使矩阵关于对角线对称,这意味着计算时不区分像素对的方向性(例如 (i,j) 和 (j,i) 被视为相同),提高了特征的旋转稳定性。
3. Haralick 特征提取
基于生成的四个 GLCM 矩阵,利用
graycoprops 函数提取以下四个统计特征:
- 对比度 (Contrast):度量矩阵的值分布和图像的局部变化,反映纹理的沟纹深浅。
- 相关性 (Correlation):衡量图像中像素与其邻域像素的灰度线性关系。
- 能量 (Energy):即角二阶矩(ASM)的平方根,反映图像纹理的粗细程度和灰度分布均匀性。
- 同质性 (Homogeneity):度量图像局部的紧密性,反映纹理的均匀程度。
4. 数据融合与报告输出
算法通过循环遍历四个方向的统计结果,在命令行打印格式化的数据表。同时,将每个方向的这四个特征值依次拼接,构建一个一维数组
fVector(综合特征向量),作为后续机器识别或分类的标准输入格式。此外,代码还计算了各特征在四个方向上的均值,作为旋转不变性的参考指标。
5. 可视化分析
代码生成一个包含多个子图的窗口:
- 第一行:展示原始图像、灰度化后的图像以及 0 度方向的 GLCM 图像。GLCM 的可视化采用了对数变换
log(glcm + 1),以增强显示低频高能和高频低能区域的视觉对比度。 - 第二行:绘制并排柱状图,直观对比四个方向上的特征值。为了便于阅读,代码自动在每个柱状条上方标注了具体的数值(保留两位小数)。
输出示例说明
程序结束后,用户将在 MATLAB 命令行窗口 看到类似以下的结构化输出:
- 图像尺寸与量化级数信息。
- 这是一个包含"方向、对比度、相关性、能量、同质性"五列的数据表,列出了 0° 到 135° 的具体数值。
- 均值统计行。
- 完整的综合特征向量数组(Feature Vector)。
同时,
图形窗口 将展示图像处理的中间结果和最终的特征统计图表。