Определение свойств соседних элементов в матрице - PullRequest
0 голосов
/ 24 апреля 2018

Имея матрицу, которая выглядит следующим образом:

9 9 1 9 9 9 9 1
9 9 1 9 9 9 9 9
9 9 9 9 9 9 9 9
9 9 1 9 9 9 9 9
9 9 9 9 9 1 1 1
9 9 9 9 9 1 9 9
9 9 9 1 9 9 9 9
9 9 1 9 1 9 9 9

Я хотел бы определить для каждой позиции в матрице, есть ли хотя бы значение 1, окружающее данную матрицу таким образом, что для элементав {2, 2} я хочу проверить значения в {1,1}, {1,2}, {1,3}, {2,1}, {2,3}, {3,1}, {3,2}, {3,3}, и если любая из упомянутых позиций содержит 1, то я сохраняю элемент в {2,2} в отдельной переменной.

Я не знаю, как этого добитьсяи хотел бы знать, есть ли какая-нибудь питоническая функция или способ, который может это сделать?

Ответы [ 2 ]

0 голосов
/ 24 апреля 2018

Возможным решением является расширение маска, которая указывает, где находятся одни значения, с квадратом 3x3 структурирующий элемент , следующим образом:

onesMask = mat==1;
res = imdilate(mask,strel('square',3)) & ~onesMask;

результат:

 0     1     0     1     0     0     1     0
 0     1     0     1     0     0     1     1
 0     1     1     1     0     0     0     0
 0     1     0     1     1     1     1     1
 0     1     1     1     1     0     0     0
 0     0     1     1     1     0     1     1
 0     1     1     0     1     1     1     0
 0     1     0     1     0     1     0     0
0 голосов
/ 24 апреля 2018

Вы можете черпать вдохновение из этого вопроса и использовать conv2

В MATLAB (вы сказали "pythonic", но с меткой MATLAB) это выглядит следующим образом:

numneighbours = conv2( A==1, [1 1 1; 1 0 1; 1 1 1], 'same' );

Теперь вам нужны любые элементы, в которых numneighbours > 0

output = A(numneighbours > 0);

Это, конечно, можно сделать в 1 строку.


Этот ответ предлагаетconvolve2d является эквивалентом Python для MATLAB conv2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...