计算机视觉之三维重建——深入浅出SFM系统与SLAM系统的核心算法

文章目录

第一章:摄像机几何

1. 针孔模型&透镜

1.1 小孔成像原理

在这里插入图片描述

当将胶片直接放置在物体前方时,3D物体上的同一点会在胶片的多个位置产生成像;

在这里插入图片描述

因此,在物体和胶片之间放置一个带有针孔的隔板时,假设针孔大小只允许穿过一条光线,那么3D物体上的同一点只能有一条光线穿过小孔并在胶片上成像;

在这里插入图片描述

此处的小孔相当于就是光圈,光圈的尺寸越大,会有更多的光线穿过小孔,成像会越亮,但是同一个3D点会有多条光线穿过小孔并在胶片上的多个位置(相近)产生成像,导致物体成像模糊。光圈越小,物体成像越清晰,但是亮度也越暗;

1.2 针孔相机数学模型

在这里插入图片描述

P P P为空间3D点, P ′ P^{'} P为成像后的像平面的2D点

在这里插入图片描述

将上面的三维示意图投影到二维平面( k − j k-j kj平面,垂直于 i i i轴)后,会产生一对相似三角形:
y ′ f = y z \frac{y^{'}}{f}=\frac{y}{z} fy=zy
进而得到:
y ′ = f y z y^{'} = f \frac{y}{z} y=fzy

同理,若将将上面的三维示意图投影到二维平面( k − i k-i ki平面,垂直于 j j j轴)后,会产生另一对相似三角形:
x ′ f = x z \frac{x^{'}}{f}=\frac{x}{z} fx=zx
进而得到:
x ′ = f x z x^{'} = f \frac{x}{z} x=fzx

1.3 透镜

在这里插入图片描述

  • 若是采用之前的隔板+小孔的方式,在成像清晰的的情况下,由于通过光线少,图片会非常暗。
  • 当增加透镜之后,透镜会将从同一3D反射的多条光线聚焦到胶片上的同一点,增加了图片的亮度;

(1)焦距

在这里插入图片描述

  • 所有平行于光轴的光线都会汇聚到焦点,焦点到透镜中心的距离成为焦距
  • 穿过中心的光线的方向不会发生改变;

(2)近轴折射模型(带透镜的小孔成像模型)

在这里插入图片描述

由于过光心的直线映射关系不变,加不加镜头小孔成像模型依然成立。此时,摄像机的焦距(小孔到成像平面的距离)变为:
z ′ = f + z 0 z^{'}=f+z_0 z=f+z0
根据折射定律:
f = R 2 ( n − 1 ) f = \frac{R}{2(n-1)} f=2(n1)R
其中,R为透镜球面半径,n为透镜折射系数。

(3)失焦

在这里插入图片描述

如上图所示:

  • 3D点P在的光线穿过透镜刚好汇聚于胶片上的一点;
  • 而比点P离透镜更近的一点的光线会汇聚于胶片后一点,则在胶片上就是发散的;
  • 同理,比点P离透镜更远的一点的光线会汇聚于胶片前方一点,则在胶片上也是发散的;

在这里插入图片描述

景深:在一定景深范围内,能成清晰的相;离开景深的地方,可能形成虚像,如微距摄像:

(4)径向畸变

在这里插入图片描述

径向畸变:图像像素点以畸变中心为中心,沿着径向产生的位置偏差,从而导致图像中所成的像发生形变。其可以分为枕形畸变和桶形畸变两种。

2. 摄像机几何

2.1 摄像机坐标系 - 像素坐标系

(1)3D摄像机坐标系 - 2D CCD坐标系

{ x ′ = f x z y ′ = f y z \left\{ \begin{aligned} x^{'} = f \frac{x}{z} \\\\ y^{'} = f \frac{y}{z} \end{aligned} \right. x=fzxy=fzy

(2)2D CCD坐标系 - 2D像素坐标系

{ u = f k x z + c x v = f l y z + c y \left\{ \begin{aligned} u = fk \frac{x}{z} + c_x\\\\ v = fl \frac{y}{z} + c_y \end{aligned} \right. u=fkzx+cxv=flzy+cy

CCD坐标系和像素坐标系存在两个不同之处:

  • 坐标系原点不一致:CCD坐标系的远点在图像中心,像素坐标系的原点在左上角, c x c_x cx c y c_y cy就是原点的平移量;
  • 度量单位不一致:CCD坐标系的单位为 m m m,像素坐标系的单位为pixel, k , l k, l k,l 分别为 x , y x,y x,y 方向的度量单位变换量,单位为 p i x e l / m pixel/m pixel/m

f k fk fk f l fl fl 表示为 α 和 β \alpha 和 \beta αβ可得:

{ u = α x z + c x v = β y z + c y \left\{ \begin{aligned} u = \alpha \frac{x}{z} + c_x\\\\ v = \beta \frac{y}{z} + c_y \end{aligned} \right. u=αzx+cxv=βzy+cy

(3)齐次坐标变换

P ′ = [ u v 1 ] = [ α x + c x z β y + c y z z ] = [ α 0 c x 0 0 β c y 0 0 0 1 0 ] [ x y z 1 ] P^{'}=\begin{bmatrix} u\\ v\\ 1\\ \end{bmatrix}=\begin{bmatrix} \alpha x + c_x z\\ \beta y + c_y z\\ z\\ \end{bmatrix}= \begin{bmatrix} \alpha & 0 & c_x & 0\\ 0 & \beta & c_y & 0\\ 0 & 0 & 1 & 0\\ \end{bmatrix}\begin{bmatrix} x\\ y\\ z\\ 1\\ \end{bmatrix} P= uv1 = αx+cxzβy+cyzz = α000β0cxcy1000 xyz1

(4)摄像机偏斜

在这里插入图片描述
P ′ = [ α − α c o t θ c x 0 0 β s i n θ c y 0 0 0 1 0 ] [ x y z 1 ] = M P = K [ I 0 ] P P^{'}= \begin{bmatrix} \alpha & -\alpha cot \theta & c_x & 0\\ 0 & \frac{\beta}{sin \theta} & c_y & 0\\ 0 & 0 & 1 & 0\\ \end{bmatrix}\begin{bmatrix} x\\ y\\ z\\ 1\\ \end{bmatrix}=MP=K\begin{bmatrix} I & 0\\ \end{bmatrix}P P= α00αcosinθβ0cxcy1000 xyz1 =MP=K[I0]P

(5)内参数矩阵K

K = [ α − α c o t θ c x 0 β s i n θ c y 0 0 1 ] K=\begin{bmatrix} \alpha & -\alpha cot \theta & c_x\\ 0 & \frac{\beta}{sin \theta} & c_y\\ 0 & 0 & 1\\ \end{bmatrix} K= α00αcosinθβ0cxcy1

  • 其中, K K K是摄像机内参数矩阵,内参数矩阵决定了摄像机坐标系下3D空间点到2D图像点的映射
  • K有个5自由度DOF

(6)规范化摄像机

P ′ = [ x y z ] = [ 1 0 0 0 0 1 0 0 0 0 1 0 ] [ x y z 1 ] P^{'}=\begin{bmatrix} x\\ y\\ z\\ \end{bmatrix}=\begin{bmatrix} 1 & 0 & 0 & 0\\ 0 & 1 & 0 & 0\\ 0 & 0 & 1 & 0\\ \end{bmatrix}\begin{bmatrix} x\\ y\\ z\\ 1\\ \end{bmatrix} P= xyz = 100010001000 xyz1

  • 规范化摄像机下的3D点的欧式坐标和和像素坐标系下的2D点的齐次坐标一致;
  • 此时的3D点对应2D点的欧式坐标为 [ x z y z ] \begin{bmatrix} \frac{x}{z}\\ \frac{y}{z}\\ \end{bmatrix} [zxzy]

2.2 像素坐标系-世界坐标系

(1)投影矩阵

在这里插入图片描述

投影矩阵有11个自由度,其中包含5个摄像机内参数+6个摄像机外参数。

在这里插入图片描述
在这里插入图片描述

(2)投影矩阵性质定理

在这里插入图片描述

3. 其他摄像机模型

4. 最小二乘解

4.1 线性方程组的最小二乘解

(1)线性方程组

在这里插入图片描述

(2)最小二乘解

在这里插入图片描述

4.2 齐次线性方程组的最小二乘解

(1)线性方程组

在这里插入图片描述

(2)最小二乘解

在这里插入图片描述

4.3 非线性方程组的最小二乘解

在这里插入图片描述

第二章:摄像机标定

1. 针孔模型&透镜摄像机标定问题

1.1 摄像机标定

(1)标定目标

摄像机标定:求解摄像机内、外参数矩阵 K [R T];
因为摄像机内外参数矩阵描述了三维世界到二维像素的映射关系;

在这里插入图片描述

(2)标定装置

在这里插入图片描述

1.2 投影矩阵M求解

(1)标定方程

在这里插入图片描述

  • 摄像机内外参数共同构成了投影矩阵,投影矩阵共有11个未知量;
  • 每对点可以列出两个方程,因此,最少需要6对对应点;
  • 实际操作中通常使用多于6对点来获得更加鲁棒的结果;

在这里插入图片描述
在这里插入图片描述

  • 方程个数 2 n 2n 2n 个,且 n > 6 n > 6 n>6
  • 未知参数11个;
  • 这是一个超定齐次线性方程组;

(2)投影矩阵M求解

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.2 提取摄像机内参数

在这里插入图片描述
M = K [ R T ] = [ K R K T ] = [ A b ] M=K[R \quad T]=[KR \quad KT]=[A \quad b] M=K[RT]=[KRKT]=[Ab]

考虑投影矩阵M求解时,假定 ∣ ∣ m ∣ ∣ = 1 ||m||=1 ∣∣m∣∣=1,因此在M前面乘了一个 ρ \rho ρ

在这里插入图片描述
在这里插入图片描述

(1)提取ρ

从上式第三行可得:

∵ ρ a 3 T = r 3 T a n d ∣ r 3 ∣ = 1 ∴ ∣ ρ ∣ ∣ a 3 ∣ = 1 \begin{aligned} \because \quad &\rho a_3^T = r_3^T \quad and \quad |r_3|=1 \\ \therefore \quad & |\rho||a_3|=1 \\ \end{aligned} ρa3T=r3Tandr3=1ρ∣∣a3=1

∴ ρ = ± 1 ∣ a 3 ∣ \therefore \quad \rho=\frac{\pm 1}{|a_3|} ρ=a3±1

(2)提取u0,v0

∵ r 1 ⋅ r 3 = 0 r 2 ⋅ r 3 = 0 r 3 ⋅ r 3 = 1 \begin{aligned} \because \quad & r_1 \cdot r_3=0 \\ \quad \quad & r_2 \cdot r_3=0 \\ \quad \quad & r_3 \cdot r_3=1 \end{aligned} r1r3=0r2r3=0r3r3=1

∴ ρ a 1 T ⋅ ρ a 3 T = ( α r 1 T − α c o t θ r 2 T + u 0 R 3 T ) ⋅ r 3 T = 0 − 0 + u 0 ρ a 2 T ⋅ ρ a 3 T = ( β s i n θ r 2 T + v 0 r 3 T ) ⋅ r 3 T = 0 + v 0 \begin{aligned} \therefore \quad & \rho a_1^T \cdot \rho a_3^T \\ & =(\alpha r_1^T-\alpha cot \theta r_2^T+u_0 R_3^T) \cdot r_3^T\\ & =0-0+u_0\\\\ & \rho a_2^T \cdot \rho a_3^T \\ & =(\frac{\beta}{sin \theta}r_2^T+v_0r_3^T) \cdot r_3^T\\ & =0+v_0 \end{aligned} ρa1Tρa3T=(αr1Tαcor2T+u0R3T)r3T=00+u0ρa2Tρa3T=(sinθβr2T+v0r3T)r3T=0+v0

∴ u 0 = ρ 2 ( a 1 ⋅ a 3 ) v 0 = ρ 2 ( a 2 ⋅ a 3 ) \begin{aligned} \therefore \quad & u_0=\rho^2(a_1 \cdot a_3)\\ & v_0=\rho^2(a_2 \cdot a_3) \end{aligned} u0=ρ2(a1a3)v0=ρ2(a2a3)

(3)提取θ

∵ r 1 × r 2 = r 3 r 1 × r 3 = r 2 r 3 × r 3 = 0 ∣ a ⃗ ∣ = a ⃗ T ⋅ a ⃗ c o t θ = c o s θ s i n θ s i n 2 θ + c o s 2 θ = 1 \begin{aligned} \because \quad & r_1 \times r_2=r_3 \\ & r_1 \times r_3=r_2 \\ & r_3 \times r_3=0\\ & |\vec a|=\sqrt{\vec a^T \cdot \vec a} \\ & cot \theta = \frac{cos \theta}{sin \theta}\\ & sin^2 \theta + cos^2 \theta=1\\ \end{aligned} r1×r2=r3r1×r3=r2r3×r3=0a =a Ta co=sinθcosθsin2θ+cos2θ=1

∴ ρ 2 ( a 1 × a 3 ) = ( α r 1 T − α c o t θ r 2 T + u 0 R 3 T ) × r 3 T = α r 2 − α c o t θ r 1 ρ 2 ( a 2 × a 3 ) = ( β s i n θ r 2 T + v 0 r 3 T ) × r 3 T = β s i n θ r 1 \begin{aligned} \therefore \quad \rho^2 (a_1 \times a_3) & = (\alpha r_1^T-\alpha cot \theta r_2^T+u_0 R_3^T) \times r_3^T\\ &=\alpha r_2 - \alpha cot \theta r_1 \\ \rho^2 (a_2 \times a_3) & = (\frac{\beta}{sin \theta}r_2^T+v_0r_3^T) \times r_3^T\\ &=\frac{\beta}{sin \theta}r_1 \end{aligned} ρ2(a1×a3)ρ2(a2×a3)=(αr1Tαcor2T+u0R3T)×r3T=αr2αcor1=(sinθβr2T+v0r3T)×r3T=sinθβr1

∴ ρ 2 ∣ a 1 × a 3 ∣ = ∣ ( α r 2 − α c o t θ r 1 ) ∣ = ( α r 2 − α c o t θ r 1 ) T ⋅ ( α r 2 − α c o t θ r 1 ) = α 2 + ( α c o t θ ) 2 = α 2 ( 1 + ( c o s θ s i n θ ) 2 ) = ( α s i n θ ) 2 = ∣ α ∣ s i n θ ρ 2 ∣ a 2 × a 3 ∣ = ∣ β s i n θ r 1 ∣ = ( β s i n θ r 1 ) T ⋅ ( β s i n θ r 1 ) = ( β s i n θ ) 2 = ∣ β ∣ s i n θ \begin{aligned} \therefore \quad & \rho^2 |a_1 \times a_3|\\ & =|(\alpha r_2 - \alpha cot \theta r_1)|\\ & =\sqrt {(\alpha r_2 - \alpha cot \theta r_1)^T \cdot (\alpha r_2 - \alpha cot \theta r_1)}\\ & =\sqrt {\alpha^2 + (\alpha cot \theta)^2} \\ & =\sqrt {\alpha^2 (1+(\frac{cos \theta}{sin \theta})^2)}\\ & = \sqrt {(\frac{\alpha}{sin \theta})^2}\\ & = \frac{|\alpha|}{sin \theta}\\\\ & \rho^2 |a_2 \times a_3|\\ & = |\frac{\beta}{sin \theta}r_1|\\ & = \sqrt {(\frac{\beta}{sin \theta}r_1)^T \cdot (\frac{\beta}{sin \theta}r_1)}\\ & = \sqrt {(\frac{\beta}{sin \theta})^2}\\ & = \frac{|\beta|}{sin \theta} \end{aligned} ρ2a1×a3=(αr2αcor1)=(αr2αcor1)T(αr2αcor1) =α2+(αco)2 =α2(1+(sinθcosθ)2) =(sinθα)2 =sinθαρ2a2×a3=sinθβr1=(sinθβr1)T(sinθβr1) =(sinθβ)2 =sinθβ

∵ ρ 2 ( a 1 × a 3 ) ⋅ ρ 2 ( a 2 × a 3 ) = ( α r 2 − α c o t θ r 1 ) ⋅ ( β s i n θ r 1 ) = − α c o t θ β s i n θ = − α c o s θ s i n θ β s i n θ = − a c o s θ β s i n 2 θ ρ 2 ∣ a 1 × a 3 ∣ ⋅ ρ 2 ∣ a 2 × a 3 ∣ = ∣ α ∣ s i n θ ⋅ ∣ β ∣ s i n θ = ∣ α ∣ ∣ β ∣ s i n 2 θ \begin{aligned} \because \quad & \rho^2 (a_1 \times a_3) \cdot \rho^2 (a_2 \times a_3)\\ &=(\alpha r_2 - \alpha cot \theta r_1) \cdot (\frac{\beta}{sin \theta}r_1)\\ &=-\alpha cot \theta \frac{\beta}{sin \theta}\\ &=-\alpha \frac{cos \theta}{sin \theta} \frac{\beta}{sin \theta}\\ &=-\frac{a cos \theta \beta}{sin^2 \theta}\\\\ &\rho^2 |a_1 \times a_3| \cdot \rho^2 |a_2 \times a_3|\\ &=\frac{|\alpha|}{sin \theta} \cdot \frac{|\beta|}{sin \theta}\\ &= \frac{|\alpha||\beta|}{sin^2 \theta} \end{aligned} ρ2(a1×a3)ρ2(a2×a3)=(αr2αcor1)(sinθβr1)=αcosinθβ=αsinθcosθsinθβ=sin2θacosθβρ2a1×a3ρ2a2×a3=sinθαsinθβ=sin2θα∣∣β

∴ ρ 2 ( a 1 × a 3 ) ⋅ ρ 2 ( a 2 × a 3 ) ρ 2 ∣ a 1 × a 3 ∣ ⋅ ρ 2 ∣ a 2 × a 3 ∣ = − a c o s θ β s i n 2 θ s i n 2 θ ∣ α ∣ ∣ β ∣ = − c o s θ \begin{aligned} \therefore \quad & \frac{\rho^2 (a_1 \times a_3) \cdot \rho^2 (a_2 \times a_3)}{\rho^2 |a_1 \times a_3| \cdot \rho^2 |a_2 \times a_3|}\\ &=-\frac{a cos \theta \beta}{sin^2 \theta} \frac{sin^2 \theta}{|\alpha||\beta|}\\ &=-cos \theta \end{aligned} ρ2a1×a3ρ2a2×a3ρ2(a1×a3)ρ2(a2×a3)=sin2θacosθβα∣∣βsin2θ=cosθ

∴ c o s θ = − ( a 1 × a 3 ) ⋅ ( a 2 × a 3 ) ∣ a 1 × a 3 ∣ ⋅ ∣ a 2 × a 3 ∣ \therefore \quad cos \theta=-\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×a3a2×a3(a1×a3)(a2×a3)

如果 θ = 9 0 o \theta=90^o θ=90o,则 c o s θ = 0 cos \theta=0 cosθ=0,所以 ( a 1 × a 3 ) ⋅ ( a 2 × a 3 ) = 0 (a_1 \times a_3) \cdot (a_2 \times a_3)=0 (a1×a3)(a2×a3)=0,这正时之前提到的投影矩阵M满足零倾斜透视投影的条件;

(4)提取α,β

之前(3)中推导过:
∵ ρ 2 ∣ a 1 × a 3 ∣ = ∣ α ∣ s i n θ ρ 2 ∣ a 2 × a 3 ∣ = ∣ β ∣ s i n θ \begin{aligned} \because \quad & \rho^2 |a_1 \times a_3| = \frac{|\alpha|}{sin \theta}\\\\ & \rho^2 |a_2 \times a_3|= \frac{|\beta|}{sin \theta} \end{aligned} ρ2a1×a3=sinθαρ2a2×a3=sinθβ

∴ α = ρ 2 ∣ a 1 × a 3 ∣ s i n θ β = ρ 2 ∣ a 2 × a 3 ∣ s i n θ \begin{aligned} \therefore \quad & \alpha = \rho^2|a_1 \times a_3|sin \theta\\ & \beta = \rho^2|a_2 \times a_3|sin \theta \end{aligned} α=ρ2a1×a3sinθβ=ρ2a2×a3sinθ

如果 α = β \alpha=\beta α=β,所以 ∣ a 1 × a 3 ∣ = ∣ a 2 × a 3 ∣ |a_1 \times a_3|=|a_2 \times a_3| a1×a3=a2×a3,所以 ( a 1 × a 3 ) ⋅ ( a 1 × a 3 ) = ( a 2 × a 3 ) ⋅ ( a 2 × a 3 ) (a_1 \times a_3)\cdot(a_1 \times a_3)=(a_2 \times a_3) \cdot (a_2 \times a_3) (a1×a3)(a1×a3)=(a2×a3)(a2×a3),这也是前面提到的零倾斜透视投影的基础上宽高比为1的另一个条件。

1.3 提取摄像机外参数

(1)提取r3

∵ ρ a 3 T = r 3 T a n d ρ = ± 1 ∣ a 3 ∣ \because \quad \rho a_3^T = r_3^T \quad and \quad \rho=\frac{\pm1}{|a_3|} ρa3T=r3Tandρ=a3±1

∴ r 3 = ± a 3 ∣ a 3 ∣ \therefore \quad r_3 = \frac{\pm a_3}{|a_3|} r3=a3±a3

(2)提取r1

∵ ρ a 2 T × ρ a 3 T = ( β s i n θ r 2 T + v 0 r 3 T ) × r 3 T ∴ ρ 2 ( a 2 × a 3 ) = β s i n θ r 1 \begin{aligned} & \because \quad \rho a_2^T \times \rho a_3^T = (\frac{\beta}{sin \theta} r_2^T + v_0 r_3^T) \times r_3^T\\ & \therefore \quad \rho^2(a_2 \times a_3)=\frac{\beta}{sin \theta}r_1 \end{aligned} ρa2T×ρa3T=(sinθβr2T+v0r3T)×r3Tρ2(a2×a3)=sinθβr1

因为 r 1 r_1 r1 是单位向量,且 ρ 2 , β s i n θ 为实数 \rho^2,\frac{\beta}{sin \theta}为实数 ρ2sinθβ为实数
∴ r 1 = ( a 2 × a 3 ) ∣ a 2 × a 3 ∣ \begin{aligned} & \therefore \quad r_1=\frac{(a_2 \times a_3)}{|a_2 \times a_3|} \end{aligned} r1=a2×a3(a2×a3)

(3)提取r2

r 2 = r 3 × r 1 r_2 = r_3 \times r_1 r2=r3×r1

(4)提取T

ρ [ A b ] = K [ R T ] = [ K R K T ] ρ b = K T K − 1 ρ b = T \begin{aligned} \rho [A \quad b]=K[R \quad T]&=[KR \quad KT]\\ \rho b &= KT\\ K^{-1}\rho b & = T \end{aligned} ρ[Ab]=K[RT]ρbK1ρb=[KRKT]=KT=T

∴ T = ρ K − 1 b \therefore \quad T=\rho K^{-1}b T=ρK1b

1.4 摄像机标定结果

在这里插入图片描述

2. 径向畸变摄像机标定

2.1 径向畸变摄像机模型

如下图所示的径向畸变情况下,图像的放大率随距离光轴距离增加而减小:
在这里插入图片描述
在这里插入图片描述

对于桶形畸变来说, K p > 0 K_p>0 Kp>0,则 λ > 1 \lambda >1 λ>1;
对于桶形畸变来说, K p < 0 K_p<0 Kp<0,则 λ < 1 \lambda <1 λ<1;

在这里插入图片描述

∴ { u i = 1 λ m 1 P i m 3 P i v i = 1 λ m 2 P i m 3 P i ∴ { u i λ m 3 P i = m 1 P i v i λ m 3 P i = m 2 P i ∴ { m 1 P i − u i λ m 3 P i = 0 m 2 P i − v i λ m 3 P i = 0 \begin{aligned} & \therefore \quad \begin{cases} u_i = \frac{1}{\lambda}\frac{m_1P_i}{m_3P_i}\\ v_i = \frac{1}{\lambda}\frac{m_2P_i}{m_3P_i} \end{cases}\\ &\therefore \quad \begin{cases} u_i \lambda m_3 P_i=m_1P_i\\ v_i \lambda m_3 P_i=m_2P_i\\ \end{cases}\\ & \therefore \quad \begin{cases}m_1P_i-u_i \lambda m_3 P_i=0\\ m_2P_i-v_i \lambda m_3 P_i=0\\ \end{cases}\\ \end{aligned} { ui=λ1m3Pim1Pivi=λ1m3Pim2Pi{ uiλm3Pi=m1Piviλm3Pi=m2Pi{ m1Piuiλm3Pi=0m2Piviλm3Pi=0

Q m ⃗ = 0 Q \vec m=0 Qm =0

在第一节中此处列出的公式是:

P m ⃗ = 0 P \vec m=0 Pm =0
P是由3D点 P i P_i Pi和2D图像点 p i p_i pi构成的全是已知数的矩阵, m ⃗ \vec m m 为待求解的投影矩阵,所以这是一个线性方程

而Q里面除了包含由3D点 P i P_i Pi和2D图像点 p i p_i pi构成的已知数外,还包含未知数 λ \lambda λ所以Q不是线性方程组

此处即然 λ \lambda λ是未知数,为啥不能把 λ \lambda λ写到待求解的 m ⃗ \vec m m 里面呢,因为不同点的 λ \lambda λ是不一样的。

2.2 径向畸变投影矩阵求解

在这里插入图片描述

由于从初始解开始迭代的话,若初始解与实际相距较远,可能收敛会很慢。
因此,可以求解系统的线性部分,以找到近似解;适用该解作为整个系统的初始条件。

2.3 求解线性部分m1,m2

核心:通过比值消掉未知数 λ \lambda λ

在这里插入图片描述

3. 2D平面变换

3.1 2D欧式变换

在这里插入图片描述
在这里插入图片描述

3.2 2D相似变换

均匀伸缩变化如下:

在这里插入图片描述

相似变换由缩放变换和欧式变换合成:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.3 2D仿射变换

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.4 2D透视变换

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4. 3D空间变换

4.1 3D欧式变换

在这里插入图片描述
在这里插入图片描述

4.2 3D仿射变换

在这里插入图片描述
在这里插入图片描述

4.3 透视变换

在这里插入图片描述
在这里插入图片描述

第三章:单视测量

相机标定后,也无法从2D图像恢复出3D场景,因为2D点与光心连线上的任意3D点都满足条件。

1. 无穷远点、无穷远线与无穷远平面

1.1 2D平面

(1)2D平面直线

在这里插入图片描述

(2)2D平面直线交点

在这里插入图片描述

(3)2D平面无穷远点

在这里插入图片描述

(4)2D平面无穷远线

在这里插入图片描述

1.2 3D空间

(1)3D空间的面

在这里插入图片描述

(2)3D空间的直线

在这里插入图片描述

(3)3D空间无穷远点

在这里插入图片描述

(4)3D空间无穷远平面

在这里插入图片描述

2. 影消点与影消线

2.1 2D平面无穷远点和线的变换

(1)2D平面无穷远点的变换

在这里插入图片描述

(2)2D平面无穷远线的变换

在这里插入图片描述
在这里插入图片描述

2.2 影消点

在这里插入图片描述

2.3 影消点与直线方向

在这里插入图片描述

2.4 影消线

在这里插入图片描述
在这里插入图片描述

2.5 影消线与平面法向量

在这里插入图片描述

2.6 总结

在这里插入图片描述

3. 单视重构

3.1 两组平行线的夹角与影消点

在这里插入图片描述

3.2 w的性质

在这里插入图片描述

3.3 单视图标定举例

在这里插入图片描述
在这里插入图片描述

由于 ω \omega ω具有5个自由度,目前列出的3个方程无法求出 ω \omega ω,因此假定摄像机零倾斜且具有方形像素,则 ω 2 = 0 且 ω 1 = ω 3 \omega_2=0 且 \omega_1=\omega_3 ω2=0ω1=ω3,此时就可以求出 ω \omega ω,进而分解出 K K K

在这里插入图片描述

单视图恢复出的三维场景结构,无法恢复场景的实际比例;

第四章:三维重建基础与极几何

由于从单幅视图恢复场景三维结构比较困难,并且,单视图2D到3D的映射具有多义性,如下图所示,从单视图中很难辨别塔是模型还是实物;

在这里插入图片描述

1. 双视图与三角化

在这里插入图片描述

只要已知直线 l l l l ′ l' l,则三维点P就是两条直线的交点。因此,只要将直线 l l l l ′ l' l映射到同一坐标系下,就可以通过 P = l × l ′ P=l \times l' P=l×l求出点 P P P的三维坐标。

此时,问题演变成了:
已知二维像素坐标 p p p p ′ p' p K K K K ′ K' K,以及两视图之间的变换矩阵 R R R T T T
求解P点的三维坐标?

此时存在两种解法:线性解和非线性解;

1.1 线性解

在这里插入图片描述

1.2 非线性解

最小化重投影误差

在这里插入图片描述

1.3 实际情况中的问题定义

  • 在实际情况中,由于噪声的存在,两条直线通常不相交;
  • 且上述的线性解和非线性解都需要已知 K K K K ′ K' K R R R T T T
  • 然而,实际情况中,摄像机的内参 K K K K ′ K' K和两视图之间的变换矩阵 R R R T T T通常不可知,那么实际情况就变成了如下的问题:
    • 问题1:已知 p p p p ′ p' p,摄像机内参数 K K K K ′ K' K
    • 求解:摄像机的 R R R T T T以及P点的三维坐标?
    • 问题2:已知 p p p p ′ p' p
    • 求解:摄像机内参数 K K K K ′ K' K,摄像机的 R R R T T T以及P点的三维坐标?

1.4 多视图几何的关键问题

  • 摄像机几何:从一张或者多张图像中求解摄像机的内、外参数;
  • 场景几何:通过二至多幅图寻找3D场景坐标;
  • 对应关系:已知一个图像中的 p p p点,如何在另外一个图像中找到 p ′ p' p点;

2. 极几何与基础矩阵

2.1 极几何

极几何描述了同一场景或者物体的两个视点图像间的几何关系;

在这里插入图片描述

极几何可以将对应点搜索范围缩小到对应的极线上;

在这里插入图片描述

(1)极几何特例——平行视图
在这里插入图片描述
(2)极几何特例——前向平移(无旋转)
在这里插入图片描述

2.2 本质矩阵

本质矩阵对规范化摄像机拍摄的两个视点图像间的极几何关系进行代数描述;

在这里插入图片描述

p ′ p' p O 2 O_2 O2 O 1 O_1 O1坐标系下的坐标为:
p ′ = R p ′ ∗ + T p ′ ∗ = R T ( p ′ − T ) = R T p ′ − R T T \begin{aligned} p' & =Rp^{'*} +T \\ p^{'*} & =R^T(p'-T) \\ & =R^Tp'-R^TT \\ \end{aligned} pp=Rp+T=RT(pT)=RTpRTT
∵ O 2 = [ 0 0 0 ] T O 2 ∗ = − R T T \begin{aligned} \because O_2 & =[0 \quad 0 \quad 0 ]^T \\ O^{*}_{2} & =-R^TT \\ \end{aligned} O2O2=[000]T=RTT

对两个向量进行叉乘:
O 1 p ′ ∗ → × O 1 O 2 ∗ → = ( R T p ′ − R T T ) × ( − R T T ) = R T T × R T p ′ \begin{aligned} \overrightarrow{O_1 p^{'*}} \times \overrightarrow{O_1 O^{*}_2} & = (R^Tp'-R^TT) \times (-R^TT) \\ & = R^TT \times R^T p' \\ \end{aligned} O1p ×O1O2 =(RTpRTT)×(RTT)=RTT×RTp

得到的向量垂直于 O 1 O 2 P O_1O_2P O1O2P 极平面,因此可得:
[ R T T × R T p ′ ] T ⋅ p = 0 [ R T ⋅ ( T × p ′ ) ] T ⋅ p = 0 ( T × p ′ ) T ⋅ R ⋅ p = 0 ( [ T × ] ⋅ p ′ ) T ⋅ R ⋅ p = 0 p ′ T ⋅ [ T × ] ⋅ R ⋅ p = 0 p ′ T ⋅ [ T × R ] ⋅ p = 0 p ′ T ⋅ E ⋅ p = 0 \begin{aligned} & [R^TT \times R^T p']^T \cdot p=0 \\ & [R^T \cdot (T \times p')]^T \cdot p=0\\ & (T \times p')^T \cdot R \cdot p=0\\ & ([T_{\times}] \cdot p')^T \cdot R \cdot p=0\\ & p^{'T} \cdot [T_{\times}] \cdot R \cdot p=0\\ & p^{'T} \cdot [T \times R] \cdot p=0\\ & p^{'T} \cdot E \cdot p=0\\ \end{aligned} [RTT×RTp]Tp=0[RT(T×p)]Tp=0(T×p)TRp=0([T×]p)TRp=0pT[T×]Rp=0pT[T×R]p=0pTEp=0

最终,本质矩阵 E = T × R = [ T × ] R E=T \times R = [T_{\times}] R E=T×R=[T×]R
在这里插入图片描述

2.3 基础矩阵

基础矩阵对一般的透视摄像机拍摄的两个视点的图像间的极几何关系进行代数描述。

推导思路:将一般相机变换到规范化相机,用本质矩阵来表达;
p = K [ I 0 ] P K − 1 p = [ I 0 ] P \begin{aligned} p & = K[I \quad 0]P \\ K^{-1}p & = [I \quad 0]P \end{aligned} pK1p=K[I0]P=[I0]P
则规范化相机下左右两视图的像素点坐标演变为:
p c = K − 1 p p c ′ = K ′ − 1 p ′ \begin{aligned} p_c & = K^{-1}p \\ p_c^{'} & = K^{'-1}p' \\ \end{aligned} pcpc=K1p=K1p
带入本质矩阵:
p c ′ T E p c = p c ′ T ⋅ [ T × ] R ⋅ p c = ( K ′ − 1 p ′ ) T ⋅ [ T × ] R ⋅ K − 1 p = p ′ T K ′ − T [ T × ] R K − 1 p = p ′ T F p \begin{aligned} p_c^{'T}Ep_c & = p_c^{'T} \cdot [T_{\times}] R \cdot p_c \\ & =(K^{'-1}p')^T \cdot [T_{\times}] R \cdot K^{-1}p \\ & = p^{'T}K^{'-T} [T_{\times}] R K^{-1}p \\ & = p^{'T}Fp \end{aligned} pcTEpc=pcT[T×]Rpc=(K1p)T[T×]RK1p=pTKT[T×]RK1p=pTFp

最终基础矩阵F为:
F = K ′ − T [ T × ] R K − 1 F=K^{'-T} [T_{\times}] R K^{-1} F=KT[T×]RK1
在这里插入图片描述

3. 基础矩阵估计

3.1 八点法

p ′ T F p = 0 p^{'T}Fp=0 pTFp=0

F有7个自由度,理论上7点可以解出F,但计算比较复杂;

(1)单点方程矩阵形式展开:
在这里插入图片描述
(2)选取八个点,列出齐次线性方程:在这里插入图片描述
(3)最小二乘求解:

通常 N > 8 N>8 N>8,为超定方程组,采用最小二乘求解: 在这里插入图片描述

(4)满秩矩阵分解:

上述经过最小二乘估计得到的 F ^ \hat F F^通常秩为3,为满秩矩阵,但基础矩阵 F F F的秩为2。
在这里插入图片描述

(5)八点法求解总结

在这里插入图片描述
(6)八点法存在的问题

  • W矩阵中各个元素的数值差异过大;
  • SVD分解有数值计算问题
  • 导致求解结果通常有10+pixel左右的误差;

3.2 归一化八点法

在这里插入图片描述

对每幅图像施加变换T(平移与缩放),让其满足如下条件:

  • 原点 = 图像上点的重心;
  • 各个像点到坐标原点的均方根距离等于 2 \sqrt 2 2 ;

归一化八点法的计算步骤如下:

在这里插入图片描述

归一化八点法的精度高,推荐使用;

4. 单应矩阵

单应矩阵描述空间中的平面在两个摄像机下的投影几何;

在这里插入图片描述

4.1 单应矩阵推导

在这里插入图片描述

4.2 单应矩阵估计

在这里插入图片描述

4.3 单应矩阵性质

在这里插入图片描述

第五章:双目立体视觉

1. 基于平行视图的双目立体视觉

在这里插入图片描述

1.1 平行视图基础矩阵

由于 e ′ e' e O 2 O_2 O2 在右视图的投影,可以列出如下等式:
在这里插入图片描述

给予叉乘性质(对于任何向量 α \alpha α,如果 B B B可逆,相差一个尺度情况下):
[ a × ] B = B − T [ ( B − 1 α ) × ] [a_{\times}]B=B^{-T}[(B^{-1}\alpha)_{\times}] [a×]B=BT[(B1α)×]

α = T \alpha=T α=T B = K ′ − 1 B=K^{'-1} B=K1,则:
[ T × ] K ′ − 1 = K ′ T [ ( K ′ T ) × ] [ T × ] = K ′ T [ ( K ′ T ) × ] K ′ \begin{aligned} [T_\times]K^{'-1} & =K^{'T}[(K'T)_\times] \\ [T_\times] & =K^{'T}[(K'T)_\times]K' \\ \end{aligned} [T×]K1[T×]=KT[(KT)×]=KT[(KT)×]K

[ T × ] [T_\times] [T×]带入到基础矩阵F中:
F = K ′ − T [ T × ] R K − 1 = K ′ − T K ′ T [ ( K ′ T ) × ] K ′ R K − 1 = [ ( K ′ T ) × ] K ′ R K − 1 = [ e × ′ ] K ′ R K − 1 \begin{aligned} F & =K^{'-T} [T_{\times}] R K^{-1} \\ & =K^{'-T} K^{'T}[(K'T)_\times]K' R K^{-1} \\ & = [(K'T)_\times]K' R K^{-1}\\ & = [e'_\times]K' R K^{-1} \\ \end{aligned} F=KT[T×]RK1=KTKT[(KT)×]KRK1=[(KT)×]KRK1=[e×]KRK1

最终推导得到:
F = [ e × ′ ] K ′ R K − 1 F = [e'_\times]K' R K^{-1} F=[e×]KRK1

在平行视图中,满足以下条件:

  • 相机相同: K = K ′ K=K' K=K
  • 无旋转: R = I R=I R=I
  • x x x方向平移: T = [ T 0 0 ] T=\begin{bmatrix} T\\ 0\\ 0\\ \end{bmatrix} T= T00
  • 无穷远极点: e ′ = [ 1 0 0 ] e'=\begin{bmatrix} 1\\ 0\\ 0\\ \end{bmatrix} e= 100
    因此:
    在这里插入图片描述

1.2 平行视图极几何

(1)平行视图极线
在这里插入图片描述

极线是水平的,平行于 u u u轴!

(2)平行视图对应点搜索
在这里插入图片描述

对应点 p p p p ′ p' p v v v 坐标是一样的;
因此, p ′ p' p点只需要在 p p p点的 v v v坐标所在的线寻找即可;

1.3 平行视图三角测量

在这里插入图片描述

利用三角形相似原理,可以得到
p u − p u ′ f = B Z \frac{p_u-p_u'}{f}=\frac{B}{Z} fpupu=ZB
p u − p u ′ = B ⋅ f Z p_u-p_u'=\frac{B \cdot f}{Z} pupu=ZBf

由此可得:视差与深度Z成反比!
也就是说,物体离人眼越远,左右眼观察到的图像越相似;

“视差与深度Z成反比”这个结论可以方便我们从视差图中推导得到深度图。(如下图所示,视差图颜色越暗,距离双目摄像机越远)

在这里插入图片描述

2. 图像校正

在平行视图中,可以很方便利用视差获取深度图,但是,再实际构建的双目立体视觉系统中,如何保证两个视图是完全平行的呢,这就需要进行图像校正。

在这里插入图片描述

校正结果如下:

在这里插入图片描述

3. 对应点搜索

图像校正, p ′ p' p点直接演着扫描线寻找即可;

3.1 相关匹配

在这里插入图片描述

相关法不适用于亮度变化明显的case;

在这里插入图片描述

3.2 归一化相关匹配

在这里插入图片描述

匹配时采用的窗口大小的影响:

  • 当窗口较小时,细节比较丰富,但噪声更多;
  • 当噪声较大时,视差图更平滑,噪声更少,但丢失了细节;

在这里插入图片描述

3.3 相关法存在问题

(1)透视缩短
在这里插入图片描述

(2)遮挡
在这里插入图片描述

(3)基线选择

  • 为了减少透视缩短和遮挡的影响,希望有更小的B/Z(基线深度比)比值;
  • 但是,当B/Z太小时,对应点匹配的小误差意味着估算深度的大误差;
    在这里插入图片描述

(4)当存在同质区域或者重复模式时,相关法会失效;

第六章:多视图几何

1. 运动恢复结构问题

在这里插入图片描述

三种典型的运动恢复结构任务包括:

  • 欧式结构回复(摄像机内参数已知,外参数未知)
  • 仿射结构恢复(摄像机为仿射像机,内外参数均未知)
  • 透视结构恢复(摄像机为透视相机,内外参数均未知)

2. 欧式结构恢复

2.1 欧式结构恢复问题定义

在这里插入图片描述

2.2 两视图欧式结构恢复

在这里插入图片描述

  • 以左视图为参考坐标系,则左视图 [ R T ] = [ I 0 ] [R \quad T]=[I \quad 0] [RT]=[I0],并且摄像机内参数已知,那么左视图投影矩阵 M 1 M_1 M1已知;
  • 当右视图的投影矩阵也已知时,便可以利用三角化(线性解或非线性解)求解得到三维点的坐标;
  • 但是,我们只知道右视图的摄像机内参数,并不知道右视图相对于左视图的外参数 [ R T ] [R \quad T] [RT],因此无法直接使用三角化求解,必须先求解右视图的 [ R T ] [R \quad T] [RT]

具体求解步骤如下:

在这里插入图片描述
(1)求解基础矩阵F

在这里插入图片描述

(2)求解本质矩阵

在这里插入图片描述

(3)分解本质矩阵——求解 [ R T ] [R \quad T] [RT]

在这里插入图片描述

(4)三角化

在这里插入图片描述

2.3 欧式结构恢复歧义

歧义:恢复的结构与真实场景之间相差一个相似变化(旋转、平移、缩放);

度量重构:这种恢复的场景与真实场景之间仅存在相似变换的重构称为度量重构;

3. 仿射结构恢复

在这里插入图片描述

3.1 仿射结构恢复问题定义

在这里插入图片描述

3.2 基于因式分解的仿射结构恢复

(1)数据中心化
在这里插入图片描述

(2)因式分解
在这里插入图片描述

3.3 仿射结构恢复歧义

D = M S = ( M H ) ( H − 1 S ) = M ∗ S ∗ D=MS=(MH)(H^{-1}S)=M^*S^* D=MS=(MH)(H1S)=MS

仿射结构恢复分解不唯一,存在歧义,歧义可以有任意的 3 × 3 3\times 3 3×3可逆矩阵H表达;

在这里插入图片描述

4. 透视结构恢复

4.1 代数法(两视图)

在这里插入图片描述
(1)求解基础矩阵F

在这里插入图片描述

(2)估计摄像机矩阵 M 1 M_1 M1 M 2 M_2 M2

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

(3)三角化

在这里插入图片描述

4.2 代数方法(多视图)

分别对每一个图像对计算运动与结构,然后进行增量法构建:

在这里插入图片描述

4.3 光束法平差

  • 在仿射变换结构恢复所采用的因式分解法中,需要假定所有3D点在所有摄像机均是可见的,因此当存在遮挡,或者建立对应点关系失败时,能够用于构建观测矩阵D的点很少,重建出来的点数就很少;
  • 透视结构恢复采用代数法求解,容易出现误差的累积;

光束法平差通过最小化重投影误差来恢复运动和结构,是一种非线性解法;

在这里插入图片描述

第七章:运动恢复结构(SFM)系统设计

1. PnP问题(补充知识)

在这里插入图片描述

1.1 P3P求解摄像机位姿

在这里插入图片描述

2. SFM系统描述

在这里插入图片描述

2.1 SFM系统数学描述

在这里插入图片描述

3. 两视图SFM重构(两视图欧式结构恢复)

3.1 整体流程

在这里插入图片描述

3.2 RANSAC估计基础矩阵

在这里插入图片描述

4. 基于增量法的SFM系统(OpenMVG)

在这里插入图片描述

第八章:SLAM系统设计

1. SLAM介绍

Simultaneous Localization and Mapping(SLAM):同时定位和建图

  • Localization:传感器的位置和姿态;
  • Mapping:地图构建
  • 应用场景:定位、导航、避障、重建、交互

SLAM传感器分类:

  • 携带于机器人本体的,例如轮式编码器、相机、激光等;
    安装于环境中的,如导轨、二维码标识等;

开源SLAM方案
在这里插入图片描述

2. ORB-SLAM系统

同时运行三个线程:

  • 跟踪:确定当前帧位姿;
  • 建图:完成局部地图构建;
  • 回环修正:回环检测以及基于回环信息修正系统漂移;

在这里插入图片描述

2.1 关键词介绍

(1)地图点

  • 世界坐标系下的3D点坐标;
  • 观测方向,即所有可以观测到该特征点的视图所产生的观测方向均值;
  • ORB特征描述子;
  • 该点能被观测到的最大距离与最小距离;

(2)关键帧

  • 摄像机位姿;
  • 内参数;
  • 该帧中提取到的全部ORB特征描述子,以及它们和地图点之间的对应关系;

(3)共视图

一种有向无权图,节点为关键帧,如两个节点共享的地图点数量大于阈值(至少15个),则存在一条边,边的权重设置为共享地图点的个数。

(4)本质图

是共视图的子图,保留所有节点,边数量相较于共视图更少,尽量减少边,其作用是加速回环校正的计算。
本质图=生成树+共视图边权重超过100的边+回环边

2.2 跟踪线程

跟踪(Tracking):给定当前帧,从图像提取ORB特征,根据上一帧估计当前帧姿态,估计失败时,尝试全局重定位初始化位姿,构建局部地图进一步优化位姿,并确定是否设置成关键帧。

在这里插入图片描述

2.3 建图线程

建图(LocalMapping):完成局部地图构建。包括对关键帧的插入,验证最近生成的地图点并进行筛选,然后生成新的地图点,实用局部光束法平差(Local BA),最后再对插入的关键帧进行筛选,去除多余的关键帧。

在这里插入图片描述

2.4 回环修正线程

回环修正(LoopClosing):包含闭环检测和闭环校正两步。闭环探测先使用词袋模型找到闭环图片,然后通过Sim3算法计算相似变换。闭环校正主要是闭环融合和Essential Graph的图优化。

猜你喜欢

转载自blog.csdn.net/xijuezhu8128/article/details/126273044
今日推荐