【问题标题】:Display the segmentation of watershed algorithm显示分水岭算法的分割
【发布时间】:2018-10-26 01:07:50
【问题描述】:

我是 Opencv 的新手, 我最近一直在使用分水岭算法, 目前我已经尝试使用不同的颜色标记来分割图像,但我也想显示这些片段。

有什么方法可以做到这一点,就像我们可以在简单线性迭代聚类超像素分割中使用简单线性迭代聚类函数和标记边界函数一样

使用 Opencv 和 python。

谢谢。

【问题讨论】:

  • scikit image 有一个库可以执行超像素分割,如果你有兴趣的话
  • 感谢 Jeru,我也尝试过 SLIC 超像素和 SEEDS 算法,但我真的很想知道我是否可以在分水岭算法中显示这些片段..
  • 解决方案有效吗?

标签: python algorithm opencv image-segmentation watershed


【解决方案1】:

首先关注THIS DOCUMENTATION获取图片中的标记。我使用了本文档中的相同图像。

之后,逐行执行此代码并可视化每个变量包含的内容:

在变量markers 中,每个唯一的连接组件都被分配了一个唯一的值。我正在将markers 中存在的那些值标准化为整数。每个连接的组件都可以在列表uniq_thresh 中提到的特定阈值处获得。

label_hue = np.uint8(179*markers/1)
uniq_thresh = np.unique(label_hue).tolist()
cv2.imshow('label_hue', label_hue)
uniq_thresh.sort(reverse=True)

prev 是与原始图像具有相同形状但始终像素值为 0 的图像。

prev = np.zeros_like(label_hue)

现在对于列表uniq_thresh 中的每个唯一阈值,我正在显示连接的组件。但是由于thresh 返回的图像具有高于某个阈值的组件,因此我要从中减去先前的阈值图像以获得单个组件。

for th in uniq_thresh:
    print(th)
    ret, thresh = cv2.threshold(label_hue, th, 255, cv2.THRESH_BINARY)
    cv2.imshow('ind', thresh)
    cv2.imshow('ind2', thresh - prev)
    prev = thresh
    cv2.waitKey(0)

cv2.destroyAllWindows()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-11
    • 2016-12-29
    • 1970-01-01
    • 2019-08-06
    • 1970-01-01
    • 2011-09-08
    • 2020-06-14
    相关资源
    最近更新 更多