计算机视觉(相机标定)- 2.1 摄像机标定

  • 学习前言
  • 一、 摄像机标定是啥?为什么要进行摄像机标定?
  • 二、求MMM
    • 问题一:求解投影矩阵需要多少对应点?
    • 问题二:怎么算?
  • 二、求MMM中的摄像机的内外参数
    • 1)内参数
    • 2)外参数
    • 3)小结
  • 三、补充

学习前言

  进入摄像机标定啦~这些知识还是蛮重要的,在后面的图像预处理编程还是需要这些知识的。

一、 摄像机标定是啥?为什么要进行摄像机标定?

  在前面两篇博客中我们明白了摄像机将世界坐标系PwP_wPw​的物体映射到图像(像素)坐标系P′P'P′的原理以及表示他们关系的投影矩阵MMM。
  其中投影矩阵MMM是有相机的内部参数和外部参数所决定了,而我们这一篇的内容就是想办法通过像素图片求得投影矩阵MMM。——这就是摄像机标定。
  为什么要进行摄像机标定?我们用摄像机拍摄物体的时,图像会发生畸变,而我们通过摄像机标定求得了摄像机的投影矩阵MMM,同时也得到了摄像机的内部参数和外部参数,那我们就可以利用这些参数对畸变的图片进行校正。比如:

  摄像机标定的应用还有很多很多。ヾ(゚∀゚ゞ)

二、求MMM

  我们先重新声明一下符号,方便我们后面的讨论~
(齐次坐标系)P′=K[RT]Pw=MPw(齐次坐标系)P' =K\begin {bmatrix} R & T \end{bmatrix}P_w=MP_w \quad (齐次坐标系)P′=K[R​T​]Pw​=MPw​
  因为我们后面基本上只会用到世界坐标系到图像坐标系之间的映射关系。所以我们将PwP_wPw​跟换为PPP;而P′P'P′跟换为ppp
(齐次坐标系)p=K[RT]P=MP(齐次坐标系)p =K\begin {bmatrix} R & T \end{bmatrix}P=MP \quad (齐次坐标系)p=K[R​T​]P=MP

  我们设计一个标定装置来模拟一下我们的标定过程。世界坐标系就搭建在这个标定装置中,里面的坐标轴都是相互垂直的,每个方格都是等间隔的,间隔的实际尺寸也是已知的,这样我们就知道了世界坐标系中各个点的位置。


  同时我们也能通过与图像进行匹配,知道与其对应的像素点。

  • 世界坐标系中P1、P2....PnP_1、P_2 ....P_nP1​、P2​....Pn​位置已知。
  • 图像(像素坐标系)中p1、p2....pnp_1、p_2 ....p_np1​、p2​....pn​位置已知。

  相机标定的目标就是通过这些已知点和世界坐标系到图像坐标系之间的映射关系,求得投影矩阵MMM,得到摄像机的内外参数。
  根据上一章的内容,我们在已知世界坐标系的点P和投影矩阵M世界坐标系的点P和投影矩阵M世界坐标系的点P和投影矩阵M的情况下,可以对应图片坐标系的欧氏坐标,以此我们可以建立方差组(已知P、pP、pP、p求MMM)。
M=[m1m2m3]pi=(ui,vi)=(m1Pim3Pi,m2Pim3Pi)M= \begin{bmatrix} m_1 \\ m_2 \\ m_3 \end{bmatrix} \quad\quad\quad p_i= (u_i,v_i)= (\frac {m_1P_i}{m_3P_i} , \frac {m_2P_i}{m_3P_i}) \quad M=⎣⎡​m1​m2​m3​​⎦⎤​pi​=(ui​,vi​)=(m3​Pi​m1​Pi​​,m3​Pi​m2​Pi​​)

问题一:求解投影矩阵需要多少对应点?

M=K[RT]M =K\begin {bmatrix} R & T \end{bmatrix} \quad M=K[R​T​]
  已知MMM是一个3×4的矩阵,其中K、R、TK、R、TK、R、T分别有5、3、3个需要求解的参数,所以一个有11个参数需要求解
  而我们Pi到piP_i到p_iPi​到pi​的一个对应点能根据ui,viu_i,v_iui​,vi​搭建两个方程,所以想要求出MMM我们至少需要6个对应点。
  而在实际的过程中我们可以使用更多的对应点来获得有更强鲁棒性的结果。


  m1,m2,m3m_1,m_2,m_3m1​,m2​,m3​就是我们求解的对象。

问题二:怎么算?

  我们把这些方程式整理一,变成一个齐次线性方程组:

  在矩阵PPP中的参数都为已知量,矩阵mmm中都为未知量。


  我们上面分析到对应点不能少于6个,所以方程数MMM是一定大于NNN的。然而在齐次线性方程个数多于未知数个数的情况下:

  • 如果系数矩阵秩等于未知数个数,则只有零解(唯一解)
  • 如果系数矩阵秩大于未知数个数,则无解
    - 如果系数矩阵秩小于未知数个数,则有无穷多组解(有零解、和非零解)

  我们这个齐次线性方程组就是属于第一种情况了,只有0解~,而我们总不能让mmm全为0吧?我们的目标是求出mmm的非零解,所以我们就求表达式PmPmPm尽可能接近于0的最小值的非零解,其中我们还要对mmm进行约束,使其模为1。这样求出来的解mmm就是我们要的解。

  其解法就是用奇异值分解的方法,其mmm就是PPP矩阵最小奇异值的右奇异向量

奇异值分解是啥?看下面吧…
  线性代数中矩阵的特征分解应该知道吧?特征分解的方法是将矩阵分解为特征向量和特征值。而矩阵还有另外一种分解方法,就叫做奇异值分解(singular value decomposition, SVD)。奇异值分解相对于特征分解用途更加广泛,每个实数矩阵都有一个奇异值分解,但是不一定都有特征分解;例如:非方阵的矩阵没有特征分解,而非方阵可以使用奇异值分解。
  通过奇异值分解,我们会得到一些与特征分解相同类型的信息,奇异值分解是将矩阵A分解成三个矩阵的乘积:
A=UDVTA=UDV^TA=UDVT
  假设AAA是一个m×nm×nm×n的矩阵,那么UUU是一个m×mm×mm×m的矩阵,DDD是一个m×nm×nm×n的矩阵,VVV是一个n×nn×nn×n矩阵。
  这些矩阵中的每一个经定义后都拥有特殊的结构。矩阵UUU和VVV都定义为正交矩阵,而矩阵DDD定义为对角矩阵。(DDD不一定是方阵)
  对角矩阵DDD对角线上的元素称为矩阵AAA的奇异值。矩阵UUU的列向量称为左奇异向量,矩阵VVV的列向量称为右奇异向量。
  事实上,我们可以用与AAA相关的特征分解去解释AAA的奇异值分解。AAA的左奇异向量是AATAA^TAAT的特征向量。AAA的右奇异值向量是ATAA^TAATA的特征向量。AAA的非零奇异值是ATAA^TAATA特征值的平方根,同时也是AATAA^TAAT特征值的平方根

二、求MMM中的摄像机的内外参数

  求出投影矩阵MMM后我们就能把世界点和像素点建立对应关系。但是MMM矩阵是由摄像机内部参数KKK和外部参数R、TR、TR、T的乘积,所以我们这一步就是通过MMM将摄像机的内外参数算出来

p=MP=K[RT]Pp = MP=K \begin{bmatrix} R &T \end{bmatrix}P p=MP=K[R​T​]P
  我们先来简单看一下M、K、R、TM、K、R、TM、K、R、T,如下图:

  有一个点我们要注意,我们通过奇异值分解算出来的投影矩阵MMM是PmPmPm为尽可能接近无限小并且以∣∣M∣∣=1||M||=1∣∣M∣∣=1
为约束条件得出来的,所以我们算出来的MMM会与真实的MMM相差一个系数ρρρ。

1)内参数

  根据上图的关系式,我们先列出第一个等式并计算:

  • 先从最简单的开始求:ρa3T=r3Tρa_3^T=r_3^Tρa3T​=r3T​
        ρρρ是一个实数,r3r_3r3​是旋转矩阵RRR中的一个向量,显然它是一个单位向量,取模着等于1。
    ρ∣∣a3T∣∣=∣∣r3T∣∣→ρ=±1∣∣a3∣∣ρ||a_3^T||=||r_3^T|| \quad \rightarrow \quad ρ= \frac {\pm1}{||a_3||}ρ∣∣a3T​∣∣=∣∣r3T​∣∣→ρ=∣∣a3​∣∣±1​

  • 然后求KKK里面的u0、v0u_0、v_0u0​、v0​,列出方程(注意:这里的计算为向量的点乘):ρa3⋅ρa1=r3⋅(αr1−αcotθr2+u0r3)ρa_3\cdotρa_1=r_3\cdot (αr_1-αcotθr_2+u_0r_3)ρa3​⋅ρa1​=r3​⋅(αr1​−αcotθr2​+u0​r3​)
        由于RRR为旋转矩阵,r1、r2、r3r_1、r_2、r_3r1​、r2​、r3​为单位向量且都相互正交,所以r1⋅r3=0andr2⋅r3=0andr3⋅r3=1r_1 \cdot r_3=0 \quad and \quad r_2\cdot r_3=0 \quad and \quad r_3\cdot r_3=1r1​⋅r3​=0andr2​⋅r3​=0andr3​⋅r3​=1。我们就能得出:
    u0=ρ2(a1⋅a3)u_0=ρ^2(a_1 \cdot a_3)u0​=ρ2(a1​⋅a3​)

  • 同理我们也能得出v0v_0v0​:
    v0=ρ2(a2⋅a3)v_0=ρ^2(a_2 \cdot a_3)v0​=ρ2(a2​⋅a3​)

  • 下一步我们来算θθθ,列出等式方程(这里为向量的叉乘):
    {ρa1×ρa3=(αr1−αcotθr2+u0r3)×r3ρa2×ρa3=(βsinθr2+v0r3)×r3\left\{ \begin{array}{c} ρa_1\timesρa_3=(αr_1-αcotθr_2+u_0r_3) \times r_3\\ ρa_2\timesρa_3= (\frac {β}{sinθ}r_2+v_0r_3) \times r_3 \end{array}\right. {ρa1​×ρa3​=(αr1​−αcotθr2​+u0​r3​)×r3​ρa2​×ρa3​=(sinθβ​r2​+v0​r3​)×r3​​

    由于RRR为旋转矩阵,r1、r2、r3r_1、r_2、r_3r1​、r2​、r3​为单位向量且都相互正交,所以r1×r3=r2andr2×r3=r1andr3×r3=0r_1 \times r_3=r_2 \quad and \quad r_2\times r_3=r_1 \quad and \quad r_3\times r_3=0r1​×r3​=r2​andr2​×r3​=r1​andr3​×r3​=0。我们就能得出:
{ρ2(a1×a3)=αr2−αcotθr1ρ2(a2×a3)=βsinθr1(1)\left\{ \begin{array}{c} ρ^2(a_1\times a_3)=αr_2-αcotθr_1\\ ρ^2(a_2\times a_3)= \frac {β}{sinθ}r_1 \end{array}\right.\quad\quad\quad(1) {ρ2(a1​×a3​)=αr2​−αcotθr1​ρ2(a2​×a3​)=sinθβ​r1​​(1)
    对其取模我们又能得到:
{ρ2∣a1×a3∣=∣α∣sinθρ2∣a2×a3∣=∣β∣sinθ(2)\left\{ \begin{array}{c} ρ^2|a_1\times a_3|= \frac {|α|}{sinθ}\\ ρ^2|a_2\times a_3|= \frac {|β|}{sinθ} \end{array}\right. \quad\quad\quad(2){ρ2∣a1​×a3​∣=sinθ∣α∣​ρ2∣a2​×a3​∣=sinθ∣β∣​​(2)
    根据上面推导出来的两个方程组(1)和(2)我们就能算出cosθcosθcosθ了:(动手算一算还是很简单的)
cosθ=−(a1×a3)⋅(a2×a3)∣a1×a3∣⋅∣a2×a3∣cosθ=-\frac {(a_1\times a_3)\cdot(a_2\times a_3)}{|a_1\times a_3| \cdot |a_2\times a_3|}cosθ=−∣a1​×a3​∣⋅∣a2​×a3​∣(a1​×a3​)⋅(a2​×a3​)​
    这也对应了我们上一章讲道的其中一个定理:

  • 根据方程组(2)我们还能把最后两个参数α、βα、βα、β得出来:
    {α=ρ2∣a1×a3∣sinθβ=ρ2∣a2×a3∣sinθ\left\{ \begin{array}{c} α=ρ^2|a_1\times a_3|sinθ\\ β=ρ^2|a_2\times a_3|sinθ \end{array}\right. {α=ρ2∣a1​×a3​∣sinθβ=ρ2∣a2​×a3​∣sinθ​
        当α、βα、βα、β相等去情况下,说明我们的图像是方形的,而相等的条件就是∣a1×a3∣=∣a2×a3∣|a_1\times a_3| = |a_2\times a_3|∣a1​×a3​∣=∣a2​×a3​∣,也验证了我们上一章的其中一个定理:

2)外参数

  • 先求旋转矩阵RRR的三个向量r1、r2、r3r_1、r_2、r_3r1​、r2​、r3​:
    {ρa3=r3ρ2(a2×a3)=βsinθr1\left\{ \begin{array}{c} ρa_3=r_3\\ ρ^2(a_2\times a_3)= \frac {β}{sinθ}r_1 \end{array}\right. {ρa3​=r3​ρ2(a2​×a3​)=sinθβ​r1​​
        r1、r2、r3r_1、r_2、r_3r1​、r2​、r3​都是单位向量,sinθ、ρ、α、βsinθ、ρ、α、βsinθ、ρ、α、β都是实数,与向量的方向没关系,所以我们能得到:
    {r1=(a2×a3)∣a2×a3∣r2=r3×r1r3=±a3∣a3∣\left\{ \begin{array}{c} r_1=\frac {(a_2\times a_3)}{|a_2\times a_3|}\\ r_2=r_3\times r_1 \\ r_3=\frac{\pm a_3}{|a_3|} \end{array}\right. ⎩⎪⎨⎪⎧​r1​=∣a2​×a3​∣(a2​×a3​)​r2​=r3​×r1​r3​=∣a3​∣±a3​​​

  • 平移矩阵TTT,我们在回到最开始的这个等式:
        前面分析了 ρA=KRρA=KRρA=KR,现在来分析一下另外一个等式 ρb=KTρb=KTρb=KT来求得平移矩阵TTT。
        到这一步了其实很简单了,我们K、ρ、bK、ρ、bK、ρ、b都是已知的了,所以我们能够直接得出TTT:
    T=ρK−1bT=ρK^{-1}bT=ρK−1b

3)小结

三、补充

  为相机标定而取了6个及以上的对应点不能在同一个平面上,不然我们是求不到真实点的。

计算机视觉(相机标定)-2.1 摄像机标定相关推荐

  1. matlab相机标定_【显微视界】基于视觉伺服的工业机器人系统研究(摄像机标定、手眼标定、目标单目定位)...

    今日光电        有人说,20世纪是电的世纪,21世纪是光的世纪:知光解电,再小的个体都可以被赋能.欢迎来到今日光电! ----与智者为伍 为创新赋能---- 标定技术 常见的机器人视觉伺服中要 ...

  2. 计算机视觉—— 相机标定

    目录 简介 一.相机模型 1.坐标系 2.坐标系变化 3.相机畸变模型 二.相机标定原理 三.张正友黑白棋盘格标定 2.1.算法思想 2.2.求解内参和外参的积 2.3.求解内参矩阵 2.4.求解外参 ...

  3. scare机器人如何手眼标定_基于视觉伺服的工业机器人系统研究(摄像机标定、手眼标定、目标单目定位)...

    击上方"新机器视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 标定技术 常见的机器人视觉伺服中要实现像素坐标与实际坐标的转换,首先 ...

  4. MFC+OPENCV摄像机标定

    摄像机的追踪标定 本文是我第一次在csdn上写的博客,有不详之处,望大家见谅,也希望大家多多支持. 废话不多说,直接进入正题.对于摄像机标定,是学习图像处理和机器视觉不可回避的话题,这方面的现有理论已 ...

  5. 多摄像机标定和去畸变

    Table of Contents 1.kalibr多摄像机标定 1.1 系统安装,环境配置:实测Ubuntu 16.04 1.2 多摄像机标定 2.OpenCV双目标定 3.Matlab多摄像机标定 ...

  6. 计算机视觉-相机内参数和外参数

    1.相机内参数是与相机自身特性相关的参数,比如相机的焦距.像素大小等: 相机外参数是在世界坐标系中的参数,比如相机的位置.旋转方向等. 相机标定(或摄像机标定): 一句话就是世界坐标到像素坐标的映射, ...

  7. 计算机视觉----相机标定模型

    简介 提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.相机标定简介 二.张友正黑白棋盘标定 1.思想 2.原理 3.模型求解 三.实验内容及过程 3.1 实验要求 ...

  8. 计算机视觉:摄像机标定(循序渐进理解到应用)

    在开始阅读前,我们首先要知道我们为什么要进行相机标定?开始需要输入什么?最后需要得到什么? 相机标定的目的:获取摄像机的内参和外参矩阵(同时也会得到每一幅标定图像的选择和平移矩阵),内参和外参系数可以 ...

  9. python计算机视觉- 相机模型与参数标定

    文章目录 相机投影模型 针孔相机模型 像主点偏移 内参矩阵 畸变现象 畸变矫正 外参矩阵 两类参数 相机标定 线性回归 (最小二乘) 非线性优化 标定过程 实验过程 MATLAB进行标定 相机投影模型 ...

最新文章

  1. matlab用于系统框图建模的函数,MATLAB产品家族中文
  2. hibernate处理懒加载异常的方法
  3. winform-日记
  4. CS229 1 .线性回归与特征归一化(feature scaling)
  5. spring学习(6):使用xml方式实现spring基本应用
  6. 用Matlab来备份文件夹
  7. 爬虫常用Xpath和CSS3选择器对比
  8. linux关闭端口进程命令,windows Linux 下命令行查看端口占用情况并且关闭进程
  9. oracle 图片数据复制,Oracle如何插入图片数据?
  10. 进入显示器工厂模式的方法 【95种品牌 维修珍藏资料】
  11. 里程碑!美国航天局NASA耗资高达百亿美元,“终极太空望远镜”拍到了什么?| 美通社头条...
  12. Python excel数据处理之公式---openpyxl
  13. 系统加速精灵:全面提升CPU性能,让你的系统跑的更快!
  14. 人在职场:可以让你少奋斗10年的工作经验
  15. dbm数据库源代码分析(3):头文件部分
  16. Bugku—PHP代码审计—md5函数
  17. Android设置屏幕亮度
  18. 百度推广关键词如何出价
  19. 十三届智能车直立车程序
  20. js php中文乱码,javascript在php中文乱码怎么办

热门文章

  1. pycharm注释语法
  2. rk3588:串口波特率
  3. cuda入门——记录
  4. 喜欢盗墓探险类的文章作品吗?这里为大家推荐一款类似的好玩的手游
  5. 卓越和悦施工缓慢求助
  6. 惠普微型计算机音频输入,惠普HP Pro 4500商用台式电脑
  7. 电脑硬盘检测怎么操作?如何检查硬盘的健康情况?
  8. 观《人造韩寒:一场关于“公民”的闹剧》后感
  9. 解除ie浏打开后自动跳转到edge解决办法
  10. 质因数分解(c语言)