我正在尝试将 2-d voigt 轮廓拟合到图像的一个子部分(impart),其中 position 是一个数组,用于保存整个图像中相应的 x 和 y 坐标以进行分配。
根据两个打印语句的输出,在我看来,下面的代码确实应该工作。
另外,如果有人对如何更快地构建位置数组有任何快速建议,我将不胜感激 numpy ndarrays 的一些建议。我对他们还是有点陌生。
import numpy as np
from scipy.special import wofz
from scipy.optimize import curve_fit
from math import pi
def voigt2d(pos,a,bx,by,Gc,Lc):
val = np.zeros((5,5))
for y in range(5):
for x in range(5):
dst = np.sqrt((pos[y][x][0]-bx)**2+(pos[y][x][1]-by)**2)
z = ((dst+(Lc*1j))/(Gc*np.sqrt(2)))
val[y][x] = a*wofz(z).real/(Gc*np.sqrt(2*pi))
print val
print val.dtype
return val
x = np.arange(93,98)
y = np.arange(7,12)
xpos = np.array([x,x,x,x,x])
ypos = np.array([y,y,y,y,y])
ypos = np.rot90(ypos,k=3)
position = np.dstack((xpos,ypos))
impart = np.array([
[971, 2425, 4331, 4280, 2697,],
[1199, 3416, 6517, 4813, 2412],
[1333, 3957, 7210, 4019, 2183],
[1494, 4115, 4817, 3085, 1758],
[1185, 2273, 2805, 2811, 1797]
],dtype=np.float64)
p,cov = curve_fit(voigt2d,position,impart)