多视图几何笔记

  • 1.运动恢复结构问题
  • 2.三种典型的运动恢复结构任务
  • 2.1欧式结构恢复(相机内参数已知,外参数未知)
  • 2.2仿射结构恢复(摄像机为仿射相机,内、外参数均未知)
  • 2.2.1数据中心化
  • 2.2.2奇异值分解
  • 2.3透视结构恢复(摄像机为透视相机,内、外参数均未知)
  • 2.3.1代数方法(三角化)
  • 2.3.2捆绑调整(BA)



对北邮鲁鹏老师的计算机视觉之三维重建课所做的笔记。

1.运动恢复结构问题

计算机视觉 三维重建 计算机视觉三维重建cad_图像处理


计算机视觉 三维重建 计算机视觉三维重建cad_图像处理_02


已知多个图像上的对应点坐标,求出相机的投影矩阵M对应点的三维坐标

2.三种典型的运动恢复结构任务

2.1欧式结构恢复(相机内参数已知,外参数未知)

计算机视觉 三维重建 计算机视觉三维重建cad_计算机视觉 三维重建_03


已知内参、多点的图像坐标,求外参和三维坐标。(如果多视角图是由一个相机拍摄,只需要知道一个相机的内参,如果是多个相机拍摄,需要多个相机的内参

计算机视觉 三维重建 计算机视觉三维重建cad_世界坐标系_04

世界坐标系放在第一个相机坐标系O1下,这样第一个相机的外参矩阵[I 0]已知。只需要求出R,T。(如何求出R,T?)

答:用本质矩阵F基础矩阵E能求出

计算机视觉 三维重建 计算机视觉三维重建cad_计算机视觉 三维重建_05


求解出三维点坐标Xj的流程:

1.在两幅图像上取8对点。求出基础矩阵F归一化八点法在极几何里有讲)

2.已知基础矩阵F、两个相机的内参数K1、K2求出本质矩阵E

3.分解本质矩阵E,求出旋转矩阵R、平移矩阵T(该方法的核心

4.利用三角化(线性法或者非线性法)求出三维点坐标Xj

如何把E分解成R、T?

计算机视觉 三维重建 计算机视觉三维重建cad_图像处理_06


计算机视觉 三维重建 计算机视觉三维重建cad_计算机视觉 三维重建_07得出F的符号和尺度无法确定,所以E的尺度和符号也无法确定。

计算机视觉 三维重建 计算机视觉三维重建cad_算法_08

为了能用E推出R、T给出了两个矩阵W,Z,这两个矩阵是为了方便推导后面的公式直接给出的,没有什么特别意义,diag(1,1,0)是单位阵最后一行的1变成0,在相差一个正负号的情况下,Z=diag(1,1,0)W=diag(1,1,0)计算机视觉 三维重建 计算机视觉三维重建cad_世界坐标系_09

所以得出 计算机视觉 三维重建 计算机视觉三维重建cad_图像处理_10,

计算机视觉 三维重建 计算机视觉三维重建cad_奇异值分解_11


调用奇异值分解SVD分解算法直接算出 U和V,所以计算机视觉 三维重建 计算机视觉三维重建cad_算法_12

由于W和U都是正交矩阵计算机视觉 三维重建 计算机视觉三维重建cad_计算机视觉 三维重建_13.就能求出R了,由于E的两种表示形式,可以求出两个不同的R(注意:旋转矩阵是正交变换、不改变定向、行列式为1。如果矩阵的各列向量都是单位向量,并且两两正交(就是垂直)。那么就说这个矩阵是正交矩阵。)

计算机视觉 三维重建 计算机视觉三维重建cad_计算机视觉 三维重建_14


对[计算机视觉 三维重建 计算机视觉三维重建cad_奇异值分解_15]进行SVD分解,拿出计算机视觉 三维重建 计算机视觉三维重建cad_计算机视觉 三维重建_16的第三列就是T(无法确定符号)

计算机视觉 三维重建 计算机视觉三维重建cad_算法_17


因为符号无法确定,所以可能出现4种情况,只有一种情况是正确的。

计算机视觉 三维重建 计算机视觉三维重建cad_计算机视觉 三维重建_18


通过对多个点进行重建,找出符合实际的正确的一组解

计算机视觉 三维重建 计算机视觉三维重建cad_世界坐标系_19


歧义:如果只有一张图,我们无法知道建筑物的实际高度,但是我们加入先验信息,比如人的实际高度,我们就能得到建筑物的实际高度。

计算机视觉 三维重建 计算机视觉三维重建cad_算法_20


欧式结构恢复:恢复的结构与真是场景之间相差一个相似变换(旋转、平移、缩放)为什么旋转平移也无法确定呢?

因为这是把世界坐标系定在了相机坐标系O1上了,所以并不知道物体实际的东南西北朝向。

2.2仿射结构恢复(摄像机为仿射相机,内、外参数均未知)

计算机视觉 三维重建 计算机视觉三维重建cad_算法_21


仿射相机:如果R,Q,P点到平面π的距离远小于其到相机的距离时,可近似的看成R,Q,P同处在平面π上。

好处:从三维点到像素点的映射仅相差一个固定的系数。把Z固定为计算机视觉 三维重建 计算机视觉三维重建cad_算法_22

计算机视觉 三维重建 计算机视觉三维重建cad_世界坐标系_23


仿射相机M矩阵与一般相机的M矩阵不同就是把v变成0.M是3*4的矩阵

计算机视觉 三维重建 计算机视觉三维重建cad_奇异值分解_24

这里回顾一下x是图像平面上的齐次坐标,降一维变成计算机视觉 三维重建 计算机视觉三维重建cad_算法_25变成欧式坐标,下面同理,X是摄像机坐标系下的齐次坐标[x,y,z,1],所以在仿射变换里计算机视觉 三维重建 计算机视觉三维重建cad_图像处理_26

最后经过几次变换,让世界坐标系到图像坐标系的映射不经过齐次变换,而直接用欧式变换完成映射 即计算机视觉 三维重建 计算机视觉三维重建cad_奇异值分解_27

计算机视觉 三维重建 计算机视觉三维重建cad_奇异值分解_28


最后仿射结构恢复问题就变成了求解:1.三维点坐标 2.投影矩阵A和b

(如何求解?)1.数据中心化 2.因式分解获得运动与结构

计算机视觉 三维重建 计算机视觉三维重建cad_图像处理_29

2.2.1数据中心化

计算机视觉 三维重建 计算机视觉三维重建cad_计算机视觉 三维重建_30


这里的小写x都是图像平面的像素点坐标,2x1的矩阵,大写X是世界坐标系的坐标3x1的矩阵,b被消掉了。B站讲解定位:如果把3D点的均值点当做世界坐标系的坐标原点,就可以直接完成中心化后的像素坐标点三维坐标点X的映射关系,即计算机视觉 三维重建 计算机视觉三维重建cad_世界坐标系_31,跳过中间的计算机视觉 三维重建 计算机视觉三维重建cad_算法_32过程。

计算机视觉 三维重建 计算机视觉三维重建cad_图像处理_33


计算机视觉 三维重建 计算机视觉三维重建cad_图像处理_34中的i代表第几个相机,j代表第几个点,例计算机视觉 三维重建 计算机视觉三维重建cad_世界坐标系_35代表第2个相机上的第3个点。虽然D写得很大,但是D的秩只能为3,此时要解出M,S。(对D进行奇异值分解

2.2.2奇异值分解

计算机视觉 三维重建 计算机视觉三维重建cad_算法_36


计算机视觉 三维重建 计算机视觉三维重建cad_图像处理_37


计算机视觉 三维重建 计算机视觉三维重建cad_奇异值分解_38


由于D的秩为3,所以理论上只有三个特征值(实际不是,但是我们取出最大的三个特征值当做近似),依据最大的3个特征值得出U,W,V。其中U为2mx3 ,W为3x3,计算机视觉 三维重建 计算机视觉三维重建cad_世界坐标系_39为3xn。最后M=U,S=W计算机视觉 三维重建 计算机视觉三维重建cad_算法_40,解出了M,S。(歧义:M=UW,S=计算机视觉 三维重建 计算机视觉三维重建cad_世界坐标系_39也可以,由于这两种分解都可以,所以产生歧义,后面会讲)

计算机视觉 三维重建 计算机视觉三维重建cad_图像处理_42


缺点:如果其中存在一个点没有被所有相机看到,那么计算得不到准确值。

计算机视觉 三维重建 计算机视觉三维重建cad_算法_43


总结:这里也是尺度无法确定的问题,M*可以表示成M与一个3x3的可逆矩阵H相乘,由于H不唯一所以会产生物体倾斜的歧义。

计算机视觉 三维重建 计算机视觉三维重建cad_计算机视觉 三维重建_44


其中-8是因为其中有H矩阵的8个未知量是求不出来的。因为不在乎H矩阵的尺度,所以3x3矩阵H只有8个未知量(相当于本身9个未知量,因为不在乎尺度,就全都除以第九个未知量,第九个未知量变成1,所以只有8个未知量了。)

目的:该系统为了得出解必须要2mn>=8m+3n-8,其中m为相机数,n为取点数。

2.3透视结构恢复(摄像机为透视相机,内、外参数均未知)

计算机视觉 三维重建 计算机视觉三维重建cad_图像处理_45


待解决的问题。

计算机视觉 三维重建 计算机视觉三维重建cad_图像处理_46


首先讲必定会产生歧义,既然求不了真实的解,就把这个歧义利用起来。这里的H是4x4的矩阵,这里的映射是齐次空间的映射(与欧式恢复结构一样)。

计算机视觉 三维重建 计算机视觉三维重建cad_算法_47


为了求出结果需要2mn>=11m+3m-15

计算机视觉 三维重建 计算机视觉三维重建cad_世界坐标系_48


困难点:已知信息太少。下面给出两种方法。

2.3.1代数方法(三角化)

计算机视觉 三维重建 计算机视觉三维重建cad_图像处理_49


重点在第二步,直接用F基础矩阵求出M1,M2 。

计算机视觉 三维重建 计算机视觉三维重建cad_世界坐标系_50


由于存在歧义,我们求M1也可以通过矩阵变换转换成求M*,用计算机视觉 三维重建 计算机视觉三维重建cad_奇异值分解_51把M1变成计算机视觉 三维重建 计算机视觉三维重建cad_世界坐标系_52=[I|0],这是个标准化相机矩阵,这时候计算机视觉 三维重建 计算机视觉三维重建cad_世界坐标系_53=[A|b]完全未知,所以要把它求出来。

计算机视觉 三维重建 计算机视觉三维重建cad_算法_54

ppt上的计算机视觉 三维重建 计算机视觉三维重建cad_算法_55写错了,应该是计算机视觉 三维重建 计算机视觉三维重建cad_计算机视觉 三维重建_56.现在就是为了求出M2*,X*.推导过程可以去看https://www.bilibili.com/video/BV1aU4y1T74j?t=1576.4.经过推导得F=[计算机视觉 三维重建 计算机视觉三维重建cad_算法_57]A

(现已知计算机视觉 三维重建 计算机视觉三维重建cad_图像处理_58 , F=[计算机视觉 三维重建 计算机视觉三维重建cad_算法_59]A)

计算机视觉 三维重建 计算机视觉三维重建cad_世界坐标系_60


利用编程把b,A求出来,不管b是多少,只要已知F,并且令计算机视觉 三维重建 计算机视觉三维重建cad_奇异值分解_61与一个向量相乘等于零,那个向量就是b。由于计算机视觉 三维重建 计算机视觉三维重建cad_图像处理_62由前面的基础矩阵关系可知,b就是极几何中的极点。至此求出了计算机视觉 三维重建 计算机视觉三维重建cad_奇异值分解_63*

计算机视觉 三维重建 计算机视觉三维重建cad_算法_64


最后利用三角化,求出计算机视觉 三维重建 计算机视觉三维重建cad_世界坐标系_65

2.3.2捆绑调整(BA)

计算机视觉 三维重建 计算机视觉三维重建cad_算法_66


因式分解法的缺点:1.有遮挡不能重建 2.对应点没有选好不能重建

代数法的缺点:一般用于2视图重建,多视图容易累积误差

捆绑调整法核心思想:实际上真实点的投影有误差,计算机视觉 三维重建 计算机视觉三维重建cad_世界坐标系_65的真实投影是计算机视觉 三维重建 计算机视觉三维重建cad_奇异值分解_68但是用相机投影矩阵M算出来的点与之存在误差,所以重构点与真实点并不重合,为了减小误差,采用最小化重投影误差的方式,让误差在所有平面上的整体最小。

计算机视觉 三维重建 计算机视觉三维重建cad_算法_69


计算机视觉 三维重建 计算机视觉三维重建cad_世界坐标系_70


通常用到SFM或者SLAM的最后一步。(接下来讲SFM系统)