LM算法在相机标定的应用共有三处。

(1)单目标定或双目标定中,在内参固定的情况下,计算最佳外参。OpenCV中对应的函数为findExtrinsicCameraParams2。

(2)单目标定中,在内外参都不固定的情况下,计算最佳内外参。OpenCV中对应的函数为calibrateCamera2。

(3)双目标定中,在左右相机的内外参及左右相机的位姿都不固定的情况下,计算最佳的左右相机的内外参及最佳的左右相机的位姿矩阵。OpenCV中对应的函数为stereoCalibrate。

本文文阅读前提是你已经对LM(Levenberg-Marquardt)算法有足够的了解。因为本文主要是分析LM算法在相机标定中应用。

本文的分析是基于OpenCV的源码,所以可参见OpenCV的源码阅读此文。

0变量设置

设标定板上角点数为m,标定过程中拍摄n幅视图(对双目标定而言,左右相机各抓取n幅视图)。

关于相机的成像模型和畸变模型,我这里就不占空间了,详见OpenCV官方文档或相关论文。我用如下函数表示:

其中,(u,v)是像素坐标,(X,Y,Z)是世界坐标,R=(r1, R2, R3)T是旋转外参,T=(T1, T2, T3)T是平移外参,A=(fx, fy, cx, cy)T是投影内参,D=(k1, k2, p1,p2, k3, k4, k5, k6, s1, s2, s3, s4, a, b)T是畸变内参。

纵所周知,(u,v)是存在畸变的(后文称之为畸变坐标),我们用(uu,vv)表示(u,v)对应的非畸变的坐标(后文称之为标准坐标)。我们用findChessboardCorners提取的角点坐标就被当作是标准坐标。

1计算最佳外参

在内参固定的情况下,我们需要计算最佳外参。于是成像模型简化为:

对于m个角点则有如下方程:

其中(Xi, Yi, Zi)是已知项。计算雅可比矩阵如下:

由J可得J和JTJ。

若给定初值(R0, T0)则可得畸变角点序列uv=(u1,v1, u2,v2,…,um,vm)T。若findChessboardCorners获得的标准角点序列为uuvv=(uu1, vv1, uu2, vv2, …, um, vm)T,则误差序列为E=uv-uuvv。于是最终的方程为:

解方程后可得更精确的(R1, T1)=(R0, T0)-σ。

注意:以上可能与其它LM算法介绍有些差异。按大多数LM算法的介绍文档应是E=uuvv-uv, (R1, T1) = (R0, T0) +σ。不过仔细观察会发现最终结果其实一样的。我只不过是为了与OpenCV中源码对应才这样写的。

2计算最佳内外参

在内外参都不固定的情况下,成像模型应为:

与计算最佳外参不同。计算最佳外参是针对一幅视图,优化目标是使此幅视图的重投影误差最小。而计算最佳内外参,是针对多幅视图,优化目标是使所有视图的重投影误差之和最小。每幅视图有各自的外参,但共用相同的内参。所以每幅视图像上的角点仅对内参和各自的外参存在偏导,对其它视图的外参的偏导为0。于是雅可比矩阵为:

其中,Jini和Jexi是第i幅视图对内参和自身外观的雅可比矩阵。Jini是n×18矩阵(因为18个内参所以18列),Jexi是n×6矩阵(因为6个外参所以6列),所以J是(n*n)×(18+6*n)的矩阵。

可算得:

3计算最佳左右相机的内外参及最佳左右相机的位姿矩阵

此步骤中的优化参数是两相机间的位姿矩阵(R, T),两相机的内参(A1, D1, A2, D2)及左两机外参序列(R1i, T1i)。其中左相机的外参(R2i, T2i)=(RR1i, RT1i+T)。于是左相机每幅视图上的角点只对(A1, D1, Ri, Ti)有偏导,对其它参数的偏导为0。而右相机每幅视图上的角点只对(R, T, A2, D2, R1i, T1i)有偏导,对其它参数的偏导为0。其中,对(R, T, R1i, T1i)的偏导来源于对(R2i, T2i)的偏导。

lm opencv 算法_相机模型与标定(七)--LM算法在相机标定中的使用相关推荐

  1. 病虫害模型算法_基于深度学习的目标检测算法综述

    sigai 基于深度学习的目标检测算法综述 导言 目标检测的任务是找出图像中所有感兴趣的目标(物体),确定它们的位置和大小,是机器视觉领域的核心问题之一.由于各类物体有不同的外观,形状,姿态,加上成像 ...

  2. 模型算法_数据分析师,要懂多少算法模型?

    随着数据分析岗位招聘越来越内卷,问"你用过/建过什么模型"的也越来越多.这个问题很容易给人"面试造航母,工作拧螺丝"的感觉.实际工作中,真的要搞那么多模型??? ...

  3. xgboost算法_【模型篇】XGBoost模型

    XGBoost全称 "Extreme Gradient Boosting",陈天奇大佬提出来的梯度提升模型. Part A: 目标函数推导 目标函数的基本形式 模型对于某个样本的预 ...

  4. sgbm算法_关于双目立体视觉的三大基本算法及发展现状的总结

    作者:何文博 来源:公众号 @3D视觉工坊 链接:关于双目立体视觉的三大基本算法及发展现状的总结 双目立体视觉一直是机器视觉研究领域的发展热点和难点,"热"是因为双目立体视觉有着及 ...

  5. 中线提取算法_综述|线结构光中心提取算法研究发展

    摘 要: 线结构光扫描是三维重建领域的关键技术.光条纹中心提取算法是决定线结构光三维重建精度以及光条纹轮廓定位准确性的重要因素.本文详细阐述了光条纹中心提取算法的理论基础及发展历程,将现有算法分为三类 ...

  6. 蝴蝶优化算法_腾讯机智团队分享--AllReduce算法的前世今生

    从事分布式深度学习相关工作的同学,应该都频繁地用到了AllReduce(规约)操作. 图1 AllReduce的示意图 但是对于训练框架中集成的AllReduce相关操作,其背后实现的原理是什么? 除 ...

  7. 多目标优化算法_阿里提出多目标优化全新算法框架,同时提升电商GMV和CTR

    论文作者| Xiao Lin,Hongjie Chen 等 编译 | 吴少杰 编辑 | Natalie AI 前线导读: 在推荐系统中,多目标优化一直是热门话题,阿里针对推荐中的多目标优化问题提出了一 ...

  8. k means聚类算法_一文读懂K-means聚类算法

    1.引言 什么是聚类?我们通常说,机器学习任务可以分为两类,一类是监督学习,一类是无监督学习.监督学习:训练集有明确标签,监督学习就是寻找问题(又称输入.特征.自变量)与标签(又称输出.目标.因变量) ...

  9. zigzag算法_面经| 各大厂秋招算法工程师面经!你想了解的都在这里!

    转眼春招就快到啦! 小伙伴们是不是在为了进大厂 在紧锣密鼓的准备中呀! 网易.字节跳动.美团 各种大厂实习都已经开始啦 有没有一点点心动? 这不 ! 今天DAC君又给您带来的干货啦 各种大厂的秋招面经 ...

  10. 图像缩放算法_技术专栏|基于无人机LK光流算法的适用性及其优化方法探究

    点击上方蓝字关注我们 问题描述 ◆ ◆ ◆ 一般的LK光流算法存在一个比较明显的局限性.我们知道,一般的LK光流算法必须包含三个假设: (1)亮度恒定: (2)时间连续或者运动是小运动: (3)空间一 ...

最新文章

  1. Anaconda中pytorch环境搭建(包括详细的虚拟环境创建,以及虚拟环境中jupyter notebook的使用)
  2. Qt最新版5.12在Windows环境静态编译安装和部署的完整过程(VS2017)
  3. 亚马逊瞄准大数据 欲在汽车行业抢占一席之地
  4. urlScan 配置阻止sql注入
  5. C/C++编程的一些技巧
  6. 一文搞懂负载均衡中的一致性哈希算法
  7. 2020年物联网网络容量至少是目前的1000倍
  8. 很多想法、很多感慨。
  9. Website for the introduction to Matlab and Java
  10. 接入amazon avs_每日新闻综述:亚马逊将互联网接入推向全球的宏伟计划
  11. Linux部署oracle11g,linux环境下部署Oracle11g
  12. 使用 Swift 在 iOS 10 中集成 Siri —— SiriKit 教程(Part 1)
  13. Flutter: MobX和flutter_mobx状态管理器
  14. 三洋p6系列伺服电机说明书_苏州发那科伺服电机修理刹不住
  15. java 聊天室 私聊_使用socket实现网络聊天室和私聊功能
  16. PuTTY key format too new怎么解决?
  17. HTML制作手风琴效果,纯js+html和纯css+html制作手风琴效果,css手风琴
  18. 补充(二)古典密码两张思维导图速通
  19. 从首个IMO季军谈起 作者 : 付云皓
  20. 实战 | OpenCV如何将不同轮廓合并成一个轮廓(附Python / C++源码)

热门文章

  1. VSCode 如何支持 Flow
  2. C#LeetCode刷题之#225-用队列实现栈(Implement Stack using Queues)
  3. php 三元预算? :_项目预算:一种反模式
  4. 音速索尼克 怪人_如何使用AI玩刺猬索尼克。 真干净!
  5. raspberry pi_使用Raspberry Pi和GPIO引脚控制外部LED
  6. 计算机科学与软件工程-哪个专业最适合您?
  7. Centos命令与Vim命令的学习记录
  8. Python网络爬虫和正则表达式学习总结
  9. Python解决滑块验证码
  10. 花了一周整理的,这是价值10W的32个Python项目!