[問題] opencv CvLevMarq使用方式

看板C_and_CPP (C/C++)作者 (出征)時間10年前 (2015/08/13 17:48), 編輯推噓0(0032)
留言32則, 2人參與, 最新討論串1/1
開發平台(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

08/13 18:26, , 1F
所以你知道 Levenberg–Marquardt 在幹嘛嗎?
08/13 18:26, 1F

08/13 18:26, , 2F
Wiki 講的你都知道了 ?
08/13 18:26, 2F

08/13 18:36, , 3F
如果知道的話應該就是用 update 迭代而已
08/13 18:36, 3F

08/13 22:48, , 4F
大概知道,就是一直修正誤差直到最佳化
08/13 22:48, 4F

08/13 22:48, , 5F
本來想自己寫的,無奈腦袋不好看了兩天還不是很懂
08/13 22:48, 5F

08/13 22:51, , 6F
只好先用opencv來試試看
08/13 22:51, 6F

08/13 22:52, , 7F
那 Jacobian 會填嗎?
08/13 22:52, 7F

08/13 22:53, , 8F
會的,之前有試過自己寫GaussNewton
08/13 22:53, 8F

08/13 23:10, , 9F
那你還缺甚麼?
08/13 23:10, 9F

08/13 23:13, , 10F
或者你看一下 stitching 裡面怎麼用的?
08/13 23:13, 10F

08/13 23:14, , 11F
08/13 23:14, 11F

08/13 23:17, , 12F
我主要是想知道參數接口代表的意義
08/13 23:17, 12F

08/13 23:19, , 13F
文件不是有寫? 就目前的位置跟 Jacobian 還有目前的誤差
08/13 23:19, 13F

08/13 23:20, , 14F
(你要 fit 的參數們, Jacobian, 目前的誤差們)
08/13 23:20, 14F

08/13 23:22, , 15F
嗯,謝謝,我明天再試看看。最終目的我還是得自己寫一個出來
08/13 23:22, 15F

08/13 23:22, , 16F
要 fit 的參數你的例子就是 a1, b1, c1, a2, b2, c2
08/13 23:22, 16F

08/13 23:23, , 17F
誤差們就看你有幾個資料點就有幾個誤差
08/13 23:23, 17F

08/13 23:26, , 18F
謝謝,update()的我大概知道,CvLevMarq solver(),這裡頭的
08/13 23:26, 18F

08/13 23:26, , 19F
裡面的你用不到阿? @@
08/13 23:26, 19F

08/13 23:27, , 20F
三個參數? 該為何? param 是我要先自行定義一組初始值嗎?
08/13 23:27, 20F

08/13 23:28, , 21F
沒錯啊. 這是 LM 阿阿阿. 初始值最重要. 重開 Wiki ~
08/13 23:28, 21F

08/13 23:30, , 22F
了解,明天再試看看了。其實我很想call matlab就一了百了
08/13 23:30, 22F

08/13 23:31, , 23F
就 call 阿. 這種事情我也做過
08/13 23:31, 23F

08/13 23:31, , 24F
另一個選擇是 sparseLM
08/13 23:31, 24F

08/13 23:31, , 25F
只是因為某種因素,只能自己寫一個出來
08/13 23:31, 25F

08/13 23:32, , 26F
原理很簡單. 但是不好刻. sprase 的會想自殺
08/13 23:32, 26F

08/13 23:35, , 27F
高斯牛頓比較簡單,只是效果不是很好 (Jt*J).inv*Jt*r
08/13 23:35, 27F

08/13 23:36, , 28F
感覺 dense 難度差不多阿.
08/13 23:36, 28F

08/13 23:37, , 29F
就是一堆矩陣相乘而已. 效率瓶頸
08/13 23:37, 29F

08/13 23:37, , 30F
難度就差在我一個寫得出來一個寫不出來
08/13 23:37, 30F

08/13 23:38, , 31F
本質上就是多乘上一個 Jacobian 的轉置而已
08/13 23:38, 31F

08/13 23:39, , 32F
只是牛頓法可以當作沒矩陣這回事
08/13 23:39, 32F
文章代碼(AID): #1Lp6W3uk (C_and_CPP)
文章代碼(AID): #1Lp6W3uk (C_and_CPP)