2D плоскость подходит, как параметризовать?
Я пытаюсь подобрать плоскость, которая имитирует фон изображения. Я делаю это с помощью scipy.optimize.least_squares. Я следую рецепту отсюда: http://scipy-cookbook.readthedocs.io/items/FittingData.html (прокрутите до середины страницы: Подгонка 2D гауссовского)
Если я правильно понимаю их код, то можно указать их параметры в функции:
def Guassian(data):
params = moments(data)
errorfunction = lambda p: np.ravel(gaussian(*p)(*np.indices(data.shape))-data)
сгладив их 2D-массив с помощью np.ravel().
Мой вопрос, как это возможно? Если я делаю то же самое, я получаю хорошо сходящуюся подгонку, но я могу поменять свои x 1 и x[2] и все еще получить ту же самую точную подгонку (- что совершенно логично, если вы посмотрите на мою реализованную модель.) Так что же я здесь делаешь неправильно?
Я следовал их коду с пометкой http://docs.scipy.org/doc/scipy/reference/tutorial/optimize.html Наименьших квадратов:
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: среднее значение = 0,00377306499016 среднее значение X = 0,00377306499016 среднее значение Y =0,00377306499016. Изображение, возвращаемое функцией regionOfIntrest getROI(image,...):
[Есть причины для подгонки самолета, хотя он пока не выглядит так. Если вы не хотите возиться с изображением, создайте массив (100*100) с моделью (u,x)+noise]