MATLAB 纹理特征提取:一文读懂 graycomatrix 与 graycoprops
一、前言在图像处理领域纹理特征是描述图像像素灰度空间分布规律的核心特征之一广泛应用于、图像分类、医学影像分析、工业检测等场景。灰度共生矩阵GLCM是提取纹理特征的经典方法通过统计图像中不同位置像素对的灰度出现规律量化图像的纹理粗糙程度、均匀性等特性。MATLAB 提供了graycomatrix生成 GLCM和graycoprops提取纹理特征两个核心函数零基础也能快速实现纹理特征提取。本文结合完整可运行代码讲解 GLCM 原理、函数用法、纹理特征含义帮你掌握 MATLAB 纹理特征提取流程。二、核心知识点铺垫1. 什么是灰度共生矩阵GLCM灰度共生矩阵描述图像中两个像素的空间位置关系与灰度关系定义两个像素的距离和方向0°、45°、90°、135°统计满足条件的像素对其灰度值(i,j)出现的次数 / 概率最终生成一个N×N矩阵N 为灰度级数矩阵值代表对应灰度像素对的共生频率简单说GLCM 就是图像纹理的 “数字指纹”。2. 四大核心纹理特征graycoprops 输出graycoprops默认提取 4 个最常用的纹理特征含义通俗易懂对比度Contrast衡量图像局部灰度差异值越大纹理越清晰、反差越大相关性Correlation衡量像素间的线性相关程度值越大纹理越规律能量Energy又称角二阶矩衡量图像纹理均匀性值越大纹理越单一、均匀同质性Homogeneity衡量纹理局部均匀程度值越大图像越平滑graycomatrix和graycoprops详细用法在MATALB命令提示符下可以使用doc graycomatrix 和doc graycoprops进行获得。三、程序代码和运行结果clear all; %清除工作区中的所有变量、函数、MEX文件等close all;%关闭所有打开的图形窗口figure窗口clc; %清除命令窗口Command Window中的所有输出使窗口变干净I imread(circuit.tif);% 若图像为彩色则转换为灰度图若已是灰度则保持不变if size(I, 3) 3I rgb2gray(I);end% 显示原始图像figure;subplot(2,2,1);imshow(I);title(原始灰度图像);%% 2. 计算灰度共生矩阵GLCM% 参数说明% Offset定义像素对的方向和距离。默认[0 1]表示水平向右距离1像素。% 为获取更全面的纹理可计算多个方向本例仅用一个方向演示。% NumLevels灰度级数值越小计算越快但可能损失细节。默认8这里保持8。% Symmetric是否对称化GLCM使矩阵对称便于特征提取。offsets [0 1]; % 0度方向距离1GLCM graycomatrix(I, Offset, offsets, NumLevels, 8, Symmetric, true);%% 3. 从GLCM中计算纹理特征% graycoprops函数计算对比度、相关性、能量、同质性stats graycoprops(GLCM, {Contrast, Correlation, Energy, Homogeneity});% 提取特征值由于只有一个偏移stats内各字段均为标量contrast stats.Contrast;correlation stats.Correlation;energy stats.Energy;homogeneity stats.Homogeneity;%% 4. 显示GLCM矩阵及纹理特征结果subplot(2,2,2);imagesc(GLCM);title(灰度共生矩阵 (GLCM));colorbar;axis square;xlabel(灰度级 j);ylabel(灰度级 i);% 在文本框中显示特征值subplot(2,2,[3,4]);text_str {sprintf(对比度 (Contrast) : %.4f, contrast);sprintf(相关性 (Correlation) : %.4f, correlation);sprintf(能量 (Energy) : %.4f, energy);sprintf(同质性 (Homogeneity) : %.4f, homogeneity);};text(0.1, 0.8, text_str, FontSize, 12, FontName, FixedWidth);axis off;title(纹理特征值 (Offset [0 1], NumLevels 8));%% 5. 补充不同方向GLCM的特征对比可选% 计算 0°, 45°, 90°, 135° 四个方向的GLCM并观察纹理特征变化offsets_multi [0 1; -1 1; -1 0; -1 -1];GLCM_multi graycomatrix(I, Offset, offsets_multi, NumLevels, 8, Symmetric, true);stats_multi graycoprops(GLCM_multi, {Contrast, Correlation, Energy, Homogeneity});% 显示多方向结果fprintf(\n多方向纹理特征四个方向取平均:\n);fprintf(对比度平均: %.4f\n, mean(stats_multi.Contrast));fprintf(相关性平均: %.4f\n, mean(stats_multi.Correlation));fprintf(能量平均 : %.4f\n, mean(stats_multi.Energy));fprintf(同质性平均: %.4f\n, mean(stats_multi.Homogeneity));撰写博客不宜如果你觉得本文对你的学习和研究有所帮助请点赞、关注欢迎转发谢谢大家