Matlab-为每个零矩阵元素查找最接近的非零元素的索引

Mat*_*reu 2 matlab matrix nearest-neighbor

在Matlab中,我有一个矩阵,其中某些元素设置为零。例如:

0 1 0 0 0
2 5 0 3 0
0 0 0 0 0
0 5 0 2 1
Run Code Online (Sandbox Code Playgroud)

对于每个为零的矩阵元素,我想找到不为零的最近元素的索引。如果可能有多个索引,则应全部返回。这可能是一个聪明的解决方案,如何避免很多for-loop问题?

Amr*_*mro 5

IPT中有一个有效的bwdist函数可以计算距离变换

M = [
    0 1 0 0 0
    2 5 0 3 0
    0 0 0 0 0
    0 5 0 2 1
];
[D,IDX] = bwdist(M~=0)
Run Code Online (Sandbox Code Playgroud)

结果:

D =
    1.0000         0    1.0000    1.0000    1.4142
         0         0    1.0000         0    1.0000
    1.0000    1.0000    1.4142    1.0000    1.0000
    1.0000         0    1.0000         0         0

IDX =
           2           5           5          14          14
           2           6           6          14          14
           2           6           6          14          20
           8           8           8          16          20
Run Code Online (Sandbox Code Playgroud)

返回的值IDX包含在中最接近非零值的线性索引M。每个元素只返回一个索引。