【问题标题】:Using watershed in scikit-image在 scikit-image 中使用分水岭
【发布时间】:2021-06-17 15:07:42
【问题描述】:

说明

分水岭函数产生了一个意想不到的结果:它似乎无法对我的数组进行分段,即使我期望它。

我的例子

from skimage.segmentation import watershed
import numpy as np
myarray = np.array([
       [ 2.50148667,  9.44388663,  3.44389182,  3.02727774,  2.40108087,  1.61053155,  0.82294687],
       [ 3.31356207, 10.55797911,  4.69412493,  4.41801194,  3.80963218,  2.70408164,  1.35735552],
       [ 3.28787642,  4.59215029,  4.97735914, 11.08993154,  4.7925308 ,  9.6116032 ,  1.79749649],
       [ 2.87281939,  4.15976317,  4.70572275, 10.95797537,  4.73970551,  9.56800396,  1.7571604 ],
       [ 1.98065752,  2.97293194,  3.42830952,  3.56329229,  3.27749856,  2.33718172,  1.1267278 ]])
isLocalMaxArray = np.array([
       [False, False, False, False, False, False, False],
       [False,  True, False, False, False, False, False],
       [False, False, False,  True, False,  True, False],
       [False, False, False, False, False, False, False],
       [False, False, False, False, False, False, False]])
watershed(-myarray, isLocalMaxArray, watershed_line=True)

生产

array([
       [1, 1, 1, 1, 1, 1, 1],
       [1, 1, 1, 1, 1, 1, 1],
       [1, 1, 1, 1, 1, 1, 1],
       [1, 1, 1, 1, 1, 1, 1],
       [1, 1, 1, 1, 1, 1, 1]], dtype=int32)

在我预料之中

array([
       [1, 1, 0, 3, 0, 2, 2],
       [1, 1, 0, 3, 0, 2, 2],
       [1, 1, 0, 3, 0, 2, 2],
       [1, 1, 0, 3, 0, 2, 2],
       [1, 1, 0, 3, 0, 2, 2]], dtype=int32)

问题

我做错了什么?

版本信息

from __future__ import print_function
import sys; print(sys.version)
import platform; print(platform.platform())
import skimage; print("scikit-image version: {}".format(skimage.__version__))
import numpy; print("numpy version: {}".format(numpy.__version__))

3.8.8(默认,2021 年 2 月 24 日 21:46:12)

[GCC 7.3.0]

Linux-5.4.0-67-generic-x86_64-with-glibc2.10

scikit-image 版本:0.17.2

numpy 版本:1.19.2

【问题讨论】:

    标签: python numpy image-processing scikit-image watershed


    【解决方案1】:

    仅仅提供某个位置是否有一个峰是不够的,还需要一个标签来指示哪些峰属于一起。这可以通过skimage.measure.label 来完成:

    from skimage import measure
    watershed(-myarray, measure.label(isLocalMaxArray, background=0), watershed_line=True)
    

    或者,scipy.ndimage.label 可用于超过 3 维的图像。

    【讨论】:

      猜你喜欢
      • 2015-03-30
      • 1970-01-01
      • 2019-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-08
      • 2013-10-16
      相关资源
      最近更新 更多