首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >确定弯曲、拉长区域的中线

确定弯曲、拉长区域的中线
EN

Stack Overflow用户
提问于 2010-12-30 00:05:59
回答 4查看 2.4K关注 0票数 8

假设我有一个热狗的二维图像。我可以在热狗的两端之间画一条直线。这就是中线。它的一个属性是它是(2D)热狗绕其具有最小转动惯量的轴。

现在如果我把热狗弯成弧形,这条中线也会变形。

给出一张弯曲的热狗的照片,我如何确定这条弯曲的中线?该算法应该容忍图像中的适量噪声。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-12-30 03:34:03

如果我理解你的问题,你想要一条线穿过你的对象,每个点都在对象的中间,也就是说,如果你从中线上的任何一点开始,沿着垂直于中线的方向走,你必须在两个方向上走同样的距离,直到你遇到对象的边界:

(这只是一个例子--可能不是几何校正的中线!)

我的快速解决方案是从一个中轴(可以很容易地从一阶和二阶矩计算出来)开始,通过取这条线上的每个点来细化它,在与当前方向垂直的线上找到该点上最近的边界点,然后将该点移动到这两个点的几何中心:

如果你对每个点都这样做,你应该会得到一个更好的中线近似值。

我说这是快速和肮脏的,因为我不确定简单地重复这个过程是否总是收敛到一个稳定的解决方案。这可能取决于在存在折弯和扭结的情况下如何计算中线的垂直方向。

绕过这一问题的一种方法是使用更受物理启发的模型:

  • 计算对象内部的距离变换(每个点到最近边界点的距离)
  • 查找通过对象的平滑线,以最大化距离变换图像的路径积分:

为了找到这条线,我会使用类似于活动轮廓/蛇的算法:

  • 从中轴开始
  • 对每个点应用两个力:
    • 一个力在距离变换的渐变方向(即,远离最近的边界)
    • 另一个力与蛇的拉伸和弯曲相反,因此它在没有明显距离变换渐变的地方保持平滑形状。(谷歌搜索活动轮廓-这是相当标准的简历材料,你会发现很多关于it.)

的好文章

  • 重复,直到达到收敛或某个固定的迭代限制

您将需要调整一些参数来获得这些曲线的平滑度(与活动轮廓一样),但您获得定义良好且行为良好的近似值的机会远远好于上面的简单方法。

票数 5
EN

Stack Overflow用户

发布于 2010-12-30 00:14:36

也许你可以skeletonize你弯曲的热狗。

您必须首先对其进行thresold,然后使用细化算法。

这里有一些很酷的链接:

http://xphilipp.developpez.com/contribuez/Skeleton-Algorithm.pdf http://www-prima.inrialpes.fr/perso/Tran/Draft/gateway.cfm.pdf http://www.geometrictools.com/Documentation/Skeletons.pdf

票数 3
EN

Stack Overflow用户

发布于 2010-12-30 02:27:58

如果骨架化方法不起作用,你可能会看到一个更难的问题--这带来了许多问题:你的形状有多大的限制?它们总是凸的吗?根据答案,您可能会考虑将形状参数化。

首先,我会考虑计算凸壳(google QHull),然后确定形状的Delaunay三角剖分。从那里,我相信你可以计算一个Voronoi图,并实现你需要的中线。注意:这是大量的工作--考虑到这种程度的努力,看看一个简单的框架是否可以调整到足够的程度,这可能会有所帮助。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4555682

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档