public final double resample(final Raster raster, final Index index) throws Exception { final int[] x = new int[kernelSize]; final int[] y = new int[kernelSize]; final double[][] samples = new double[kernelSize][kernelSize]; final double[] winX = new double[kernelSize]; final double cx = index.ki[0] + halfKernelSize; double sumX = 0.0; for (int n = 0; n < kernelSize; n++) { x[n] = (int) index.i[n]; y[n] = (int) index.j[n]; winX[n] = sincHanning(cx - n); sumX += winX[n]; } if (!raster.getSamples(x, y, samples)) { if (Double.isNaN(samples[halfKernelSize][halfKernelSize])) { return samples[halfKernelSize][halfKernelSize]; } BiCubicInterpolationResampling.replaceNaNWithMean(samples); } final double cy = index.kj[0] + halfKernelSize; double sumY = 0, winY; double v = 0.0; for (int j = 0; j < kernelSize; j++) { winY = sincHanning(cy - j); sumY += winY; for (int i = 0; i < kernelSize; i++) { v += samples[j][i] * winX[i] * winY; } } v /= sumX * sumY; return v; }