Multi-View Geometry


CV_MultiView

1. Epipolar Basics

1.1 Setup

setup

上图是经典的 Epipolar Geometry 极几何 的设置

  • Ol,Or 左右两相机的光心 / 原点

  • el,er Epipoles,Image Point of camera origin as viewed by the other camera

    • 人话:el 是右侧相机在左侧 Image Plane 上的投影,er 同理

    • They are unique for a given stereo pair

  • P Scene Point,拍摄场景上的一点,每个场景点都有唯一对应的 Epipolar Plane

  • t,R Translation & Rotation Coordinates (Matrix) of {Or} in {Ol}

  • xl,xr Scene Point P 分别在左右相机坐标系下的空间坐标

 

 

 

1.2 Epipolar Constraint

epipolar constraint

这个 constraint 的核心是:Scene Point P 要在对应的 Epipolar Plane 上

图中的 n 为这个 Epipolar Plane 上的 Normal Vector 法向量,由于 xl 一定在 Epipolar Plane 上,所以一定也满足

xln=0

Epipolar Constraint 即

xl(t×xl)=0

 

 

1.3 Essential Matrix

Essential Matrix 是关联 两个相机坐标系下 Scene Point 三维坐标 的工具

  • 预处理 1

    Assume xl is in the form

    xl=[lxlylz]

    Express the Epipolar Constraint in matrix form

    自己查 matrix cross product 就知道为什么这么写了

    (1)xl(t×xl)=[lxlylz][0tztytz0txtytx0][lxlylz]=0
  • 预处理 2

    Assume xr is in the form

    xr=[rxryrz]

    xlxr 可以通过 R,t 建立联系

    (2)xl=Rxr+t[lxlylz]=[R11R12R13R21R22R23R31R32R33][rxryrz]+[txtytz]

将公式 (2) 代入公式 (1) 可得

[lxlylz]([0tztytz0txtytx0][R11R12R13R21R22R23R31R32R33][rxryrz]+[0tztytz0txtytx0][txtytz]t×t=0)=0

由于向量对自己叉乘结果为0,所以有 t×t=0,因此

[lxlylz][0tztytz0txtytx0][R11R12R13R21R22R23R31R32R33]Essential Matrix E[rxryrz]=0

中间两个矩阵合并得到 Essential Matrix E

[lxlylz][E11E12E13E21E22E23E31E32E33]Essential Matrix E[rxryrz]=0

In summary

Essential Matrix:E=t×RwithxlTExr=0

Tip. 只要你知道了 E,就能通过 SVD 拆出 Rt

 

 

 

1.4 Fundamental Matrix

Fundamental Matrix 是关联 两个相机 Image Plane 中 Scene Point 投影坐标 的工具

Scene Point P 在三维空间中的两个坐标 xl,xr 在各自相机 Image Plane 上对应的点为

请原谅,齐次坐标有些别扭

zlpl=zl[ulvl1]zrpr=zr[urvr1]

假设两台相机的 Intrinsic Matrix 为 Kl,Kr,均为已知,则有

{zlpl=Klxlzrpr=Krxr{xlT=[ulvl1]zlKlTxr=Kr1zr[urvr1]

把整理好的 xl,xr 公式代入 xlTExr=0

[ulvl1]zlKlT[E11E12E13E21E22E23E31E32E33]Kr1zr[urvr1]=0

由于在齐次坐标的意义确保了 zl,zr0,所以可以很安全地直接从上式中把它们干掉,最后得到

[ulvl1]KlT[E11E12E13E21E22E23E31E32E33]Kr1Fundamental Matrix F[urvr1]=0

合并后得到

[ulvl1][F11F12F13F21F22F23F31F32F33]Fundamental Matrix F[urvr1]=0

In Summary

Fundamental Matrix:F=KlTFKr1withplTFpr=0

 

 

1.6 Model Summary

  • Essential Matrix 展开

    For Calibrated Cameras

    xlTExr=0[lxlylz][E11E12E13E21E22E23E31E32E33]Essential Matrix E[rxryrz]=0
  • Fundamental Matrix 展开

    For Uncalibrated Camera

    此处由于去掉了 zl,zr,若使用 F 还原 E 再还原 R,t 便会出现尺度丢失的问题

    plTFpr=0[ulvl1][F11F12F13F21F22F23F31F32F33]Fundamental Matrix F[urvr1]=0
  • 一半展开

    plTKlTEKr1pr=0[ulvl1]KlT[E11E12E13E21E22E23E31E32E33]Essential Matrix EKr1Fundamental Matrix F[urvr1]=0
  • 完全展开

    plTKlT(t×R)Kr1pr=0[ulvl1]KlT[0tztytz0txtytx0][R11R12R13R21R22R23R31R32R33]Essential Matrix EKr1Fundamental Matrix F[urvr1]=0

 

 

 

 

 

2. Epipolar 相关应用

2.1 相机 - 求相对位姿

R,t 需要分解 Essential Matrix E

E 需要 Scene Point P 在两个相机坐标系下的三维坐标,而这几乎是不可能的

但是 1.4 提供了一条用 Fundamental Matrix FE ,然后再求 R,t

  1. 在两个相机的 Image Plane 上找一打对应点

  2. 用下式求出 Fundamental Matrix F

    plTFpr=0
  3. 用下式求出 Essential Matrix E

    E=KlTFKr
  4. 用 SVD 从下式中拆解出 R,t

    E=t×R

 

 

 

2.2 八点法 8-Point Algorithm

八点法是用于求解 Fundamental Matrix F 的算法

 

2.2.1 基本部分

理论上 F7 个自由度,选取 7 对特征点即可求出 F,但是实际上完全不够用

8-pt algorithm

如上图,八点法选取(大于)8 对特征点 (pl,pr),代入下式

plTFpr=0[ulvl1][F11F12F13F21F22F23F31F32F33]Fundamental Matrix F[urvr1]=0

然后展开整理,能得到这么个齐次线性方程组

Wf=0 with f=[F11,F12,F13,F21,F22,F23,F31,F32,F33]T

然后求 Least-Square Solution

f 的 scale 无所谓,所以可以加个非常 handy 的 constraint,限定 f 的 magnitude 为 1

minfWfs.t.f=1

用 SVD 分解可得到一个 F^,但它一般不是我们要的 Fundamental Matrix

 

 

2.2.2 Rank Constraint
  • Rank Constraint of Fundamental Matrix

    rank(F)=2

上一部分里通过 SVD 解得的 F^ 一般不是我们要的 Fundamental Matrix,因为 F^R3×3,且一般 rank(F^)=3,所以

Nullity(F^)=33=0

这意味着 Wf=0 只有零解,即 f=[0],Nein!!!

see 4.

Enforce 这个 Rank Constraint 的方法很简单,对 F^ 再进行一次 SVD

F^=U[s1000s2000s3]VT

然后令 s3=0,组合回去就是我们要的 rank=2 的合法 F

F^=U[s1000s20000]VT

 

2.2.3 八点法的缺陷
  • 精度较低

  • W 中各元素差异较大

  • SVD 分解有数值计算问题

 

 

 

2.3 Find Correspondence

在左侧相机的 Image Plane 里指定一 Scene Point P 的投影点,那 P 在右侧相机的 Image Plane 的投影点在何处?

 

2.3.1 Method: Epipolar Line

Epipolar Line is the Intersection of Epipolar Plane and Image Planes

epipolar line

1.1 中有提到,每个 Scene Point P 都有对应的 Unique Epipolar Plane,它与两相机的 Image Plane 有唯二交线为 Epipolar Line,在图中标红

简而言之:每个 P 在 Epipolar 系统中都有 2条 这样的线,一个 Image Plane 一条

两个 Corresponding Points 一定在同一个 Epipolar Plane 上 (如下图中的虚线)

correspond point

而 Epipolar Plane 一定会与 Image Plane 有一条交线

所以只要能找到右侧相机 Image Plane 里的那条 Epipolar Line,找对应点的过程就能被简化为 1D Search

 

 

2.3.2 Find Epipolar Line
  • Given

    1. Fundamental Matrix F

    2. Left Image 上一点 (ul,vl)

  • 方法 1:

    依据 1.6 提供的公式

    [ulvl1][F11F12F13F21F22F23F31F32F33]Fundamental Matrix F[urvr1]=0

    展开后得

    0=(F11ul+F21vl+F31)alur+(F12ul+F22vl+F32)blvr+(F11ul+F21vl+F31)cl1

    由于 F(ul,vl) 均已知,所以可以直接合并成系数,化简所得即右侧 Image Plane 上的 Epipolar Line ELr

    ELr:alur+blvr+cl=0

    然后做个 1D Search 就完事了

  • 方法 2:

    参考 1.6 提供的公式

    plTFpr=0

    以及 “点 x 在线 l 上” 的点乘条件

    xTl=0

    对比一下可以很快得出左右 Epipolar Line 的公式 ELl,ELr

    ELl=FplELr=FTpr

    方法 1 的结果对比一下,一模一样!

 

 

2.3.3 Example

example

 

 

 

2.4 Find Depth

epipolar

  • Given:

    1. Scene Point P 在两相机 Image Plane 里的投影点坐标 pl,pr

      zlpl=zl[ulvl1]zrpr=zr[urvr1]
    2. 两台相机的 Intrinsic Matrix Kl,Kr

    3. 两台相机的相对位置 R,t

  • Find:

    Depth of P from the Right Camera !

  • 预处理 1

    假定 P{Ol}{Or} 中的三维坐标为 xl,xr

    xl=[lxlylz]xr=[rxryrz]

    xl,xr 与在各自相机 Image Plane 上的投影点 pl,pr 通过 Camera Matrix Kl,Kr 分别建立联系

    zl[ulvl1]=Kl[I0][lxlylz1]zr[urvr1]=Kr[I0][rxryrz1]
  • 预处理 2

    xl,xr 通过描述相机相对位置的 R,t 建立联系

    [lxlylz1]=[Rt01][rxryrz1]

    然后代入 预处理 1 中右侧相机的映射关系

    zl[ulvl1]=Kl[I0][Rt01][rxryrz1]
  • Computation

    联立预处理后的两个公式

    zlpl=Ml[xl1]zl[ulvl1]=Kl[I0][Rt01]Ml[rxryrz1]zrpr=Mr[xr1]zr[urvr1]=Kr[I0]Mr[rxryrz1]

    显然 plMlxl 只差一个 scale zl,对于 pr 同理,因此有

    plMl[xl1]prMr[xr1]

    那更进一步,如果公式两侧叉乘,就会

    pl×Ml[xl1]=0pr×Mr[xr1]=0

    这样就能完全忽略归一化项 zl,zr,上式展开后联立可得

    Axr=bA[rxryrz]=bwith AR4×3,bR4×1

    最后 find least-square solution using Pseudo-Inverse 即可找出 xr

    Axr=bATAxr=ATbxr=(ATA)1ATb

 

 

 

 

 

3. Stereo

3.1 Binocular Vision Setup

这样的 Stereo System 是 Epipolar System 的特殊版本,类似于一台相机拍一张照片,然后平移一段距离,再拍一张照片

两台相机一模一样,间距为 b,且 Image Plane 相互平行,Scene Point 位于 (x,y,z)

binocular

这个系统有如下特性:

  • Epipoles 在无穷远处,左侧相机的 Epipole 在左侧无穷远,右侧的在右侧无穷远

  • Scene Point 的 Epipolar Line 水平于 Image Plane 的 u 轴,如上图黄线所示

    不止水平,而且重合,不过原因很简单,因为此时 Epipolar Line 是 Epipolar Plane 的组成部分之一了

  • Scene Point 的投影点高度相等 vl=vr

 

 

 

3.2 Triangulation

设定两台相机的 Camera Matrix 为

K=[fx0ox0fyoy001]

所以两个 Image Plane 上 Scene Point 投影点与其三维坐标的关系为

zl[ulvl1]=K[I0][xyz1]zr[urvr1]=K[I0][xbyz1]

展开后分别得到

  • 右侧投影点

    ul=fxxz+oxvl=fyyz+oy
  • 左侧投影点

    ur=fxxbz+oxvr=fyyz+oy

这里就能看出来 vl=vr

 

 

 

3.3 Disparity

Solve for (x,y,z) with the equations of two projection points

x=b(ulox)(ulur)y=bfx(vloy)fy(ulur)z=bfx(ulur) Depth

where (ulur) is Disparity,也就是一个 Scene Point 在两个 Image Plane 上 投影点的 u 轴距离差

  • Disparity 与 Depth z反比

    若 Scene Point 位于无限远处,那么它在相机在平移前后所摄照片里会在一模一样的位置

  • Disparity 于 Baseline b正比

    相机平移距离越长,同一个 Scene Point 在平移前后所摄照片里的 Disparity 越大

  • Disparity 仅存在于 Image Plane 的 u

    因为 v 轴数值完全相等 vl=vr

disparity map

右图是用某些器械手动测量的左图场景的 Disparity Map

Map 中亮度越高的地方有更大的 Disparity

所以很明显,离相机越近,Disparity 越大,与 Depth 成反比

 

 

 

3.4 Stereo Matching

  • Given

    1. 用 Binocular Vision 拍摄的左右两张图片

    2. Binocular Vision 的相机配置 b,K

  • Find

    Depth Map!

 

3.4.1 Template Matching

在左图选一个小窗口 Template Window T,由于 Binocular Vision 的特性,这个窗口的 Feature 在左右图的高度是相同的

template match

你只需要顺着一条线做 1D Search,然后用某些 Similarity Metric 匹配特征就能找到对应点

能找到对应点,就能找到 ur,就能求 Disparity,就能求 Depth!

Disparity: d=ulurDepth: z=bfx(ulur)

 

3.4.2 影响结果的因素
  • Window Size

    在做 Template Matching 时,选取的 Template Window 大小会对最终结果造成某些影响,各有利弊

    window size problem

  • Similarity Metric

    在做特征匹配时选的 Similarity Metric 也会有不同的效果

    similarity metric difference

 

 

3.4.3 存在的问题
  1. Repetitive Texture 重复 / 同质特征

    下图这两种 Texture 可谓大寄特寄,取 Template Window 做匹配的时候到处都能匹配上

    repetitive feat

  2. Foreshortening 透视缩短

    下图中场景投影到左右两个 Image Plane 的是同一个区域,但是右侧成像长度比左侧更短,被压缩了,不太好匹配了!

    foreshortening

  3. 遮挡

    典中典的问题

    blocking

 

 

 

 

 

4. 补充材料: Matrix Null Space

  • Null Space

    Null Space of Matrix A is a set of vectors x satisfying Ax=0

    Null(A)={x|Ax=0}
  • Nullity

    Nulity of A is the dimension of Nullspace

    Nullity(A)=dim(Null(A))
  • Rank-Nullity Theorem

    rank(A)+nullity(A)=number of columns in A