11

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

未弯曲的网格

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

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

扭曲的网格来源

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

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

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

4

4 回答 4

5

好的,所以这听起来像图像扭曲。这是你应该做的:

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

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

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

这在此处详细解释。

另一种(更复杂的)方法是薄板样条(在上面的幻灯片中也有解释)。

于 2009-10-21T15:38:11.990 回答
2

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

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

于 2009-10-22T20:01:13.303 回答
2

我知道您在包裹和展开的网格点之间存在一对一的对应关系。而且我假设变形不是那么极端,以至于您可能有相交的网格线(如您显示的图像)。

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

预处理

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

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

  1. 找到其中包含的三角形T(p1,p2,p3)UWTp
  2. 计算in的重心坐标 (b1,b2,b3)pT(p1,p2,p3)
  3. 令为 中对应Tw(q1,q2,q3)的三角形。新的位置是。WTT(p1,p2,p3)
    b1 * q1 + b2 * q2 + b3 * q3

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

于 2009-10-22T02:07:45.223 回答
0

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

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

于 2009-10-21T15:41:36.933 回答