【问题标题】:How to map a point onto a warped grid如何将点映射到扭曲的网格上
【发布时间】:2009-10-21 15:24:07
【问题描述】:

假设你有一组坐标在笛卡尔坐标系上的点。

您想绘制另一个点,并且您知道它在同一个笛卡尔坐标系中的坐标。

但是,您绘制的情节与原始情节有所不同。想象一下,将原始平面打印在橡胶纸上,然后以不对称的方式(没有重叠或任何复杂的方式)在某些地方拉伸它并在其他地方捏合它。

(source)

您知道每个点集的拉伸和未拉伸坐标,但不知道底层拉伸函数。你知道一个新点的未拉伸坐标。

如何根据附近点的拉伸位置估计在拉伸坐标中绘制新点的位置?它不需要精确,因为除非您有更多信息,否则您无法从一组重新映射的点中确定实际的拉伸函数。

其他可能的关键字:warped 扭曲网格 网格平面坐标 unwarp

【问题讨论】:

  • +1 用于解释您正在尝试做什么的图形
  • 我把它们偷得天花乱坠;)

标签: geometry grid coordinates mesh unwarp


【解决方案1】:

好的,这听起来像是图像变形。这是你应该做的:

  1. 为您的未扭曲网格创建一个Delaunay triangulation,并利用您对扭曲和未扭曲网格之间对应关系的了解来为扭曲网格创建三角剖分。现在您知道了每张图像中对应的三角形,并且由于没有重叠,您应该可以毫不费力地执行下一步。

  2. 现在,在扭曲的图像中找到对应的点A

    1. 找到三角形A所在的位置,并使用未扭曲网格中的三角形与扭曲网格之间的变换来找出新的位置。

这在here有明确的解释。

另一种(更复杂的)方法是Thin Plate Spline(在上面的幻灯片中也有说明)。

【讨论】:

  • 展开网格点和包裹网格点的 Delauay 三角形之间没有一一对应关系。实际上,规则网格已经没有唯一的 Delaunay 三角剖分,即使有,变形也可能导致某些边缘的翻转......
  • 存在一一对应关系,因为 OP 事先知道这一点。由于这种对应关系是已知的,并且在扭曲期间没有重叠(根据 OP),因此未扭曲网格上的任何 Delaunay 三角剖分都可以用于扭曲网格,因此可以找到对应的三角形。
  • 顶点之间存在一一对应关系,但两个 Delaunay 三角剖分之间不存在一一对应关系。请参阅此处的示例:img8.imageshack.us/i/counternn.png 这是两个 Delaunay 三角剖分,颜色表示顶点之间的对应关系。由于变形,右侧的红绿蓝顶点之间没有三角形。这就是为什么我在我的解决方案中建议只计算一个 Delaunay 三角剖分,并根据顶点对应关系推导出另一个三角剖分。
  • 我明白你现在的意思了。我在给你的评论中提出的方法和我原来的答案不同,我会改变它 - 谢谢。
  • 你知道扭曲点和非扭曲点之间的映射关系吗?
【解决方案2】:

我了解到您在已包裹和未包裹的网格点之间存在一对一的对应关系。而且我假设变形不是那么极端,以至于您可能有相交的网格线(就像您展示的图像一样)。

策略正是 Jacob 建议的:对两个网格进行三角剖分,使三角形之间存在一一对应关系,在三角剖分中定位要映射的点,然后使用相应三角形中的重心坐标计算新点位置。

预处理

  1. 生成包裹网格点的Delaunay triangulation,我们称之为WT
  2. 对于WT 中的每个三角形,在展开的网格中的相应顶点之间添加一个三角形。这给出了展开点的三角剖分UWT

将点 p 映射到包裹的网格中

  1. 在包含pUWT 中找到三角形T(p1,p2,p3)
  2. 计算T(p1,p2,p3)pbarycentric coordinates(b1,b2,b3)
  3. Tw(q1,q2,q3)WT 中对应于T(p1,p2,p3) 的三角形。新职位是
    b1 * q1 + b2 * q2 + b3 * q3

备注 这给出了一个变形函数为linear spline。对于更平滑的行为,可以使用相同的三角测量,但进行更高阶的近似,这将导致计算更复杂,而不是重心坐标。

【讨论】:

  • 我喜欢您在此处包含详细信息,而不仅仅是链接到一个长的外部文档,但这似乎与 Jacob 的答案相同,这是第一个。
  • Jacob 错过的细节和我在 cmets 中提出的细节如果开始实施此类方法会产生重大影响......但我知道在第一次阅读时它似乎几乎相同。我决定写一个单独的答案,因为他的描述相当混乱,我无法改进他的解决方案(我没有足够的声誉)
【解决方案3】:

其他答案很棒。我唯一要补充的是,您可能想看看Free form deformation 作为描述变形的一种方式。

如果这很有用,那么很有可能将变形网格/晶格拟合到已知对中,然后您就有了一种非常快速的方法来变形未来的点。

【讨论】:

    【解决方案4】:

    很大程度上取决于您拥有多少现有积分。如果您只有一个,那么您实际上无能为力 - 您可以在同一方向上以相同的量偏移第二个点,但您没有足够的数据来真正做得比这更好。

    如果您有相当多的现有点,您可以通过这些点进行曲面拟合,并使用它来近似新点的正确位置。给定 N 个点,您总是可以使用 N 阶多项式获得完美拟合,但您很少想要这样做——相反,您通常猜测拉伸函数是一个相当低阶的函数(例如二次或三次)并且适合在此基础上的点的表面。然后根据拟合曲面的函数放置新点。

    【讨论】:

      猜你喜欢
      • 2010-09-05
      • 1970-01-01
      • 2017-05-16
      • 2020-12-03
      • 2017-12-02
      • 1970-01-01
      • 2014-01-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多