2016-08-30 14 views
-2

Я пытаюсь реализовать метод 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 
+0

Что «индексы» проблемы вы говорите? – rayryeng

+0

было решено, я обновил код – Xeno1987

+0

Тогда, пожалуйста, создайте ответ. Люди будут смущены, потому что, если они не войдут в вашу историю изменений, они не будут знать, что вы решили свою проблему. Либо это, либо удалите свой вопрос, если вы не найдете его полезным. – rayryeng

ответ

0

Ответ можно найти, обеспечивая внутреннюю вложенная двойная 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