矩阵中元素周围的元素数,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 中实现它的效率如何。嗯....

这里有一个一维提示:给定 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

您可以围绕以下逻辑构建一个函数(在此处显示伪代码):

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)返回从 1 开始索引的MxN矩阵中(i,j)元素的深度m

最新更新