Matlab:找到元素到矩阵边界的距离

Ste*_*ven 5 matlab matrix submatrix

在Matlab中说我有一个像这样的矩阵:

1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
Run Code Online (Sandbox Code Playgroud)

我现在需要在每个元素周围找到子矩阵3x3(因此每个元素依次是3x3子矩阵的中心).在中间,找到fx是没有问题的

1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9

这是子矩阵:

2 3 4
2 3 4
2 3 4
Run Code Online (Sandbox Code Playgroud)

但是当在矩阵的边界,即第一行或最后一行或列中的元素时,它当然不可能找到3x3子矩阵.相反,我需要适合的子矩阵.在角落里,我会得到

1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9

子矩阵在哪里:

1 2
1 2
Run Code Online (Sandbox Code Playgroud)

在边境中间,我得到了fx:

1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9

这使:

4 5 6
4 5 6
Run Code Online (Sandbox Code Playgroud)

或者作为另一个例子:

1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9

这使:

6 7 8
6 7 8
Run Code Online (Sandbox Code Playgroud)

我希望你理解我的观点.我错过了一些功能,让我找到从元素到边框的距离.

我可以将每个元素视为子矩阵的中心,如果我可以测试,如果从元素到边界的距离低于子矩阵的边界(子矩阵维度将改变,到fx为5x5子矩阵),那么我可以截断子矩阵的一部分.

如何以最有效的方式找到从元素到矩阵边界的距离?

Bgs*_*Bgs 2

让我们进一步具体说明一下问题:您有一个大小为 nxm 的矩阵,并且选择一个元素 i,j。你想知道元素 i,j 距边界的距离吗?那将是: min(i,j,ni,mj)