Вот решение, которое может работать, если у вас есть изображение Processing Toolbox.
При выполнении морфологических операций имеется структурирующий элемент в форме алмаза, который вы можете использовать (отметьте here). Теперь, если мы будем играть с ним, мы можем извлечь элементы из такой матрицы. Обратите внимание, что поскольку у вас есть строки в AI использовать массив ячеек:
clear
clc
A = {'a' 'b' 'c';'d' 'e' 'f'; 'g' 'h' 'i'}
SE = strel('diamond', 1)
Matlab говорит нам, что SE
имеет следующие атрибуты (на самом деле это не может быть атрибутом ... Я не знаю, правильной терминологии извините: Р):
SE =
Flat STREL object containing 5 neighbors.
Neighborhood:
0 1 0
1 1 1
0 1 0
Таким образом, мы можем использовать getnhood
метод STREL, как логические индексы для извлечения усваивает значения в а:
NewMatrix = transpose(A(SE.getnhood()))
NewMatrix =
'd' 'b' 'e' 'h' 'f'
Здесь транспонирование используется для получения значений в порядке сверху вниз, слева направо.
Таким образом, весь код на самом деле выглядит следующим образом:
A = {'a' 'b' 'c';'d' 'e' 'f'; 'g' 'h' 'i'}
DSize = 1; %// Assign size to diamond.
SE = strel('diamond', DSize)
NewMatrix = transpose(A(SE.getnhood()))
Если вам нужно переместить алмаз в массив, чтобы его центр где-то еще, вы можете перевести структурный элемент перед использованием последней строки. Соответствующая функция называется translate
Надеюсь, что это поможет!
кратчайшего или наиболее эффективным? Вас интересуют только 3-на-3 матрицы или произвольные квадратные матрицы или даже прямоугольные матрицы? И я предполагаю, что вы хотите скопировать эти элементы в массив нулей? Измените свой вопрос, чтобы прояснить эти проблемы. – horchler
Да, наиболее эффективный код и матрица могут быть прямоугольными, а расположение алмазов может быть в любом месте большого массива. Я просто хочу получить эту идею, используя пример выше ... – HIMANK
Привет @HIMANK, так ли какой-либо ответ ниже помог вам решить вашу проблему? Если это так, отметьте его как принято. Благодаря! –