我试图做一件事情,应该只是一个二维,线性插值,但目前我找不到正确的方法。为了更简单地描述这个问题:有一个3000x3000像素的绘图区域,我必须在那里画一条水平线。为此,我画点或短线从每个像素位置到下一个像素位置,然后形成一条线。
现在,必须将校正应用于整个事情,其中校正信息可以在(例如,简化的)4x4数组中找到,其中每个元素都包含描述校正后值的一对坐标。所以一个中立的阵列(没有修正)看起来是这样的:

0,0      1000,0      2000,0      3000,0
0,1000   1000,1000   2000,1000   3000,1000
0,2000   1000,2000   2000,2000   3000,2000
0,3000   1000,3000   2000,3000   3000,3000

真正的校正表将包含描述要进行的校正的其他坐标:
所以作为输入数据,我有直线上的点的坐标,没有校正的字段值和校正数据。但是,我如何计算线点,现在应用校正值,使一条扭曲的线被画出来,如右图所示,如果图像?我目前对X和Y分别进行两次线性插值的方法不起作用,即Y位置在单元格边界上跳跃,但在单元格内不会平滑变化。
所以…你知道怎么做吗?

最佳答案

你必须先就插值方法达成一致。我建议双线性插值或重心插值。在one of my previous posts中,我看到了两种方法之间的差异。
我将集中讨论双线性插值。我们希望将单元格中的任何点转换为其校正点。因此,所有点都可以单独变换。
我们需要点的插值参数uv。因为我们有一个轴对齐的网格,这是非常简单的:

u = (x - leftCellEdge) / (rightCellEdge - leftCellEdge)
v = (y - bottomCellEdge) / (topCellEdge - bottomCellEdge)

我们可以通过双线性插值重建点:
p2       p4
   x----x
   |  o |
   x----x
p1       p3

o = (1 - u) * ((1 - v) * p1 + v * p2) + u * ((1 - v) * p3 + v * p4)

现在,同样的公式可以用于校正点。如果使用原始点(x, y)p1,将得到未修正的线点。如果使用p4p1的校正单元格点,将得到校正的行点。

关于c - 线性插值:基于2D表计算校正,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23077084/

10-09 16:01