假设您有一组坐标为笛卡尔坐标系的点。
您想绘制另一个点,并且您知道它在相同的笛卡尔坐标系中的坐标。
但是,您正在绘制的绘图与原始绘图失真。想象一下,将原始平面打印在橡胶板上,然后在某些地方拉伸并以不对称的方式将其捏在其他地方(没有重叠或任何复杂的情况)。
(source)
您知道每组点的拉伸和未拉伸坐标,但不知道基础拉伸函数。你知道一个新点的未拉伸坐标。
如何根据附近点的拉伸位置估算在拉伸坐标中绘制新点的位置?它不需要精确,因为除非您有更多信息,否则无法从一组重映射点确定实际拉伸函数。
其他可能的关键字:扭曲的扭曲网格平面坐标unwarp
答案 0 :(得分:5)
好的,所以这听起来像是图像变形。这是你应该做的:
创建一个Delaunay triangulation未扭曲的网格,并使用您对扭曲和未扭曲网格之间的对应关系的知识来创建扭曲网格的三角剖分。现在您知道每个图像中的相应三角形,并且由于没有重叠,您应该能够毫不费力地执行下一步。
现在,要在扭曲的图像中找到对应的点A
:
A
,并使用未扭曲网格中的三角形与扭曲网格之间的变换来计算新位置。详细解释了here。
另一个(更复杂的)方法是Thin Plate Spline(在上面的幻灯片中也有解释)。
答案 1 :(得分:2)
我知道你在包裹和未包裹的网格点之间有一对一的对应关系。我假设变形不是那么极端,你可能有交叉的网格线(就像你显示的图像)。
这个策略正是雅各布所建议的:对三个网格进行三角测量,使得三角形之间存在一对一的对应关系,找到要在三角剖分中映射的点,然后在相应的三角形中使用重心坐标来计算新点位置。
<强>预处理强>
WT
。WT
中的每个三角形,在展开的网格中的相应顶点之间添加一个三角形。这给出了未打包点的三角测量UWT
。 将点p
映射到包裹的网格
T(p1,p2,p3)
中找到包含UWT
的三角形p
。(b1,b2,b3)
p
的{{3}} T(p1,p2,p3)
Tw(q1,q2,q3)
成为与WT
对应的T(p1,p2,p3)
中的三角形。新职位为b1 * q1 + b2 * q2 + b3 * q3
。<强>说明强> 这给出了变形函数barycentric coordinates。为了更平滑的行为,可以使用相同的三角测量,但是进行更高阶的近似,这将导致更复杂的计算而不是重心坐标。
答案 2 :(得分:2)
其他答案很棒。我要添加的唯一内容是您可能需要查看Free form deformation作为描述变形的方法。
如果这很有用,那么很可能将变形网格/点阵拟合到已知对中,然后你就可以非常快速地改变未来的点。
答案 3 :(得分:0)
很大程度上取决于您拥有多少现有积分。如果你只有一个,你可以用它做的事情真的不多 - 你可以在同一个方向上将第二个点偏移相同的数量,但你没有足够的数据来做到这一点。
如果您有相当数量的现有点,您可以通过这些点进行曲面拟合,并使用它来近似新点的正确位置。给定N个点,你总是可以使用N次多项式得到一个完美的拟合,但你很少想这样做 - 相反,你通常猜测拉伸函数是一个相当低阶的函数(例如二次或三次)并且适合在此基础上的点的表面。然后根据拟合曲面的函数放置新点。