-1

我正在使用 Java 的InterpolationBilinear类来帮助我重新采样数组。我当前(且相对较小)的测试用例是将 10x10 数组转换为 20x20 数组。我的问题是interpolate(double[][], float x, float y)这个类中的方法只是重新采样我发送的二维数组的左上角(0x0、0x1、1x0、1x1)。

目前,看起来我必须编写一些代码来向 interpolate 方法发送一堆 2x2 数组而不是整个数组。似乎有更好的方法,有什么建议吗?

我对使用 3rd 方库不感兴趣,只有标准 Java 和我可以自己编写的代码。

谢谢!

4

1 回答 1

1

这就是InterpolationBilinear班级应该做的事情。请参阅文档。它唯一做的就是在矩形排列的四个点之间实现双线性插值。该公式在此处进行了解释,您也可以很容易地自己实现它。

问题是:在你的例子中float x是什么?float y因为InterpolationBilinear.interpolate它们应该代表样本矩形四个角之间的分数位置。

或者您想要float xfloat y表示数组中的元素编号?例如 (4.3,7.1) 将意味着在元素 (4,7)、(4,8)、(5,7) 和 (5,8) 之间进行插值?interpolate那么是的,您只需将这四个值与 x 中的小数位置 0.3 和 y 中的 0.1 一起插入(或您自己实现的那个简单公式)。

编辑您现在已经澄清x并且应该表示数组中y的小数位置,我们称之为它,并假设它是 10 x 10 即索引在两个维度上从 0 到 9。raw[][]

要进行插值,(x,y)您只需要找到正方形所在的位置(x,y),然后在四个角之间进行插值。在 x 方向上,索引将是紧接在 上方和下方的整数x*9,即Math.floor(x*9)Math.floor(x*9) + 1-- 在 y 中的想法相同,但带有y*9。现在你有你的四个角了。将它们代入公式。小数位置将类似于xfrac = x*9 - Math.floor(x*9)and yfrac = y*9 - Math.floor(y*9)。也将它们插入公式中。

这必须对目标数组中的每个点重复。请注意,x上面段落中的 将等于i/19并且y等于j/19whereij是目标数组的索引。

于 2011-10-13T13:24:20.600 回答