Использование скользящего окна с GLCM

Я пытаюсь рассчитать различные функции изображения из матрицы совпадения уровней серого (GLCM) в MatLab, используя функцию graycomatrix.

Пример с использованием матрицы Грея

I = [0 0 1 1; 0 0 1 1; 0 2 2 2; 2 2 3 3];
glcm = graycomatrix(I, 'GrayLimits', [0 3], 'NumLevels', 4, 'Symmetric', true);

Как я могу применить эту функцию к серии дополнительных окон, предполагая, что изображение больше (например, 640x480), чем тривиальный пример, и размер скользящего окна 5x5?


person user3851917    schedule 18.07.2014    source источник
comment
Пожалуйста, предоставьте больше информации, чем: пожалуйста, помогите, я не знаю, как это сделать. Вы читали описание и файлы справки по ссылке mathworks.com/matlabcentral/fileexchange/?   -  person EJG89    schedule 18.07.2014
comment
да, я прочитал эту статью, я хочу применить эту функцию к каждому движущемуся окну изображения для всех пикселей.   -  person user3851917    schedule 18.07.2014
comment
У меня есть изображение 319x453, из которого я хочу извлечь функции GLCM, мое подокно [5 5], это движущееся окно, которое перемещает пиксель за пикселем и вычисляет эти функции для каждого окна, которое составляет 2 окрестности каждого пикселя, и эти функции будет собираться для каждого пикселя   -  person user3851917    schedule 18.07.2014
comment
@ EJG89 Я улучшил вопрос, чтобы удовлетворить желание некоторых людей закрыть его. Не могли бы вы проголосовать за возобновление работы? Я хотел бы ответить на этот вопрос, не начиная новый.   -  person Cameron Lowell Palmer    schedule 13.09.2015


Ответы (2)


Я не уверен, что подход к фильтрации возможен. Я думаю, вы имеете в виду что-то вроде этого (пусть это будет ваше изображение в градациях серого):

for ii=3:size(im,1)-2
    for jj=3:size(im,2)-2  % a loop for every pixel that a 5x5 window can be defined
        temp_im=im(ii-2:ii+2,jj-2:jj+2);  % crop a small window around pixel
        glcm=graycomatrix(temp_im);  % default parameters
        glcm_feat_struct=graycoprops(glcm);
        % extract features from struct and do anything you want
    end
end
person fyts    schedule 18.07.2014
comment
Могу ли я использовать функцию nlfilter? - person user3851917; 19.07.2014
comment
В вашем случае nlfilter использовать нельзя, потому что внутренняя функция должна возвращать скаляр. Взгляните на blockproc. Не использовав его, я не могу привести пример, но это кажется наиболее подходящим выбором. - person fyts; 19.07.2014
comment
Как я могу сохранить вектор признаков для каждого пикселя с помощью этого цикла? - person user3851917; 02.08.2014
comment
Допустим, ваше изображение имеет размер M на N пикселей, и вы хотите извлечь 4 функции, предоставляемые GraycoProps (контрастность и т. д.). Затем вы можете сохранить функции для каждого пикселя в матрице, скажем: 'feat=zeros(M,N,4); % создайте его перед двойным циклом», а затем замените комментарий внутри функций извлечения цикла... на: «feat(ii,jj,1)=glcm_feat_struct.Contrast;’ 'feat(ii,jj,2)=glcm_feat_struct.Correlation;' и так далее. - person fyts; 13.08.2014

Использование нлфильтра

Я нашел эту конкретную формулу и экспериментировал с ней. У него есть некоторые ограничения, но это не плохая отправная точка.

function [ s ] = glcm_contrast(NHOOD)
%GLCM_CONTRAST
    glcm = graycomatrix(NHOOD, 'Offset', [0 1], 'GrayLimits', [0 3], 'NumLevels', 4, 'Symmetric', true);
    stats = graycoprops(glcm, 'contrast');
    s = stats.Contrast;
end

window_size = 5;
I = imread('yourImage.tif');
glcmfunc = @(x) glcm_contrast(x);
gray_limits = [min(I(:)), max(I(:))];
B = nlfilter(I, [window_size, window_size], glcmfunc);

Пользовательский код Matlab

Вы также можете взглянуть на мою реализацию Sliding GLCM и посмотреть, не захотите ли вы расширить тот.

person Cameron Lowell Palmer    schedule 13.09.2015