1

我想了解OpenCV的cv :: undisortPoints()迭代近似算法背後的邏輯。OpenCV - cv :: undistortPoints() - 迭代算法解釋

實現可在: https://github.com/Itseez/opencv/blob/master/modules/imgproc/src/undistort.cpp(行361-368)。

我看到它的方式:

  • 使用最後一個最好的猜測像素位置(X,Y),試圖通過「以當前最好的猜測失真」運用逆找到更好的猜測,並調整像素在考慮到初始位置扭曲(X0,Y0)
  • 使用初始扭曲位置(X0,Y0)作爲第一個「最好的猜測」

但上面的位置並沒有真正告訴爲什麼這可以做...

其中一個發佈的用戶(這裏是:Understanding of openCV undistortion)這是一種「非線性求解算法(例如, 。牛頓法,Levenberg-Marquardt算法等)」,並從我所看到的有這類undistorting問題,至少有幾個可能的解決方案


問題:

  • 什麼迭代算法正是在CV :: undistortPoints()來實現?
    • 有沒有表現出任何白皮書(和[什麼是更重要的是解釋「就像我五」),它背後的想法?
  • 我們怎麼知道這個算法會收斂(至少到局部最小值)呢?
  • 爲什麼我們要對初始位置(x0,y0)進行修正?

回答

0

它使用false position(「regula falsi」)方法。無論失真參數的選擇如何(甚至對於「物理可信」參數的每一種選擇),我都沒有看到證明該序列收斂於該特定方程。在一些特殊情況下編寫一個例子非常容易,例如物理純二階桶形失真。

在實踐中,它似乎運作良好。如果您覺得不舒服,您可以隨時用您選擇的方程解算器進行替換。對於任何順序的純粹的徑向畸變(即,具有單個未知),可以使用任何多項式方程求解器,例如,好的舊SLATEC的rpqr79