news 2026/5/4 1:58:25

MATLAB 纹理特征提取:一文读懂 graycomatrix 与 graycoprops

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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 个最常用的纹理特征,含义通俗易懂:

  1. 对比度(Contrast):衡量图像局部灰度差异,值越大,纹理越清晰、反差越大
  2. 相关性(Correlation):衡量像素间的线性相关程度,值越大,纹理越规律
  3. 能量(Energy):又称角二阶矩,衡量图像纹理均匀性,值越大,纹理越单一、均匀
  4. 同质性(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) == 3
I = 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度方向,距离1
GLCM = 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));

撰写博客不宜,如果你觉得本文对你的学习和研究有所帮助,请点赞、关注,欢迎转发!谢谢大家!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/4 1:52:26

如何快速使用RePKG:Wallpaper Engine资源解包的完整指南

如何快速使用RePKG:Wallpaper Engine资源解包的完整指南 【免费下载链接】repkg Wallpaper engine PKG extractor/TEX to image converter 项目地址: https://gitcode.com/gh_mirrors/re/repkg 你是否曾经遇到过这样的情况:在Wallpaper Engine中发…

作者头像 李华
网站建设 2026/5/4 1:38:26

PaddleOCR-VL-1.5:端到端文档解析与文本识别技术解析

1. 项目背景与技术定位PaddleOCR-VL-1.5是百度飞桨团队推出的新一代文档解析与文本识别解决方案。作为工业级OCR技术的集大成者,这个版本在传统文字识别能力基础上,重点强化了复杂版式文档的结构化解析能力。我在处理金融票据和医疗档案数字化项目时&…

作者头像 李华
网站建设 2026/5/4 1:29:29

基于大语言模型的电商智能客服SaaS平台架构与实战部署指南

1. 项目概述:一个面向电商的AI智能客服SaaS平台如果你正在经营一家电商店铺,或者管理着多个平台的客服团队,每天面对海量的客户咨询,从“这个有货吗”到“快递怎么还没到”,再到各种复杂的售后问题,你可能会…

作者头像 李华
网站建设 2026/5/4 1:29:28

CallGPT:构建本地AI代理服务器,无缝集成大模型能力

1. 项目概述:一个让本地应用“开口说话”的桥梁 最近在折腾一些桌面自动化脚本和工具时,我遇到了一个挺有意思的需求:能不能让我用C#、Python或者Java写的本地程序,也能像Web应用一样,轻松地调用ChatGPT这类大语言模型…

作者头像 李华