看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VS2008 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) opencv 問題(Question): 我想對一些資料進行curve fittingu,首先我使用一般的LSE方法去fit curve function 使用 y=a*exp(-1*pow((x-b)/c,2)) 只是這樣的精確度不是太高,所以現在想改用2個guass function來fit 不過兩個高斯function,就不太容易轉成多項式 所以現在想使用opencv的CvLevMarq來fit,但是苦於看不懂如何使用 假設我有input X, output Y 長度n curve function y=a1*exp(-1*pow((x-b1)/c1,2))+a2*exp(-1*pow((x-b2)/c2,2)) 6個係數 請教若以這些資料來進行curve fitting的話,我要如何在CvLevMarq上應用 ps.我知道使用高階的多項式可以讓精度高一點,只是想學習一下opencv的用法 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.163.151.118 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1439459331.A.E2E.html
Feis: 所以你知道 Levenberg–Marquardt 在幹嘛嗎? 08/13 18:26
Feis: Wiki 講的你都知道了 ? 08/13 18:26
Feis: 如果知道的話應該就是用 update 迭代而已 08/13 18:36
wohc: 大概知道,就是一直修正誤差直到最佳化 08/13 22:48
wohc: 本來想自己寫的,無奈腦袋不好看了兩天還不是很懂 08/13 22:48
wohc: 只好先用opencv來試試看 08/13 22:51
Feis: 那 Jacobian 會填嗎? 08/13 22:52
wohc: 會的,之前有試過自己寫GaussNewton 08/13 22:53
Feis: 那你還缺甚麼? 08/13 23:10
Feis: 或者你看一下 stitching 裡面怎麼用的? 08/13 23:13
Feis: https://goo.gl/3wYjuw 209 行? 08/13 23:14
wohc: 我主要是想知道參數接口代表的意義 08/13 23:17
Feis: 文件不是有寫? 就目前的位置跟 Jacobian 還有目前的誤差 08/13 23:19
Feis: (你要 fit 的參數們, Jacobian, 目前的誤差們) 08/13 23:20
wohc: 嗯,謝謝,我明天再試看看。最終目的我還是得自己寫一個出來 08/13 23:22
Feis: 要 fit 的參數你的例子就是 a1, b1, c1, a2, b2, c2 08/13 23:22
Feis: 誤差們就看你有幾個資料點就有幾個誤差 08/13 23:23
wohc: 謝謝,update()的我大概知道,CvLevMarq solver(),這裡頭的 08/13 23:26
Feis: 裡面的你用不到阿? @@ 08/13 23:26
wohc: 三個參數? 該為何? param 是我要先自行定義一組初始值嗎? 08/13 23:27
Feis: 沒錯啊. 這是 LM 阿阿阿. 初始值最重要. 重開 Wiki ~ 08/13 23:28
wohc: 了解,明天再試看看了。其實我很想call matlab就一了百了 08/13 23:30
Feis: 就 call 阿. 這種事情我也做過 08/13 23:31
Feis: 另一個選擇是 sparseLM 08/13 23:31
wohc: 只是因為某種因素,只能自己寫一個出來 08/13 23:31
Feis: 原理很簡單. 但是不好刻. sprase 的會想自殺 08/13 23:32
wohc: 高斯牛頓比較簡單,只是效果不是很好 (Jt*J).inv*Jt*r 08/13 23:35
Feis: 感覺 dense 難度差不多阿. 08/13 23:36
Feis: 就是一堆矩陣相乘而已. 效率瓶頸 08/13 23:37
wohc: 難度就差在我一個寫得出來一個寫不出來 08/13 23:37
Feis: 本質上就是多乘上一個 Jacobian 的轉置而已 08/13 23:38
Feis: 只是牛頓法可以當作沒矩陣這回事 08/13 23:39