我讀的功能solvePnP()
的源代碼在OpenCV中,當flags
PARAM使用默認值SOLVEPNP_ITERATIVE
,它調用cvFindExtrinsicCameraParams2
,其中首先使用DLT算法(如果我們有3D點的非平面集)來初始化6DOF相機姿態,並且SECOND使用CvLevMarq solver
來最小化重投影誤差。爲什麼直接線性變換(DLT)不能給出最佳的相機extrinsics?
我的問題是:DLT將問題描述爲線性最小二乘問題並用SVD分解來解決問題,這似乎是一個最優解,爲什麼我們仍然使用Lev-Marq迭代方法?
或者,DLT算法的問題/侷限性是什麼?爲什麼封閉形式的解決方案導致成本函數的最小值爲LOCAL?
我認爲通常會對迭代地完成外部估計的某種非線性細化添加額外的步驟。看到這裏:http://www.epixea.com/research/multi-view-coding-thesisse9.html – Dan
@Dan thx爲您的鏈接,我知道這是常見的,就像'CvLevMarq'求解器在opencv中做的一樣。我的意思是,DLT似乎是一種**成本函數的閉形式最小化**,爲什麼它仍然較差(局部最小值)? – zhangxaochen