Чтобы найти ваш результат, полезно представить матрицу как изображение.
Эрозия - это операция обработки изображения, которая возвращает минимальное значение в пределах локальной окрестности: для каждого пикселя (элемента матрицы), который выпосмотрите на все значения в окрестности (в вашем случае это был бы прямоугольник 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