我需要编写一个函数来查找矩阵中单元格(row,col)的“深度”。
给定任何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中如何有效地实现它。 Hmmmm ....
答案 0 :(得分:1)
这是一个提示: 将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
答案 1 :(得分:0)
您可以围绕以下逻辑构建一个函数(在此处显示伪代码):
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}}矩阵(i,j)
索引的MxN
元素的深度。