2D-интерполяция большой нерегулярной сетки в регулярную сетку - PullRequest
6 голосов
/ 15 августа 2011

У меня есть 2048x2048 меш нерегулярных данных zi = f(xi, yi), которые по сути являются тремя независимыми наборами 2048 реальных значений. Мне нужно плавно интерполировать (возможно, бикубический сплайн) в регулярную сетку wi = f(ui, vi), где ui и vi являются целочисленными значениями от 0 до 2047.

Я пробовал griddata, который, кажется, хорошо работает на изображениях менее 1000x1000, но взрывается при достижении 1500x1500 (ошибки памяти qhull для сетки Делоне, очевидно). Я рассмотрел некоторые функции ndimage, а именно geometric_transform, RectBivariateSpline и map_coordinates, но все они, кажется, принимают регуляризованные данные в качестве входных данных. Я мог что-то упустить и просто реализовать это неправильно, хотя тоже!

Я пытаюсь использовать Python / SciPy, чтобы сделать то, что этот скрипт Matlab я делал, используя tformarray и makeresampler. Любые предложения относительно того, какую функцию я могу использовать для обработки этого большого набора данных? Спасибо!

1 Ответ

2 голосов
/ 18 декабря 2011

Я безуспешно пытался воспроизвести ваши ошибки.Вы в 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?

...