matlab 灰度共生矩阵代码
时间: 2023-05-13 14:03:48 浏览: 392
灰度共生矩阵matlab代码
MATLAB中计算灰度共生矩阵的代码如下:
```
function GLCM = graycomatrix(I, offsets, graylevels, symmetric)
% I:输入图像
% offsets:灰度差偏移量(dx,dy),如[0,1]表示y方向偏移1个像素
% graylevels:灰度级数,默认为8
% symmetric:是否对称(True表示对称,False表示非对称)
% 初始化灰度共生矩阵
GLCM = zeros(graylevels);
% 计算每个像素的灰度共生矩阵
for i = 1:length(offsets)
dx = offsets(i, 1);
dy = offsets(i, 2);
offsetImg = shiftImage(I, dx, dy); % 平移图像
GLCMi = graycomatrixSingle(offsetImg, graylevels); % 计算灰度共生矩阵
if symmetric
GLCMi = GLCMi + GLCMi'; % 对称化
end
GLCM = GLCM + GLCMi; % 累加
end
% 归一化灰度共生矩阵
GLCM = GLCM / sum(GLCM(:));
% 辅助函数:平移图像
function offsetImg = shiftImage(I, dx, dy)
[m, n] = size(I);
offsetImg = zeros(m, n);
if dx >= 0
idx = dx+1:m;
offidx = 1:m-dx;
else
idx = 1:m+dx;
offidx = -dx+1:m;
end
if dy >= 0
idy = dy+1:n;
offidy = 1:n-dy;
else
idy = 1:n+dy;
offidy = -dy+1:n;
end
offsetImg(offidx, offidy) = I(idx, idy);
% 辅助函数:计算单个灰度共生矩阵
function GLCM = graycomatrixSingle(I, graylevels)
nbins = floor(double(max(I(:))+1)/graylevels);
I = floor(double(I)/nbins);
GLCM = zeros(graylevels);
for r = 1:size(I,1)
for c = 1:size(I,2)-1
p = I(r,c)+1;
q = I(r,c+1)+1;
GLCM(p,q) = GLCM(p,q)+1;
end
end
```
其中,`graycomatrix`函数是主函数,将每个偏移量的灰度共生矩阵累加起来得到最终的结果;`graycomatrixSingle`函数是辅助函数,计算单个灰度共生矩阵;`shiftImage`函数是辅助函数,对图像进行平移。具体实现中,灰度共生矩阵的计算采用了对称性,即对于每个偏移量,分别计算正向和反向的灰度共生矩阵,并将它们加起来得到最终的结果。同时,为了排除图像的亮度变化对灰度共生矩阵的影响,还进行了灰度值的归一化处理。
阅读全文