不规则大网格到规则网格的2D插值
我有一个2048x2048的网格,里面存的是不规则的数据,表示为zi = f(xi, yi)
,其实就是三组独立的2048个实数值。我需要把这些数据平滑地插值(可能用双三次样条插值),转换成一个规则的网格wi = f(ui, vi)
,其中ui
和vi
是从0到2047的整数值。
我试过使用griddata,这个方法在处理小于1000x1000的图像时效果不错,但当图像达到1500x1500时就出现了问题(显然是因为Delaunay网格的内存qhull错误)。我还看了一些ndimage
的函数,比如geometric_transform
、RectBivariateSpline
和map_coordinates
,但它们似乎都需要规则的数据作为输入。不过,我可能也有可能是用错了方法!
我想用Python/SciPy来实现我之前在Matlab中用tformarray
和makeresampler
做的事情。有没有什么建议,能告诉我用哪个函数来处理这个大数据集呢?谢谢!
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的网格吗?