不规则大网格到规则网格的2D插值

6 投票
1 回答
3216 浏览
提问于 2025-04-16 23:38

我有一个2048x2048的网格,里面存的是不规则的数据,表示为zi = f(xi, yi),其实就是三组独立的2048个实数值。我需要把这些数据平滑地插值(可能用双三次样条插值),转换成一个规则的网格wi = f(ui, vi),其中uivi是从0到2047的整数值。

我试过使用griddata,这个方法在处理小于1000x1000的图像时效果不错,但当图像达到1500x1500时就出现了问题(显然是因为Delaunay网格的内存qhull错误)。我还看了一些ndimage的函数,比如geometric_transformRectBivariateSplinemap_coordinates,但它们似乎都需要规则的数据作为输入。不过,我可能也有可能是用错了方法!

我想用Python/SciPy来实现我之前在Matlab中用tformarraymakeresampler做的事情。有没有什么建议,能告诉我用哪个函数来处理这个大数据集呢?谢谢!

1 个回答

2

我试着重现你的错误,但没有成功。你是在32位系统上吗?我之前在使用scipy/numpy和大数组时遇到过问题,所以我换成了64位系统,从那以后就没有再遇到问题了。

这是我用来尝试重现你错误的代码(虽然不会生成什么有用的东西,但至少应该能遇到同样的错误):

y,x=indices([2048,2048],dtype='float64')
z = randn(2048,2048)
yr = y + randn(2048,2048)
xr = x + randn(2048,2048)
zn = griddata(xr.ravel(),yr.ravel(),z.ravel(),x,y)
zl = griddata(xr.ravel(),yr.ravel(),z.ravel(),x,y,interp='linear')

这个在我的电脑上可以正常运行。

如果你无法运行64位版本的Python(这可能会根据你使用的操作系统而有些困难),你能把你的2048x2048的网格分成4个1024x1024的网格吗?

撰写回答