我正在做一些视频处理,对于每一帧我需要得到一个双变量函数的梯度。该函数表示为一个二维双精度数组。其中域是行和列索引,范围是相应索引值的双精度值。或者更简单地说,函数f
是double[][] matrix
这样定义的:
f(x,y)=matrix[x][y]
我正在尝试使用 Apache Commons Math 库:
SmoothingPolynomialBicubicSplineInterpolator iterpolator = new SmoothingPolynomialBicubicSplineInterpolator();
BicubicSplineInterpolatingFunction f = iterpolator.interpolate(xs, ys, matrix.getData());
for (int i = 0; i < ans.length; i++) {
for (int j = 0; j < ans[0].length; j++) {
ans[i][j] = f.partialDerivativeY(i, j);
}
}
- 使用 xs,作为 x 索引的排序数组
(0,1,...,matrix.getRowDimension() - 1)
- ys 在列维度上相同
(0,1,...,matrix.getColumnDimension() - 1)
问题是,对于一个典型的矩阵,150X80
它的大小需要1.4
几秒钟的时间才能运行,这使得它与我的需求完全无关。所以,作为这个库的新手用户,以及一般的编程数值分析,我想知道:
- 难道我做错了什么?
- 有没有另一种更快的方法可以完成这项任务?
- 是否有另一个提供解决方案的开源库(最好是对 maven 友好的)?