基于MATLAB的GLCM和GLDS纹理特征提取
一、GLCM(灰度共生矩阵)
1. 原理与核心参数
GLCM通过统计图像中像素对的灰度值在特定方向(θ)和距离(d)下的共现频率,构建二维矩阵。主要特征包括:
- 对比度(Contrast):衡量灰度差异程度
- 同质性(Homogeneity):反映局部灰度均匀性
- 能量(Energy):纹理均匀性的度量
- 熵(Entropy):纹理复杂度指标
2. MATLAB实现代码
% 读取图像并灰度化
img = imread('texture.jpg');
grayImg = rgb2gray(img);
% 计算GLCM矩阵(距离d=1,角度θ=0°)
glcm = graycomatrix(grayImg, 'Offset', [0 1], 'NumLevels', 256);
% 提取纹理特征
stats = graycoprops(glcm, {'Contrast', 'Homogeneity', 'Energy', 'Entropy'});
disp(['对比度: ', num2str(stats.Contrast)]);
disp(['同质性: ', num2str(stats.Homogeneity)]);
3. 参数优化建议
- 距离(d):通常取1-3像素,过大可能丢失局部特征
- 角度(θ):0°,45°,90°,135°四个方向需分别计算
- 灰度级(NumLevels):建议256级(8位图像)
二、GLDS(灰度差分统计)
1. 原理与特征
GLDS通过计算相邻像素的灰度差分分布,捕捉纹理的局部变化特性:
- 一阶统计量:均值、方差、偏度、峰度
- 二阶统计量:能量、对比度、同质性
2. MATLAB实现代码
% 计算灰度差分矩阵
[rows, cols] = size(grayImg);
diffMatrix = zeros(rows, cols);
for i = 1:rows-1
for j = 1:cols-1
diffMatrix(i,j) = abs(grayImg(i,j) - grayImg(i+1,j+1));
end
end
% 统计特征
meanVal = mean(diffMatrix(:));
varVal = var(diffMatrix(:));
skewnessVal = skewness(diffMatrix(:));
3. 增强方法
- 多尺度分析:结合高斯金字塔进行多分辨率处理
- 方向扩展:增加对角线方向的差分计算
三、方法对比与应用场景
| 特性 | GLCM | GLDS |
|---|---|---|
| 核心思想 | 基于空间相关性统计 | 基于灰度差异分布统计 |
| 优势 | 全局纹理特征提取 | 局部纹理细节捕捉 |
| 适用场景 | 布料、医学影像等规则纹理 | 岩石、指纹等复杂不规则纹理 |
| 计算复杂度 | 较高(需多方向计算) | 较低(单次差分计算) |
四、工程优化
1. 预处理增强
% 噪声抑制
denoisedImg = imgaussfilt(grayImg, 1);
% 直方图均衡化
enhancedImg = histeq(grayImg);
2. 特征融合
% GLCM+GLDS特征融合
combinedFeatures = [stats.Contrast, meanVal, varVal];
3. GPU加速
% 使用gpuArray加速计算
if canUseGPU
glcm_gpu = gpuArray(graycomatrix(gpuArray(grayImg)));
stats_gpu = graycoprops(glcm_gpu, {'Contrast'});
end
五、典型应用案例
1. 医学影像分析(肺结节检测)
- GLCM参数:d=1, θ=0°, NumLevels=64
- 关键特征:对比度>0.8可识别钙化结节
- 准确率:结合SVM分类器可达92%
2. 工业质检(织物缺陷检测)
- GLDS参数:差分阈值设为15
- 缺陷识别:方差>50的区域标记为异常
- 处理速度:优化后达15fps
六、代码优化建议
- 向量化计算:避免双重循环提升效率
- 并行计算:使用parfor处理多方向GLCM
- 内存管理:大图像分块处理(如2048x2048分4块)
七、参考
-
代码 matlab常用纹理特征提取方法(GLCM,GLDS) www.youwenfan.com/contentcnv/65376.html
-
CSDN文库《MATLAB纹理特征提取方法教程》 wenku.csdn.net/doc/4y86fxg6jd
浙公网安备 33010602011771号