线性插值:基于2D表计算校正

我尝试做的事情应该只是一个二维的线性插值,但目前我找不到正确的方法。 为了简单地描述问题:有一个大小为3000×3000像素的绘图区域,我必须画一条水平线。 为此,我从每个像素位置到下一个像素位置绘制点或短线,然后形成一条线。

现在必须对整个事物应用校正,其中校正信息可以在(对于该示例简化)4×4arrays中找到,其中每个元素包含描述校正后的值的一对坐标。 所以中性数组(没有校正)看起来像这样:

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位置在单元格边界上跳跃但在单元格内没有平滑变化。

所以…任何想法如何做到这一点?

您必须首先同意插值方法。 我建议使用双线性或重心插值。 在我以前的一篇文章中,我想象了两种方法之间的区别。

我将专注于双线性插值。 我们想要将单元格内的任何点转换为其校正点。 因此,所有点都可以单独转换。

我们需要插值参数uv作为点(x, y) 。 因为我们有一个轴对齐网格,这很简单:

 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) 

现在,相同的公式可用于校正点。 如果使用原始点p1p4 ,则会得到未校正的线点。 如果使用p1p4的校正单元格点,则会得到校正的线点。