2014-05-15 40 views
3

我有一張圖片,我在其中選取一個randow行並嘗試在該行中擬合高斯曲線。我正在使用scipy.optimize curve_fit方法擬合高斯。RuntimeError:找不到最佳參數:函數調用次數達到maxfev = 800

根據數組向量選擇randow行[10,20,40,60,100],這意味着在第一次嘗試中,我會在該圖像中選擇10個randow行(因此爲10高斯擬合),然後,更多的行被選中等等。

大部分時間,代碼正在工作,但是,有時候我會得到一個錯誤(尤其是當行數很大時:大約在60或更多),這就是說找不到最優參數

我發現了一些類似的帖子在stackoverflow但仍不能解決這個問題。似乎這個問題經常出現在curve_fit方法

回答

4

激光束,有沒有機會? ;-)

無論如何,問題可能是由於scipy's curve_fit函數,所選的行很難適應高斯曲線。我的第一個建議是調試(使用例如python的logging模塊)來查看錯誤是否僅在特定行上彈出。

我的第二個建議是爲curve_fit更改初始猜測。從可以進行曲線擬合的行中,您應該能夠提取幾個參數。在其他行上,高斯的平均值在大致相同的位置,並且適應度也不會變化很大。一個好的初步猜測肯定會有助於曲線擬合。

如果你想分析問題,我肯定會這樣做:嘗試找到800次迭代後曲線擬合失敗的行。然後通過更改初始猜測來查看曲線擬合是否有效。

+0

您可以使用signal.argrelmax找到局部最大值,這是高斯中心的良好候選者 – Davidmh

+0

* Arghhh該死的激光束...!* –

相關問題