镜头畸变模型与校正模型

Posted

技术标签:

【中文标题】镜头畸变模型与校正模型【英文标题】:Lens distortion model vs correction model 【发布时间】:2016-09-23 23:56:02 【问题描述】:

lens model in OpenCV 是一种扭曲模型,它将理想位置扭曲到相应的真实(扭曲)位置:

x_corrected = x_distorted (1 + k_1 * r^2 + k_2 * r^4 + ...), y_corrected = y_distorted (1 + k_1 * r^2 + k_2 * r^4 + ...),

其中 r^2 = x_distorted^2 + y_distorted^2 在标准化图像坐标中(为简单起见,省略了切向失真)。这也可以在 Z. Zhang:“A Flexible New Technique for Camera Calibration”中找到,TPAMI 2000 以及 Bouguet 的“Camera Calibration Toolbox for Matlab”。

另一方面,Bradski 和 Kaehler:“Learning OpenCV”在第 376 页介绍了镜头模型作为校正模型,它将扭曲的位置校正到理想位置:

x_distorted = x_corrected (1 + k'_1 * r'^2 + k'_2 * r'^4 + ...), y_distorted = y_corrected (1 + k'_1 * r'^2 + k'_2 * r'^4 + ...),

其中 r'^2 = x_corrected^2 + y_corrected^2 在归一化图像坐标中。 Hartley 和 Zisserman:“计算机视觉中的多视图几何”也描述了这个模型。

我了解校正和失真模型在实践中各有利弊。例如,前者使检测到的特征点位置的校正变得容易,而后者使整个图像的不失真变得简单。

我的问题是,为什么它们共享相同的多项式表达式,而它们应该是彼此的逆?我可以找到this document 评估可逆性,但我不清楚它的理论背景。

感谢您的帮助。

【问题讨论】:

您可能希望提供有关这两种方法的更多详细信息,这样我们就不必搜索 5 篇论文和书籍来查找您所谈论的内容。一般来说,这两种方法都有相同的目标。它们校正相同的光学像差。因此我希望他们共享相同或非常相似的多项式 感谢您的评论。我已经添加了方程式。 【参考方案1】:

我认为简短的回答是:它们只是不同的模型,所以它们不应该是彼此的倒数。就像你已经写的那样,每个都有自己的优点和缺点。

至于可逆性,这取决于多项式的阶数。二阶(二次)多项式很容易反转。 4 阶需要更多的工作,但仍然可以在分析上反转。但是,一旦您添加了一个 6 阶项,您可能不得不求助于数值方法来求逆,因为在一般情况下,5th-order or higher polynomial 在分析上是不可逆的。

【讨论】:

非常感谢您的回答。我同意它们是不同的模型,即使它们显然具有相同的结构。【参考方案2】:

根据泰勒展开式,世界上每个公式都可以写成 c0 + c1*x + c2*x^2 + c3*x^3 + c4*x^4... 目标只是发现常数。 在我们的特定情况下,表达式必须在 x 和 -x(偶函数)中对称,因此 x、x^3、x^5、x^7 中的常数等于 0。

【讨论】:

以上是关于镜头畸变模型与校正模型的主要内容,如果未能解决你的问题,请参考以下文章

如何利用opencv计算图像畸变系数,并进行校正与摄像机标定?

相机标定中镜头的畸变系数是否必须小于1

OpenCV相机标定与畸变校正

我在这个镜头畸变校正程序中不断得到一张白色的照片

matlab能不能实现图像的几何校正?例如枕形或桶形畸变

双摄像头立体成像-畸变矫正与立体校正