Проверьте, находится ли nxm блок 1s внутри двоичной матрицы (Matlab) - PullRequest
0 голосов
/ 05 октября 2018

У меня есть двоичная матрица 90x89 (я не могу прикрепить файлы .mat, поэтому не могу предоставить матрицу).Короче говоря, 1 - это хорошо, а 0 - плохо.Я хочу быстрый способ проверить и вернуть любые блоки nxm всех 1 в большой матрице.Например, я хочу выяснить, есть ли 3x6 (n = 3, m = 6) блоков всех 1 в двоичной матрице.Если есть, верните строку и столбец для каждой ячейки в каждом блоке.

1 Ответ

0 голосов
/ 05 октября 2018

Чтобы найти ваш результат, полезно представить матрицу как изображение.

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

Теперь, если матричный элемент находится в середине блока 3x6 со всеми 1, то минимум равен 1. Если есть дажеукажите 0, минимум будет 0. Таким образом, выходное изображение будет иметь 1 с в среднем элементе каждого блока 3x6 по 1 с.

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

Если вы хотите найти координаты всех матричных элементов в этих блоках, вы можете преобразовать результат эрозии, используя расширение.Это обратная операция, при которой все элементы, принадлежащие этим блокам 3х6, будут установлены в 1.

Например:

% Create some test matrix (66% are 1s, so we have some chance of finding a 3x6 block):
a = randi([0,2], 100,100) > 0;

% Look for 3x6 blocks:
b = imerode(a, ones(3,6));
any(b(:))              % returns true, hopefully
nnz(b)                 % returned 2 for me, there's 2 of these blocks

% Find all pixels belong the these two blocks:
c = imdilate(b, ones(3,6));
nnz(c)                 % returned 2*18 for me, as expected
[row,col] = find(c);   % Now [row(i),col(i)] are the indices to one of these pixels
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...