基于MATLAB的GLCM(灰度共生矩阵)和GLDS(灰度差分统计)纹理特征提取
GLCM通过统计图像中像素对的灰度值在特定方向(θ)和距离(d)下的共现频率,构建二维矩阵。主要特征包括:
代码块
% 读取图像并灰度化
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)]);
复制成功
GLDS通过计算相邻像素的灰度差分分布,捕捉纹理的局部变化特性:
代码块
% 计算灰度差分矩阵
[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(:));
复制成功
特性GLCMGLDS核心思想基于空间相关性统计基于灰度差异分布统计优势全局纹理特征提取局部纹理细节捕捉适用场景布料、医学影像等规则纹理岩石、指纹等复杂不规则纹理计算复杂度较高(需多方向计算)较低(单次差分计算)
代码块
% 噪声抑制
denoisedImg = imgaussfilt(grayImg, 1);
% 直方图均衡化
enhancedImg = histeq(grayImg);
复制成功
代码块
% GLCM+GLDS特征融合
combinedFeatures = [stats.Contrast, meanVal, varVal];
复制成功
代码块
% 使用gpuArray加速计算
if canUseGPU
glcm_gpu = gpuArray(graycomatrix(gpuArray(grayImg)));
stats_gpu = graycoprops(glcm_gpu, {'Contrast'});
end
复制成功
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删