【问题标题】:Finding midlines of polygons using Voronoi diagrams使用 Voronoi 图查找多边形的中线
【发布时间】:2018-11-22 18:32:58
【问题描述】:

我正在使用here 概述的基于 Voronoi 图的方法来查找根图像的二进制掩码的中线。我或多或少完全按照描述使用 Python 代码:

import skimage.morphology as morphology

WHITE = 255

image_bool = binary_mask == WHITE
d = morphology.disk(2)
img = morphology.binary_closing(image_bool, selem=d)
skeleton = morphology.medial_axis(img)

然后是图形:我将骨架化图像输入 buildTree,如用户 Gabriel 的 iPython 笔记本中所述: https://github.com/gabyx/WormAnalysis/blob/master/SkeletonTest/Skeletonize.ipynb

一般来说,这会产生很好的效果。但是,该方法有时会以两种不同的方式失败:

1) 图并不总是延伸到根的全长:

2) 图表有时会“过早地”连接到沿根轮廓的一个点,该点可能看起来是最长的路径,但显然不符合我所说的“中线”。这适用于各种多边形形状:

最后一个案例是一个人造面具——我的实际根没有一个完全平坦的尖端——但我认为它很好地代表了这个问题。

是否有人对 Voronoi 图有更深入的了解,有任何技巧可以解决这些问题中的任何一个,同时仍然保留这种通用方法。

谢谢!

【问题讨论】:

  • 也许还提供您输入到骨架化算法的骨架图像
  • 嗨@Gabriel,抱歉耽搁了!我编辑了原始帖子以包含骨架化图像。这是你想看到的吗?
  • 嘿@Gabriel,我想知道您是否有机会研究这个问题?谢谢!
  • No没有时间:算法只构建最长的路径。在 2) 中,选择这条路径似乎有点奇怪,因为 2) 中的骨架化会提出不同的建议......

标签: python polygon computational-geometry curve-fitting voronoi


【解决方案1】:

这两个问题都是中轴的“特征”,Voronoi 方法。

中轴上的点与两个或多个边界的距离相等。这是由于中轴点是 Voronoi 点,或双重 Delaunay 三角测量中心。这意味着有一个以该中心为中心的圆,整个在边界内,通过三个边界点。至少当边界离散化进入无穷大时会出现这种情况。由于边界没有无限数量的点,这种方法是您观察到的问题的近似值。

1) 圆弧的中轴是一个点。这个结果很好。如果形状以非常干净的弧线结束,则中间轴“停止”在弧形部分的中间轴点上。这可以在Skeletonize page上的不同方法的比较中看到。

2) 两条线的中轴通过角平分线。这意味着如果边界上有更多的“角”,就会有更多的轴“指”进入这些角。就像正方形的中轴是X形的。如果您使用 WormAnalysis 方法(您提到过),则仅提取轴上最长的路径。这对蠕虫有好处,但不是在一般情况下。在一般情况下,最好通过移除覆盖一小部分边界的部分来清洁轴。就像您在主题 2 的第一张图片中一样,有一个轴部分在上升。即部分是边界左上角小角的中轴。边界上那个角的左侧是具有小中轴的弧形部分。由于采用最长的路径,因此会采用覆盖边界小部分的长“手指”,而省略覆盖边界较大部分的中轴的较小部分。

【讨论】:

    猜你喜欢
    • 2014-01-22
    • 2012-08-22
    • 2014-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-12
    • 1970-01-01
    相关资源
    最近更新 更多