Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: pQBОтветов: 1

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

Например, я определил две функции 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.

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

  • Посмотрите на блокпрок Ashish Uthama 16.07.2013

matlabimage-processingnearest-neighbor

Ответы

Ответ 1 · рейтинг 3 · bla

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

Вам просто нужно использовать анонимную функцию в соответствии с вашими потребностями. Например, чтобы учитывать только 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);

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы