Dzz*_*Dzz 6 python interpolation scipy
在我的应用程序中,数据数据是在扭曲的网格上采样的,我想将其重新采样为非扭曲的网格。为了测试这一点,我编写了这个程序,其中包含示例性失真和一个简单的函数作为数据:
from __future__ import division
import numpy as np
import scipy.interpolate as intp
import pylab as plt
# Defining some variables:
quadratic = -3/128
linear = 1/16
pn = np.poly1d([quadratic, linear,0])
pixels_x = 50
pixels_y = 30
frame = np.zeros((pixels_x,pixels_y))
x_width= np.concatenate((np.linspace(8,7.8,57) , np.linspace(7.8,8,pixels_y-57)))
def data(x,y):
z = y*(np.exp(-(x-5)**2/3) + np.exp(-(x)**2/5) + np.exp(-(x+5)**2))
return(z)
# Generating grid coordinates
yt = np.arange(380,380+pixels_y*4,4)
xt = np.linspace(-7.8,7.8,pixels_x)
X, Y = np.meshgrid(xt,yt)
Y=Y.T
X=X.T
Y_m = np.zeros((pixels_x,pixels_y))
X_m = np.zeros((pixels_x,pixels_y))
# generating distorted grid coordinates:
for i in range(pixels_y):
Y_m[:,i] = Y[:,i] - pn(xt)
X_m[:,i] = np.linspace(-x_width[i],x_width[i],pixels_x)
# Sample data:
for i in range(pixels_y):
for j in range(pixels_x):
frame[j,i] = data(X_m[j,i],Y_m[j,i])
Y_m = Y_m.flatten()
X_m = X_m.flatten()
frame = frame.flatten()
##
Y = Y.flatten()
X = X.flatten()
ipf = intp.interp2d(X_m,Y_m,frame)
interpolated_frame = ipf(xt,yt)
Run Code Online (Sandbox Code Playgroud)
在这一点上,我不得不质疑:
该代码有效,但我收到以下警告:
警告:不能再添加节点了,因为 B 样条系数的数量已经超过了数据点的数量 m。可能的原因:s 或 m 太小。(fp>s) kx,ky=1,1 nx,ny=54,31 m=1500 fp=0.000006 s=0.000000
此外,出现了一些插值伪影,我认为它们与警告有关 - 你们知道我做错了什么吗?
谢谢!
rec*_*ner -1
您可能想在底图中查看以下 interp 方法:
mpl_toolkits.basemap.interp http://matplotlib.sourceforge.net/basemap/doc/html/api/basemap_api.html
除非你真的需要基于样条的插值。
| 归档时间: |
|
| 查看次数: |
10457 次 |
| 最近记录: |