我正在尝试安装一个模仿图像背景的平面。我是通过使用 scipy.optimize.least_squares 来实现的。我从这里开始遵循食谱:http://scipy-cookbook.readthedocs.io/items/FittingData.html#fitting-data(滚动到页面中间:安装2D高斯)
如果我正确地理解了他们的代码,那么参数化它们的功能:
def Guassian(data):
params = moments(data)
errorfunction = lambda p: np.ravel(gaussian(*p)(*np.indices(data.shape))-data)
用np.ravel()展平他们的2D数组。
我的问题是这怎么可能?如果我做同样的事情,我会得到一个很好的融合,但我可以交换我的x 1和x [2]并仍然得到相同的拟合( - 如果你看看我实现的模型,这是完全合乎逻辑的。)那么我在这里做错了什么?
我按照http://docs.scipy.org/doc/scipy/reference/tutorial/optimize.html#least-square-fitting-leastsq 最小二乘法的符号使用了他们的代码:
from scipy.optimize import least_squares
import numpy as np
def model(x,u):
return(x[0]+x[1]*u+x[2]*u)
def meritFun(x,u,y):
return(model(x,u) - y)
def uFun(area):
u = range(area**2)
return(np.asarray(u))
i0 = 693
j0 = 449
area = 100
image = imageOpen(nameArray)
field = getROI(image,coverage,area,i0,j0)
meanX = xSlices(field,area)
meanY = ySlices(field,area)
mean = np.mean(field)
u = uFun(area)
y = np.ravel(field)
x0 = np.array([mean,meanX,meanY])
res = least_squares(meritFun, x0, args=(u, y), verbose=1)
我没有提供xSlices,ySlices,因为它们只是返回x,y方向上的平均值的猜测:mean = 0.00377306499016 meanX = 0.00377306499016 meanY = 0.00377306499016。 regionOfIntrest函数getROI(image,...)返回的图像是:
[有一个适合飞机的理由,即使它看起来还不像。如果你不想用图像构造一个带有模型(u,x)+噪声的数组(100 * 100)