Как подогнать модель под изображение в Python - PullRequest
0 голосов
/ 23 ноября 2018

У меня проблемы с функцией Scipy Curve_fit, и мне было интересно, знает ли кто-нибудь, что я могу с этим сделать.Я работаю над симуляцией и хочу найти способ оптимизировать его параметры для «реального» тестового изображения.

Band = Simulation(fname, other_params)

Здесь Band - это переменная типа класса, которая помогает мне запускать симуляции.Следующая функция является оберткой для реального моделирования, по сути, важно, чтобы она возвращала массив 1d, который является просто сплющенным изображением.

def wrapper(xy, X_off, Y_off):
    Image = Band.weight(201,757,5000,5000, fill_length=7, offset_X = X_off, offset_Y = Y_off, rand_tup=(300,0,2000))
    print X_off, Y_off
    return Image.flatten()

Ниже я устанавливаю некоторые начальные параметры для X_off, Y_off (X/ Y смещения, где X и Y - квазикартова сетка, основанная на положении спутника).Я также импортирую «реальное» изображение, которое я буду использовать в качестве зависимой переменной - по сути, я прошу эту программу выложить оптимальные параметры, чтобы при симуляции получалось максимально приближенное к этому «реальному» изображение.

p0 = [-14,4]
Real_image = Band.Im[some_range]

Обратите внимание, что в моей функции-обертке определено 'xy'.Это на самом деле довольно бесполезно, это только там, так что я могу сказать, что у меня есть независимая переменная - в действительности я не имею!Симуляция на самом деле не имеет независимой переменной, но я все еще хочу найти способ оптимизировать ее и подумал, что это сработает.

xy = np.zeros(10)

optimal_params,  covariance = curve_fit(wrapper, xy, F1_portion.flatten(), p0)

Результаты последней строки всегда таковы, что optim__params невероятно похожи напервоначальное предположение p0, возможно, на небольшое количество.При ближайшем рассмотрении кажется, что алгоритм совсем не сильно меняет параметры.Я хочу, чтобы он изменял параметры, по крайней мере, целочисленными шагами, и я не уверен, как я могу помочь в этом.

По сути, я почти всегда получаю свои исходные параметры, возвращаемые мне.Это проблема с алгоритмом или моим кодом?Есть ли другой алгоритм, который я могу использовать, чтобы найти оптимальные параметры?

Спасибо

...