2D平面拟合,如何参数化?

时间:2016-10-11 15:16:18

标签: python scipy least-squares

我正在尝试安装一个模仿图像背景的平面。我是通过使用 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,...)返回的图像是:enter image description here

[有一个适合飞机的理由,即使它看起来还不像。如果你不想用图像构造一个带有模型(u,x)+噪声的数组(100 * 100)

0 个答案:

没有答案