基于灰度共生矩阵的图像纹理特征提取系统
项目简介
本项目是一个基于 MATLAB 开发的图像纹理分析工具,专注于使用灰度共生矩阵(Gray Level Co-occurrence Matrix, GLCM)算法来提取和分析图像的二阶统计纹理特征。系统能够处理彩色或灰度图像,通过预处理、灰度量化、矩阵构建及特征计算,最终输出图像在不同方向上的纹理描述符。该工具集成了丰富的数据可视化功能,旨在帮助用户直观地理解图像的粗糙度、对比度以及方向性特征,适用于计算机视觉、医学影像分析及材料表面检测等领域。
功能特性
- 自动图像加载与容错处理:系统优先加载演示图像,若文件不存在则自动生成合成纹理(棋盘格)以确保程序可运行。
- 图像预处理与优化:包含色彩空间转换(RGB转灰度)及尺寸归一化(Resize),以统一输入标准并提升计算效率。
- 灰度级量化算法:实现了将原始 256 级灰度压缩至 16 级的均匀量化处理,有效降低了 GLCM 的稀疏性和计算复杂度。
- 多方向 GLCM 构建:支持计算 0°、45°、90°、135° 四个经典方向的对称灰度共生矩阵。
- 核心纹理特征提取:精确计算四大关键 Haralick 特征:对比度 (Contrast)、相关性 (Correlation)、能量 (Energy/ASM) 和逆差矩 (Homogeneity)。
- 多维度可视化展示:
* 原始图像与量化效果对比。
* 四个方向 GLCM 的概率密度热力图。
* 能量与逆差矩的柱状图对比。
* 对比度与相关性的双轴趋势图。
- 详细的数据报告:在控制台输出格式化的数值统计表,便于数据记录与分析。
系统要求
- MATLAB R2016a 或更高版本
- Image Processing Toolbox(图像处理工具箱)
使用方法
- 确保 MATLAB 当前工作目录中包含
main.m 文件。 - (可选)在同级目录下放置名为
peppers.png 的测试图片;若未放置,程序将使用内置算法生成测试纹理。 - 在 MATLAB 命令窗口中输入
main 并回车,或直接运行 main.m 脚本。 - 程序将自动弹出图形化界面展示分析图表,并在控制台打印详细的特征数值。
详细实现逻辑与算法分析
本项目仅包含一个核心脚本 main.m,其内部处理流程如下:
1. 环境初始化与图像输入
- 程序启动时会自动清理工作区、关闭现有图形窗口并屏蔽警告信息。
- 采用
try-catch 机制读取图像:优先尝试读取 peppers.png;若失败,则生成 20x20 格子的二值化棋盘格图像,并转换为 uint8 格式。 - 检测输入图像是否为 RGB 格式,若是则通过
rgb2gray 转换为灰度图。 - 使用
imresize 将图像强制调整为 256x256 像素,以保证计算速度。
2. 灰度量化 (Quantization)
- 为了减少 GLCM 的尺寸并提高统计稳定性,代码执行了灰度级压缩。
- 算法将原始的 [0, 255] 灰度范围线性映射到 [0, 15] 的范围(共 16 个灰度级)。
- 量化公式采用
floor(double(grayImg) / 256 * numLevels),结果转换为 uint8 类型。
3. GLCM 矩阵构建
* 0度:
[0 1]
* 45度:
[-1 1]
* 90度:
[-1 0]
* 135度:
[-1 -1]
- 调用 MATLAB 内置函数
graycomatrix 计算共生矩阵。 - 关键参数设置:
*
NumLevels: 设为 16,对应量化后的级别。
*
GrayLimits: 明确指定为
[0 15],防止函数默认从 1 开始导致的索引偏差。
*
Symmetric: 设为
true,确保计算像素对 (i, j) 时同时也考虑 (j, i),生成对称矩阵。
4. 特征计算 (Haralick Features)
- 利用
graycoprops 函数基于生成的 GLCM 提取统计特征。 - 选取的特征描述符包括:
*
Contrast (对比度):度量矩阵的值分布和图像的局部变化。
*
Correlation (相关性):度量灰度级在图像中的线性依赖关系。
*
Energy (能量):即角二阶矩,度量纹理的一致性或有序性。
*
Homogeneity (逆差矩):度量图像纹理分布的紧密程度。
5. 结果可视化
代码创建了一个 3行4列 的组合图形窗口进行展示:
- 图像层(第1行):展示原始灰度图与经过 16 级量化后的效果图,直观显示预处理造成的信息损失程度。
- 矩阵层(第2行):通过循环遍历 4 个方向,将每个 GLCM 矩阵归一化(除以总和)转换为概率矩阵,并使用
imagesc 绘制热力图(Heatmap),配合 parula 伪彩色映射,展示灰度共生情况分布。 - 统计层(第3行):
*
左侧图表:使用
bar 柱状图对比不同角度下的能量(Energy)和逆差矩(Homogeneity)。
*
右侧图表:使用
yyaxis 双纵轴绘图技术。左轴绘制“对比度”折线,右轴绘制“相关性”折线,解决了两个指标数值量级差异大难以同图显示的问题。
6. 终端输出
- 程序最后通过
fprintf 在 MATLAB 控制台输出格式化的文本表格。 - 表格列出了 0度、45度、90度、135度 四个方向对应的对比度、相关性、能量和逆差矩的具体数值(保留 4 位小数)。