机器视觉【3】非线性求解相机几何参数

这篇具有很好参考价值的文章主要介绍了机器视觉【3】非线性求解相机几何参数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

线性求解相机几何参数的缺点

上一章节介绍学习了(DLT)线性求解相机几何参数,了解到线性求解法当中比较明显的缺点:

  • 没有考虑到镜头畸变的影响
  • 不能引入更多的约束条件融入到DLT算法当中优化
  • 最关键的是,代数距离并不是计算相机矩阵的最佳距离函数

基于以上问题点,提出非线性求解方法。

  • 将包括镜头畸变参数、内外参矩阵等所有信息都当做待求解
  • 定义一个比代数距离更好的距离函数
  • 通过迭代的非线性最优化算法,最优化上述距离函数,从而得到待求解

在《计算机视觉中的多视角几何》的第7.2节中,用一个插图来说明了线性求解出来的代数距离的几何意义。可以看见,代数距离实际上优化的是已知的3D点X和2D点Xi的反投影点Xi'之间的距离。这并不是一个最优的距离函数。

机器视觉【3】非线性求解相机几何参数,# 机器视觉,三维重建基础,非线性求解相机几何参数,张正友标定法

下面我们来看看几何距离,这里假设3D点的位置是准确的(比如我们有一个制作得非常精确的标定板),如下图所示。那么几何距离就是3D点Xi通过投影矩阵投影的2D点xi'和实际成像的2D点xi之间的距离(下图中的红线段)

机器视觉【3】非线性求解相机几何参数,# 机器视觉,三维重建基础,非线性求解相机几何参数,张正友标定法

用公式表达式如下所示,整个优化过程就变成了最小化这个距离的过程,如(2)式

机器视觉【3】非线性求解相机几何参数,# 机器视觉,三维重建基础,非线性求解相机几何参数,张正友标定法

结合之前在 相机的成像(畸变)模型 中的数学模型,式子(2)又可以演变为如下的式子(3)

机器视觉【3】非线性求解相机几何参数,# 机器视觉,三维重建基础,非线性求解相机几何参数,张正友标定法

为了执行这个最优化的过程,需要给相机矩阵及畸变参数初始值。其中P的初始值可以用第一节所讲述的DLT算法得到。而畸变参数的初值可以先设置为0。 

张正友标定法的实现和完整的过程

在相机几何标定的各种算法中,最出名的无疑是张正友博士发明的“张氏标定法”,这个算法在整个业界得到了广泛的应用,它最大的特点就是灵活、鲁棒、低成本。整个标定过程只需要用相机在不同的方向拍摄平面标定板(最少两次),而它实际上的核心思想就是我上面描述的非线性优化求解方法。

在Matlab和OpenCV中都有张氏标定法的实现,具体使用时先准备好一个足够平整的棋盘格标定板,然后通过不同的方向对标定板进行拍摄,然后进行计算。不需要提前知道相机和标定板之间的具体位姿关系,每次拍摄时的相机和标定板的位姿变换也是独立的,整个使用过程非常友好。

机器视觉【3】非线性求解相机几何参数,# 机器视觉,三维重建基础,非线性求解相机几何参数,张正友标定法

在Matlab中,把上面这些图像输入算法,算法会自动检测出棋盘格角点,并利用前面说的方法优化出各项参数,如果某幅图的平均投影误差超出了用户设置的阈值,还可以方便的过滤掉这幅图来重新进行优化计算。甚至还可以可视化每次拍摄时相机和标定板的位姿,非常方便。

机器视觉【3】非线性求解相机几何参数,# 机器视觉,三维重建基础,非线性求解相机几何参数,张正友标定法

下面简单介绍张正友标定法的关键知识要点。

要点1:引入新的约束条件,从而可以采用平面标定板替代立体标定板

之前讲过标定板需要是立体的,否则无法唯一确定相机矩阵。 然而,立体的标定板是较难去制作的,张氏标定法追求的是低成本的标定方式,因此采用了多次拍摄平面标定板的方式来执行标定。而正因为是多次拍摄,所以每次拍摄时相机矩阵都是变化的,之前讲解的约束条件不再适用:

机器视觉【3】非线性求解相机几何参数,# 机器视觉,三维重建基础,非线性求解相机几何参数,张正友标定法

因此,张氏标定法重新寻求了新的约束条件,用于对内参矩阵进行约束,进而进行求解。作者观察到平面板上的点和对应的像点之间可以用一个单应矩阵H关联在一起,而且只要平面板上的角点足够多(单应矩阵有8个自由度,一对点提供2个约束,所以理论上超过4个即可),就可以求出这个单应矩阵,求解方法类似于上一节所介绍的DLT方法;或者之前学习过的 几何变换模型 中的透视模型,利用最小二乘法求解。

接下重点:作者将单应矩阵表达为H,并观察到内参矩阵K和单应矩阵之间存在着一对约束关系。

机器视觉【3】非线性求解相机几何参数,# 机器视觉,三维重建基础,非线性求解相机几何参数,张正友标定法

怎么理解上面的两个等式?回想 机器视觉【1】相机的成像(畸变)模型 整合:世界坐标系→像素坐标系的知识点

机器视觉【3】非线性求解相机几何参数,# 机器视觉,三维重建基础,非线性求解相机几何参数,张正友标定法

这里的λ只是1/s的另一种表示,只是换了一种写法

机器视觉【3】非线性求解相机几何参数,# 机器视觉,三维重建基础,非线性求解相机几何参数,张正友标定法

这里有人会不理解,r1=和r2=是怎么来的?其实自己可以推导一下,把A设成[3X3]的矩阵,乘进去,应该能够看到,组成了[Ar1 Ar2 Ar3],它们互相还是独立的。至于为什么A到A逆,这个是线性代数最基本的转换,左右同时左乘A逆,就变过来了。

这里的A其实就是内参矩阵K,上面两个式子其实不难证明 (以下 A' 为 矩阵A的逆 即上图示的A-1)

由前置知识:A'H = A' · λ · A · [r1 r2 t​] = [r1 r2 t​],λ是常数可暂时忽略

根据线性代数基本规律:(AB)T = BT · AT 即 矩阵A和B相乘之后的转置等于B的转置乘A的转置

那么:(h1)T​ * (A)−T * (A)−1 * h2​ = r1T * ​r2​ = 0    

第一个公式证得r1和r2是正交的关系。

对第二个式子左右两边进行上述变换,得 r1T * ​r1 = r2T * ​r2,由此可知 r1和r2是单位正交。

最后,我们把上述的两个式子中间 (K)-T*(K)-1的部分记作B,其余h部分利用线性基础变换写出另外一部分。即如下表示

机器视觉【3】非线性求解相机几何参数,# 机器视觉,三维重建基础,非线性求解相机几何参数,张正友标定法

这样,我们又可以用SVD奇异值分解的方式,求得b,进而求得K的各个元素。当求得了K之后,就很容易得到这一次拍摄时的外参信息(旋转R和平移t)了。上面讲的方法用于初始化内参矩阵K和每次拍摄的外参R和t,我们假设一共进行n次拍摄,每次拍摄可以获得m个成像点,那么就可以利用非线性最优化方法,来最优化待解参数了。具体表达式如下: 

机器视觉【3】非线性求解相机几何参数,# 机器视觉,三维重建基础,非线性求解相机几何参数,张正友标定法

要点2:在多次拍摄时,需要改变标定板的方向

在张博士的论文中详述了如果两次拍摄时的标定板是平行的,那么实际上并没有提供额外的信息,也因此无法求解出需要的参数。

要点3:最少需要拍摄几幅图?

前面讲到,每一幅拍摄的标定板图像提供了2个对内参矩阵K的约束,而我们内参矩阵K一共有5个未知参数,所以理论上至少需要拍摄3幅图像,才能求得K:

机器视觉【3】非线性求解相机几何参数,# 机器视觉,三维重建基础,非线性求解相机几何参数,张正友标定法

如果我们认为s=0,即传感器像素是规整方形的,那么内参矩阵就只有4个未知参数了,这样就只需要拍摄两幅图像就能进行标定了。

前面讲过,这样的约束关系是为了求得比较好初始化内参矩阵K的。如果你能够事先知道K中元素的大概值,比如你认为s=0, 主点位于图像的中心, 而焦距又是已知的,那么理论上你只需要拍摄一幅平面的标定板一次,就可以通过非线性最小二乘法标定出相机的内外参数。

Reference:

张正友相机标定全解析_定焦相机张正友标定法怎么用-CSDN博客

相机标定(具体过程详解)张正友、单应矩阵、B、R、T_已知内参数下标定r、t-CSDN博客

总结

前文和本文中讲解了相机标定的两大类方法:线性求解方法,以及非线性求解方法。

不管是哪种方法,我都提到了数据归一化的重要性,因为在求解过程中的矩阵元素如果不经过归一化,值差异较大,很容易放大数值误差,需要特别注意这点。经过相机的标定,我们就可以获得了包括畸变参数在内的相机内参,以及每次拍摄时的外参。

博主我的自述:

说实话,之前是知道这一块比较复杂,但没想过是这么复杂。现实接触的情况都是用现成的库或者软件工具一键处理,这次花力气去理解算是 "拨开云雾见天日,守得云开见月明",新的一年祝大家工作顺利,万事如意,大家加油!文章来源地址https://www.toymoban.com/news/detail-833278.html

到了这里,关于机器视觉【3】非线性求解相机几何参数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 【数学建模】Python+Gurobi求解非线性规划模型

    目录 1 概述 2 算例  2.1 算例 2.2 参数设置 2.3 Python代码实现 2.4 求解结果 如果目标函数或约束条件中包含非线性函数,就称这种规划问题为非线性规划问题。 参考:(非线性规划Python)计及动态约束及节能减排环保要求的经济调度 2.1 算例 2.2 参数设置 求解NLP/非凸问题时,

    2024年02月09日
    浏览(10)
  • matlab实现牛顿迭代法求解非线性方程

    非线性方程是指含有未知数的方程,且方程中至少有一个未知数的次数大于一或者含有非一次幂的函数(如指数、对数、三角函数等)。例如,$f(x) = x^3 - 2x - 5 = 0$就是一个非线性方程。非线性方程通常没有显式的解析解,因此需要使用数值方法来近似求解。 牛顿迭代法(N

    2024年02月11日
    浏览(16)
  • 详细介绍如何使用Ipopt非线性求解器求解带约束的最优化问题

    详细介绍如何使用Ipopt非线性求解器求解带约束的最优化问题

       本文中将详细介绍如何使用Ipopt非线性求解器求解带约束的最优化问题,结合给出的带约束的最优化问题示例,给出相应的完整的C++程序,并给出详细的解释和注释,以及编译规则等    一、Ipopt库的安装和测试    本部分内容在之前的文章《Ubuntu20.04安装Ipopt的流程介

    2024年02月08日
    浏览(17)
  • 二次规划(QP)求解与序列二次规划(SQP)求解非线性规划问题

    二次规划(QP)是求解一种特殊的数学优化问题的过程——具体地说,是一个(线性约束)二次优化问题,即优化(最小化或最大化)多个变量的二次函数,并服从于这些变量的线性约束。二次规划是一种特殊的非线性规划。        序列二次规划(SQP,Sequental Quadratic Programming)算法是

    2024年02月02日
    浏览(7)
  • MATLAB 之 非线性方程数值求解、最优化问题求解和常微分方程初值问题的数值求解

    MATLAB 之 非线性方程数值求解、最优化问题求解和常微分方程初值问题的数值求解

    非线性方程的求根方法很多,常用的有牛顿迭代法,但该方法需要求原方程的导数,而在实际运算中这一条件有时 是不能满足的,所以又出现了弦截法、二分法等其他方法。 在 MATLAB 中,非线性方程的求解和最优化问题往往需要调用最优化工具箱来解决。优化工具箱提供了一

    2024年02月08日
    浏览(14)
  • 节点不连续伽辽金方法在求解线性和非线性平流方程中的一维实现(Matlab代码实现)

    节点不连续伽辽金方法在求解线性和非线性平流方程中的一维实现(Matlab代码实现)

     💥💥💞💞 欢迎来到本博客 ❤️❤️💥💥 🏆博主优势: 🌞🌞🌞 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️ 座右铭: 行百里者,半于九十。 📋📋📋 本文目录如下: 🎁🎁🎁 目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码实现 本文提

    2024年02月12日
    浏览(9)
  • 牛顿(Newton)迭代法求解非线性方程以及方程组的Matlab实现

    牛顿(Newton)迭代法求解非线性方程以及方程组的Matlab实现

    必做题目比较简单,写得有些随意,主要还是第二个拓展题目的难度比较高 传入题设数据有: 另附运行截图  

    2024年02月11日
    浏览(17)
  • 自学SLAM(8)《第四讲:相机模型与非线性优化》作业

    自学SLAM(8)《第四讲:相机模型与非线性优化》作业

    小编研究生的研究方向是视觉SLAM,目前在自学,本篇文章为初学高翔老师课的第四次作业。 现实⽣活中的图像总存在畸变。原则上来说,针孔透视相机应该将三维世界中的直线投影成直线,但是当我们使⽤⼴⾓和鱼眼镜头时,由于畸变的原因,直线在图像⾥看起来是扭曲的

    2024年02月05日
    浏览(9)
  • 【Python机器学习】SVM——线性模型与非线性特征

    【Python机器学习】SVM——线性模型与非线性特征

    SVM(核支持向量机)是一种监督学习模型,是可以推广到更复杂模型的扩展,这些模型无法被输入空间的超平面定义。 线模型在低维空间中可能非常受限,因为线和平面的灵活性有限,但是有一种方式可以让线性模型更加灵活,那就是添加更多特征,比如输入特征的交互式或

    2024年01月21日
    浏览(14)
  • 【Matlab算法】L-M法求解非线性最小二乘优化问题(附L-M法MATLAB代码)

    博主 一头小山猪 目前已开放所有文章:小山猪——经典算法专栏 活动地址:CSDN21天学习挑战赛 L-M法 (Levenberg-Marquardt法)原理 当矩阵 ( J k ) T J k left(J_{k}right)^{T} J_{k} ( J k ​ ) T J k ​ 为病态矩阵时,用G-N算法可能得不到正确的解,甚至当 ( J k ) T J k left(J_{k}right)^{T} J_{k} ( J

    2024年02月02日
    浏览(16)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包