threshold_multiotsu 从不加载
threshold_multiotsu never loads
现在我正在尝试使用 skimage.filters.threshold_multiotsu
方法将 n 个点过滤成 k 个组。为了找到拆分组的阈值,我正在做
arr=np.asarray([93,86,164,234,310,384,461,538,610,167,245,311,394,470,544,620])
thresholds = threshold_multiotsu(arr,classes=8,nbins=32)
即使在等待一分钟后,这也永远不会加载。有人有解决此问题的想法吗?
虽然 threshold_multiotsu
可以指定任意数量的 类,但如果您查看 documentation 中的注释部分,它会指定复杂度随着类 的数量。这是我对 2、3 和 4 类:
的计时结果
In [6]: %timeit threshold_multiotsu(arr, classes=2, nbins=32)
174 µs ± 1.35 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
In [7]: %timeit threshold_multiotsu(arr, classes=3, nbins=32)
5 ms ± 98.1 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
In [8]: %timeit threshold_multiotsu(arr, classes=4, nbins=32)
873 ms ± 10.9 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
留给 reader 的练习是对这三个点进行指数拟合并计算出 classes=8
的值,但如果我们每次近似增加 100 倍,我获得超过 1100 天的运行时间。 (classes=5
对我来说仍然是 运行。)
换句话说,如果 k>4,threshold_multiotsu
是不适合你的工具。我可能会建议一种算法,例如 kmeans 用于您要尝试做的事情!
在 three-dimensional 阵列图像上,使用 skimage.filters.threshold_multiotsu
和 7 类.
获得 otsu 阈值分割的时间可能很长
大幅减少时间的一个可能解决方案是根据 bin 的数量采取行动。默认情况下,该算法强加 256 个 bin(即一般灰度图像的默认值)。您可以降低到更粗略的数字(例如 128)。
比如我运行threshold_multiotsu
有7类和128个bin在 3D 阵列图像上,即 MNI152 T1-w template,分辨率为 1mm,尺寸为 182x182x218(磁共振成像分析的标准模板)。在我的台式机上,经过的时间约为 3 分钟。
原始 MNI T1-w 模板
使用 OTSU 方法的 7 类分割结果
现在我正在尝试使用 skimage.filters.threshold_multiotsu
方法将 n 个点过滤成 k 个组。为了找到拆分组的阈值,我正在做
arr=np.asarray([93,86,164,234,310,384,461,538,610,167,245,311,394,470,544,620])
thresholds = threshold_multiotsu(arr,classes=8,nbins=32)
即使在等待一分钟后,这也永远不会加载。有人有解决此问题的想法吗?
虽然 threshold_multiotsu
可以指定任意数量的 类,但如果您查看 documentation 中的注释部分,它会指定复杂度随着类 的数量。这是我对 2、3 和 4 类:
In [6]: %timeit threshold_multiotsu(arr, classes=2, nbins=32)
174 µs ± 1.35 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
In [7]: %timeit threshold_multiotsu(arr, classes=3, nbins=32)
5 ms ± 98.1 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
In [8]: %timeit threshold_multiotsu(arr, classes=4, nbins=32)
873 ms ± 10.9 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
留给 reader 的练习是对这三个点进行指数拟合并计算出 classes=8
的值,但如果我们每次近似增加 100 倍,我获得超过 1100 天的运行时间。 (classes=5
对我来说仍然是 运行。)
换句话说,如果 k>4,threshold_multiotsu
是不适合你的工具。我可能会建议一种算法,例如 kmeans 用于您要尝试做的事情!
在 three-dimensional 阵列图像上,使用 skimage.filters.threshold_multiotsu
和 7 类.
大幅减少时间的一个可能解决方案是根据 bin 的数量采取行动。默认情况下,该算法强加 256 个 bin(即一般灰度图像的默认值)。您可以降低到更粗略的数字(例如 128)。
比如我运行threshold_multiotsu
有7类和128个bin在 3D 阵列图像上,即 MNI152 T1-w template,分辨率为 1mm,尺寸为 182x182x218(磁共振成像分析的标准模板)。在我的台式机上,经过的时间约为 3 分钟。
原始 MNI T1-w 模板
使用 OTSU 方法的 7 类分割结果