我想将任意缩放到具有不同尺寸double[][]
的另一个。double[][]
应使用双三次插值基于输入数组计算结果数组的值。
我知道这已经在图像处理中完成了几十年,但是我找不到适用于任何二维数组而不是某些特定图像对象的库或至少一个工作代码片段,所以这就是我在这里问的原因。
更具体的要求:
据我了解,可以使用双三次插值直接计算 3x3 网格角之间的任何点的值,所以我需要的第一个函数类似于
double interpolate(double[][] grid3by3, double x, double y)`
其中 x 和 y 介于 0.0 和 1.0 之间
下一步当然是简化这个过程,以便为每个点自动选择 3x3 网格,我可以得到类似的东西
`double[][] interpolate(double[][] input, int newWidth, int newHeight)`
这将为我提供一个具有指定尺寸但与输入数组具有相同边框的新数组。
我真正想要得到的是:
`double[][] interpolate(double[][] input, int newWidth, int newHeight,
double minX, double minY, double maxX, double maxY)`
最小值和最大值定义了一个边界框,因此我可以获得初始数组的子集,它不一定需要在输入数组的确切索引值处开始或结束(例如,角可以在 (5,3) 或(5.25, 3.7),所以你不能只在某个索引值处切断输入数组)。这个边界框将成为新数组的范围,并且值是从输入数组中插入的。
哦,仅供参考:这是关于数字高程模型,所以请告诉我我的方法是否完全错误;)