找到隧道'中心线'?

时间:2010-10-21 01:24:05

标签: algorithm image language-agnostic graphics geometry

我有一些由'折线'组成的地图文件(每条线只是一个顶点列表)代表隧道,我想尝试找到隧道“中心线”(粗略地显示在下面的红色)。

alt text

我过去使用Delaunay triangulation取得了一些成功,但我想避免使用该方法,因为它(通常)不允许轻松/频繁地修改我的地图数据。

关于我如何能够做到这一点的任何想法?

3 个答案:

答案 0 :(得分:22)

答案 1 :(得分:4)

这是一个非常经典的骨架化问题;有很多算法可用。一些算法原则上在轮廓轮廓上工作,但由于几乎每个人都在图像上使用它们,我不确定这样的事情会有多少可用。无论如何,如果你只是绘制和填充下水道轮廓然后使用骨架化算法,你可以得到接近中线的东西(在像素分辨率内)。

然后你可以沿着这些线走,并用圆圈进行二元搜索,直到你至少击中两个单独的线段(如果你在分支点,则为三个)。你第一次击中的两个点的中点,或者一个圆圈的中心触及你第一次击中的三个点,是对中心的一个很好的估计。

答案 2 :(得分:3)

Python使用包skimage这是一项简单的任务,如下所示。

import pylab as pl
from skimage import morphology as mp

tun = 1-pl.imread('tunnel.png')[...,0]        #your tunnel image
skl = mp.medial_axis(tun)                     #skeleton

pl.subplot(121)
pl.imshow(tun,cmap=pl.cm.gray)
pl.subplot(122)
pl.imshow(skl,cmap=pl.cm.gray)
pl.show()

enter image description here