Matlab上的bwlabeln和Python上的skiliage.measure.label之间的性能差异?

2024-04-28 15:17:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在将一个执行图像分析的Matlab程序转换成Python。该程序的一个特定部分利用bwlabeln以顺序递增的标签标记3D矩阵中的各种组件。我在skimage.measure包中找到了一个非常类似的函数,名为label,它基本上做着完全相同的事情。然而,我发现当在两个程序之间使用相同大小和数据类型的输入矩阵时,Matlab上的bwlabeln运行速度明显快于Python中的label(几乎快4倍)

我想知道这是什么原因,是否有任何方法可以加速Python代码或提高性能

在这两个函数中,我都使用了26个连通的邻域,这两个邻域在默认情况下似乎都是这样的,但为了确保这一点,我进一步将其指定为参数


Tags: 函数标记图像程序利用顺序组件矩阵
1条回答
网友
1楼 · 发布于 2024-04-28 15:17:46

scikit图像算法能够标记整数数组,即大于0和1的值。因此,它与仅限于0和1(假和真)的Matlab算法不同。您可以使用来自scipy.ndimagelabel算法,它在下面定义的二值图像上确实快了4倍,因此您应该能够使用此函数匹配Matlab的速度

In [1]: from scipy import ndimage                                               

In [2]: from skimage import measure                                             

In [3]: from skimage import data                                                                                             

In [5]: img = data.binary_blobs(length=256, blob_size_fraction=0.25, n_dim=3)   

In [6]: %timeit labels = ndimage.label(img)                                     
161 ms ± 2.08 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

In [7]: %timeit labels = measure.label(img)                                     
629 ms ± 6.07 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

相关问题 更多 >