Подгонка к плоскости 2D, как параметризовать?

#python #scipy #least-squares

#python #scipy #метод наименьших квадратов

Вопрос:

Я пытаюсь подогнать плоскость, которая имитирует фон изображения. Я делаю это с помощью 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)

путем выравнивания их 2D-массива с помощью np.ravel().

Мой вопрос в том, как это возможно? Если я сделаю то же самое, я получу хорошую сходящуюся подгонку, но я могу поменять местами свои x1 и 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, …), является: введите описание изображения здесь

[Есть причины для подгонки плоскости, даже если она пока не выглядит так. Если вы не хотите возиться с изображением, создайте массив (100 * 100) с моделью (u, x) шум]