我有一個數據點的網格,我目前使用雙線性插值來找到網格中的缺失點。我指出克里格又名您最好的線性無偏估計器,但我無法找到好的源代碼或代數解釋。有誰知道我可以使用的其他插值方法嗎?有人可以描述一種比雙線性插值更好的二維插值方法嗎?
- 更新 @Sam Greenhalgh 我已經考慮過雙立方插值,但是使用我發現的代碼示例收到的結果看起來不對。
這裏是雙三次
注意我編碼在C#中,但我歡迎其他語言的例子,以及代碼示例。
//array 4
double cubicInterpolate(double[] p, double x)
{
return p[1] + 0.5 * x * (p[2] - p[0] + x * (2.0 * p[0] - 5.0 * p[1] + 4.0 * p[2] - p[3] + x * (3.0 * (p[1] - p[2]) + p[3] - p[0])));
}
//array 4 4
public double bicubicInterpolate(double[][] p, double x, double y)
{
double[] arr = new double[4];
arr[0] = cubicInterpolate(p[0], y);
arr[1] = cubicInterpolate(p[1], y);
arr[2] = cubicInterpolate(p[2], y);
arr[3] = cubicInterpolate(p[3], y);
return cubicInterpolate(arr, x);
}
double[][] p = {
new double[4]{2.728562594,2.30599759,1.907579158,1.739559264},
new double[4]{3.254756633,2.760758022,2.210417411,1.979012766},
new double[4]{4.075740069,3.366434527,2.816093916,2.481060234},
new double[4]{5.430966401,4.896723504,4.219613391,4.004306461}
};
Console.WriteLine(CI.bicubicInterpolate(p, 2, 2));
您是否考慮過雙三次插值? – 2014-11-21 15:00:32
看來,克里格以「維納過濾」這個名字更爲人所知。 – 2014-11-21 15:41:56
將@JonSkeet發送給救援如何? – 2014-11-21 18:11:26