[英]Using watershed in scikit-image
分水嶺 function 產生了一個意想不到的結果:它似乎無法分割我的數組,即使我期望它。
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
僅僅提供某個 position 是否存在峰是不夠的,而是提供一個 label 來指示哪些峰屬於一起。 這可以通過skimage.measure.label
來完成:
from skimage import measure
watershed(-myarray, measure.label(isLocalMaxArray, background=0), watershed_line=True)
或者, scipy.ndimage.label
可用於超過 3 維的圖像。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.