线性内插:基于二维表计算校正(Linear interpolation: calculate cor

2019-10-19 21:46发布

我尝试这样做,应该是没有什么比一个二维线性插值以上,但目前我不找到正确的办法的事情。 为了描述简化位问题:存在与大小的3000x3000像素,其中我必须绘制例如水平线绘图区。 要做到这一点我画点或短线从每个像素位置,然后形成了一个线上的下一个像素位置。

现在的校正必须由4阵列,其中每一个元件包含一对描述校正后的值的坐标被施加到校正信息可在发现此(例如简化)整个事情4。 所以中性阵列(无校正)是这样的:

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位置跳跃在细胞边界,但不会在细胞内平滑地改变。

所以...任何想法怎么可以这样做?

Answer 1:

你必须首先对插值方法达成一致。 我建议要么双线性或重心插值。 在我以前的帖子中的一个我想象这两种方法之间的差异。

我将注意力集中在双线性插值。 我们要在小区内任意变换点的修正点。 因此,所有的点可以单独转化。

我们需要插补参数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)

现在,相同的公式可以用于校正的点。 如果您使用原来的点p1通过p4 ,你会得到裸线点。 如果您使用修正细胞点p1p4 ,你会得到修正线点。



文章来源: Linear interpolation: calculate correction based on 2D table