gpt4 book ai didi

python - 使用 Voronoi 图查找多边形的中线

转载 作者:行者123 更新时间:2023-12-01 08:42:52 33 4
gpt4 key购买 nike

我正在使用概述的基于 Voronoi 图的方法 here找到根图像的二进制掩模的中线。我使用的 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) 图并不总是延伸根的整个长度:

enter image description here

Midline that does not extend fully

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

rod-like polygon with graph

rod-like polygon with midline

circle-like polygon with graph

circle-like polygon with midline

rod-like polygon with midline with graph

polygon with sharp vertices with midline

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

对 Voronoi 图有更深入了解的人是否有任何关于如何解决这些问题的提示,同时仍然保留这种通用方法。

谢谢!

最佳答案

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

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

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

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

关于python - 使用 Voronoi 图查找多边形的中线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53436517/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com