Выполнение скользящих операций с 4 окрестностями в MATLAB

Есть ли способ выполнять пользовательские операции с изображением с заданным соседством?

Например, я определил две функции fmax = @(x)max(x(:)) и fmin = @(x)min(x(:)) для вычисления градиента изображения в оттенках серого I следующим образом:

G = nlfilter(I,[3 3],fmax) - nlfilter(I,[3 3],fmin);

Однако я хотел бы сделать то же самое с 4-окрестностью вместо 8-окрестности, определенной в скользящем блоке 3 на 3, аналогично элементам структурирования, которые используются в морфологической математике.

Идея этого теста заключается в применении пользовательской функции к пикселю и заданной окрестности с радиусом r.

Обратите внимание, что меня интересует применение пользовательских функций. Градиент — это просто пример.


person pQB    schedule 16.07.2013    source источник
comment
Посмотрите на блокпрок   -  person Ashish Uthama    schedule 16.07.2013


Ответы (1)


Анонимная функция является "определяемой пользователем" или "настраиваемой" функцией, которая вам нужна.

Вам просто нужно использовать анонимную функцию в соответствии с вашими потребностями. Например, чтобы учитывать только 4 ближайших соседа (сверху вниз слева направо) пикселя для окна 3x3, вы можете написать:

f = @(x) max(x(2:2:8)) - min(x(2:2:8)) 
G = nlfilter(I,[3 3],f);

как градиент.

Другой пример, чтобы сделать то же самое для общей круговой окрестности радиуса r:

r = 5;
H = fspecial('disk',r);
f = @(x) max(x(H>0))-min(x(H>0)); 
G = nlfilter(I,size(H),f); 
person bla    schedule 16.07.2013
comment
спасибо за ваш код натан! Я пытаюсь оптимизировать функцию, для вычисления которой требуется много времени, и она основана на круговых окрестностях. Точнее, у меня есть разные круговые окрестности, и внутри каждого из них я хочу вычислить среднее значение, стандартное значение и медиану значений пикселей, лежащих в их основе. Это делается в контексте представления шкалы DoG. Размер круглого фильтра определяется радиусом, связанным с определенным масштабом (scalespace_radii): pastebin.com/WkS5ShMf Приветствуются любые предложения по улучшению вычислений! - person Tin; 12.02.2014
comment
Почему бы вам не задать вопрос, чтобы все сообщество могло помочь с этим? - person bla; 12.02.2014
comment
Привет, Натан, я пытаюсь найти решение, которое основано на вашем текущем предложении для круговых кварталов. В основном я пытаюсь эффективно вычислять гистограммы внутри круглых областей. Не возражаете ли вы взглянуть на =› stackoverflow.com/questions/21750989/ - person Tin; 13.02.2014