Матрица сопряженности уровней серого
Я пытаюсь реализовать метод GLCM по формуле из Википедии, но у меня есть проблемы с заполнением моего GLCM из-за проблем с индексами в matlab.
Я также использовал NitdepthQuantisation, чтобы уменьшить количество уровней серого, но сейчас я использую полные 8 бит.
function [C] = GLCM(img, level, theta, delta)
% Quantisation of the input Image to desired value
imgQ = ImageQuantisation(img, level);
[m n] = size(imgQ);
% Get the number of gray levels
maxGV = max(img(:));
% Create GLCM initial Matrix
C = zeros(maxGV, maxGV);
% Positions
delta_x = ceil(delta*cos(theta));
delta_y = ceil(delta*sin(theta));
%% Find Occurences
for i = delta_x+1:m-delta_x
for j = delta_y+1:n-delta_y
if(imgQ(i, j) == imgQ(i+delta_x, j+delta_y))
C(, ) = C(, ) + 1;
end
end
end
end
1 ответ
Ответ можно найти, обеспечив внутренний вложенный двойной for
петли имеют правильные индексы для доступа к изображению. Они использовали самую внешнюю пару for
петли для индексов, а не для внутренних. ФП прокомментировал, что это имеет небольшие различия между тем, что дает MATLAB для расчета GLCM, но этого достаточно, чтобы ФП упустил из виду:
for o = 1:maxGV
for p = 1:maxGV
if(imgQ(i, j) == o & imgQ(i+delta_x, j+delta_y) == p)
C(o, p) = C(o, p) + 1;
end
end
end