【发布时间】:2011-07-12 17:26:31
【问题描述】:
有谁知道 Matlab / Octave bwdist() 函数的 Python 替代品?此函数返回每个单元到给定矩阵的最近非零单元的欧几里得距离。我看到了一个 Octave C 实现,一个纯 Matlab 实现,我想知道是否有人必须在 ANSI C(不包含任何 Matlab / Octave 头文件,因此我可以轻松地从 Python 集成)或纯 Python 中实现它。
我提到的两个链接如下:
作为测试,Matlab 代码/输出如下所示:
bw= [0 1 0 0 0;
1 0 0 0 0;
0 0 0 0 1;
0 0 0 0 0;
0 0 1 0 0]
D = bwdist(bw)
D =
1.00000 0.00000 1.00000 2.00000 2.00000
0.00000 1.00000 1.41421 1.41421 1.00000
1.00000 1.41421 2.00000 1.00000 0.00000
2.00000 1.41421 1.00000 1.41421 1.00000
2.00000 1.00000 0.00000 1.00000 2.00000
我在 Python 中测试了一个推荐的 distance_transform_edt 调用,结果如下:
将 numpy 导入为 np 从 scipy 导入 ndimage
a = np.array(([0,1,0,0,0],
[1,0,0,0,0],
[0,0,0,0,1],
[0,0,0,0,0],
[0,0,1,0,0]))
res = ndimage.distance_transform_edt(a)
print res
[[ 0. 1. 0. 0. 0.]
[ 1. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 1.]
[ 0. 0. 0. 0. 0.]
[ 0. 0. 1. 0. 0.]]
此结果似乎与 Octave / Matlab 输出不匹配。
【问题讨论】:
标签: python matlab image-processing numpy scipy