количество элементов, окружающих элемент в матрице, Matlab

Мне нужно написать функцию, которая находит «глубину» ячейки (строки, столбца) в матрице.

Для любой матрицы nxm скажем, например, mat = ones(6,6) ..

mat =

     1     1     1     1     1     1
     1     1     1     1     1     1
     1     1     1     1     1     1
     1     1     1     1     1     1
     1     1     1     1     1     1
     1     1     1     1     1     1

Результат будет:

thick =

     1     1     1     1     1     1
     1     2     2     2     2     1
     1     2     3     3     2     1
     1     2     3     3     2     1
     1     2     2     2     2     1
     1     1     1     1     1     1

Где «1» — наименьшая возможная толщина, определяющая краевую ячейку. Каждая дополнительная окружающая ячейка добавляет +1 к толщине. NAN нужно будет обрабатывать как «край», если они находятся на границе ... но я думаю, что я могу добавить это позже.

Идеи? Любая помощь приветствуется. Спасибо!

РЕДАКТИРОВАТЬ:

Удалено мое исходное редактирование, нужно переосмыслить мою первоначальную проблему. В основном я хочу найти самую глубокую ячейку в матрице. Матрица не обязательно должна быть регулярной и может иметь отверстия. Обычно это достигается с помощью многоугольника и нахождения диаметра наибольшего круга, который помещается внутри этого многоугольника, но я не уверен, насколько эффективно я мог бы реализовать это в MATLAB. Хммм....


person Community    schedule 26.11.2012    source источник
comment
Ха, матрица яблочка от Коди :)   -  person Rody Oldenhuis    schedule 26.11.2012


Ответы (2)


вот подсказка 1-d: задано m как ваша матрица:

m=ones(1,6)
i=1:length(m);
depth(i<=length(m)/2)=i(i<=length(m)/2);
depth(i>length(m)/2)=length(m)-i(i>length(m)/2)+1

m =

 1     1     1     1     1     1

глубина =

 1     2     3     3     2     1
person bla    schedule 26.11.2012

Вы можете построить функцию на основе следующей логики (здесь представлен псевдокод):

depth(m):
   M = size(m,1);
   N = size(m,2);
   thick = zeros(M,N);
   for i=1:M
        for j = 1:N
            thick(i,j) = min(i,M-i+1,j,N-j+1);
   return thick;

Где depth(m) возвращает глубину элемента (i,j) в матрице MxN m с индексом 1.

person adi    schedule 26.11.2012