本文系统梳理从相机成像模型,通过不同图像帧之间的构造几何约束求解位姿变换,再根据位姿变换和匹配点还原三维坐标的过程,可以作为基于特征点法的视觉SLAM的数学基础。
1、相机成像模型
1.1、针孔相机模型
实际相机的成像方式通常很复杂,针孔模型是对这种复杂成像方式的简化描述,其原理如下图
图中,O−x−y−zO-x-y-zO−x−y−z为相机坐标系{C}\{C\}{C},其xxx轴,yyy轴位于针孔平面上,一般要求从相机后方看去xxx轴向右,yyy轴向下,OOO是针孔模型中的针孔,也称为摄像机的光心;O′−ximg−yimgO^{\prime}-x^{\mathrm{img}}-y^{\mathrm{img}}O′−ximg−yimg为物理成像坐标系,位于物理成像平面上。针孔平面与物理成像平面平行,二者之间距离为焦距fff,也即OO′OO^{\prime}OO′的距离。习惯上,规定从相机后侧看时,x,ximgx,x^{\mathrm{img}}x,ximg轴向右,y,yimgy,y^{\mathrm{img}}y,yimg轴向下,zzz轴向前。
从相机坐标系下的空间点p=[X,Y,Z]T\mathbf{p}=[X,Y,Z]^{T}p=[X,Y,Z]T发出的光线,穿过针孔OOO,落在物理成像平面上,成为点[Ximg,Yimg]T[X^\mathrm{img},Y^{\mathrm{img}}]^{T}[Ximg,Yimg]T,考虑到XXX和XimgX^{\mathrm{img}}Ximg,YYY和YimgY^{\mathrm{img}}Yimg符号必定相反,根据三角形相似关系,可以得到
Zf=−XXimg=−YYimg(1)
\frac{Z}{f}=-\frac{X}{X^{\mathrm{img}}}=-\frac{Y}{Y^{\mathrm{img}}}\tag{1}
fZ=−XimgX=−YimgY(1)
整理得到物理成像平面上的坐标
Ximg=−fXZYimg=−fYZ
X^{\mathrm{img}}=-f\frac{X}{Z}\\
Y^{\mathrm{img}}=-f\frac{Y}{Z}
Ximg=−fZXYimg=−fZY
负号表示成像为倒向,在实际成像过程中,为方便起见,经过算法内部调整为正像,即将物理成像平面上的坐标变为
Ximg=fXZYimg=fYZ
\begin{align*}
X^{\mathrm{img}}=f\frac{X}{Z}\tag{2a}\\
Y^{\mathrm{img}}=f\frac{Y}{Z}\tag{2b}
\end{align*}
Ximg=fZXYimg=fZY(2a)(2b)
1.2、像素坐标系
在相机中,最终获得的是[Ximg,Yimg]T[X^\mathrm{img},Y^{\mathrm{img}}]^{T}[Ximg,Yimg]T对应的像素坐标[⌊U⌋,⌊V⌋]T[\lfloor{U}\rfloor,\lfloor{V}\rfloor]^{T}[⌊U⌋,⌊V⌋]T,其中
{U=αXimg+cxV=βYimg+cy(3)
\left\{
\begin{align*}
U&=\alpha{X}^{\mathrm{img}}+c_{x}\\
V&=\beta{Y}^{\mathrm{img}}+c_{y}
\end{align*}
\right.\tag{3}
{UV=αXimg+cx=βYimg+cy(3)
其中,α,β\alpha,\betaα,β表示u,vu,vu,v轴上单位距离对应的像素数,cx,cyc_{x},c_{y}cx,cy是相机光心的像素坐标
{U=fxXZ+cxV=fyYZ+cy(4)
\left\{
\begin{align*}
U&=f_{x}\frac{X^{\mathrm{}}}{Z}+c_{x}\\
V&=f_{y}\frac{Y}{Z}+c_{y}
\end{align*}
\right.\tag{4}
⎩⎨⎧UV=fxZX+cx=fyZY+cy(4)
其中fx=αff_{x}=\alpha{f}fx=αf,fy=βff_{y}=\beta{f}fy=βf
根据以上关系,可以得到下式,其中左侧是齐次坐标,右侧是非齐次坐标
[UV1]=1Z[fx0cx0fycy001][XYZ](5)
\left[\begin{align*}
U\\V\\1
\end{align*}\right]=
\frac{1}{Z}\left[
\begin{array}{ccc}
f_{x}&0&c_{x}\\
0&f_{y}&c_{y}\\
0&0&1
\end{array}
\right]
\left[
\begin{array}{ccc}
X\\Y\\Z
\end{array}
\right]\tag{5}
UV1=Z1fx000fy0cxcy1XYZ(5)
定义相机的内参数矩阵
K=[fx0cx0fycy001](6)
\mathbf{K}=\left[\begin{array}{ccc}
f_{x}&0&c_{x}\\
0&f_{y}&c_{y}\\
0&0&1
\end{array}\right]\tag{6}
K=fx000fy0cxcy1(6)
因为fx,fy≠0f_{x},f_{y}\neq0fx,fy=0,容易看出,相机的内参数矩阵是可逆的,该矩阵通常右生产厂商标定,在出厂后不会再发生变化
设q=[U,V,1]T\mathbf{q}=[U,V,1]^{T}q=[U,V,1]T,则
q=1ZKp(7)
\mathbf{q}=\frac{1}{Z}\mathbf{K}\mathbf{p}\tag{7}
q=Z1Kp(7)
实际的像素坐标对求出的q\mathbf{q}q取整即可。
设初始相机坐标系{C0}\{C_{0}\}{C0}为世界坐标系{W}\{W\}{W},若已知{W}\{W\}{W}到相机坐标系相机坐标系{Ck},k⩾0\{C_{k}\},k\geqslant0{Ck},k⩾0的位姿,当得到新一帧图像Imgk+1\mathrm{Img}_{k+1}Imgk+1后,根据拍摄到的图像帧估计从相机坐标系{Ck}\{C_{k}\}{Ck}到{Ck+1}\{C_{k+1}\}{Ck+1}的旋转矩阵和平移向量Rck+1ck,tck+1ckck+1\mathbf{R}_{c_{k+1}c_{k}},\mathbf{t}^{c_{k+1}}_{c_{k+1}c_{k}}Rck+1ck,tck+1ckck+1,这两个量在后文中简记作R,t\mathbf{R},\mathbf{t}R,t,是计算的目标
1.3、等价成像模型
成像模型可以做两处等价。
第一处等价:根据(2)(2)(2),把“将倒向调整为正像的过程”等价为将成像平面对称地放到针孔平面前方,成像位置位于针孔p\mathbf{p}p与针孔OOO的连线与对称的成像平面的交点上;
第二处等价:根据(7)(7)(7),成像过程可等价为先将空间点p=[X,Y,Z]T\mathbf{p}=[X,Y,Z]^{T}p=[X,Y,Z]T转换到归一化平面z=1z=1z=1上的p‾\overline{\mathbf{p}}p,即令
p‾=[X‾,Y‾,1]T=[XZ,YZ,1]T(8)
\overline{\mathbf{p}}=\begin{bmatrix}\overline{X},\overline{Y},1\end{bmatrix}^{T}=\begin{bmatrix}\frac{X}{Z},\frac{Y}{Z},1\end{bmatrix}^{T}\tag{8}
p=[X,Y,1]T=[ZX,ZY,1]T(8)
再根据第一处等价投影到对称的成像平面,成为下面的坐标后再取整数
q=Kp‾(9)
\mathbf{q}=\mathbf{K}\overline{\mathbf{p}}\tag{9}
q=Kp(9)
上述等价过程的示意图如下:
2、已知2D-2D匹配数据估算相机运动
2.1、2D-2D存在的约束
2.1.1、对极约束
设三维空间点PPP在两帧相机坐标系下坐标为p1,p2\mathbf{p}_{1},\mathbf{p}_{2}p1,p2,二者的归一化坐标为p‾1,p‾2\overline{\mathbf{p}}_{1},\overline{\mathbf{p}}_{2}p1,p2,这两个归一化坐标对应的空间点分别为P1,P2P_{1},P_{2}P1,P2,容易看出O1,O2,P,P1,P2O_{1},O_{2},P,P_{1},P_{2}O1,O2,P,P1,P2位于同一平面上,故
O2P2→⋅(O2O1→×O1P1→)=0(10)
\overrightarrow{O_{2}P_{2}}\cdot\left(\overrightarrow{O_{2}O_{1}}\times\overrightarrow{O_{1}P_{1}}\right)=0\tag{10}
O2P2⋅(O2O1×O1P1)=0(10)
下面在{C2}\{C_{2}\}{C2}坐标系下表示(8)(8)(8),在{C2}\{C_{2}\}{C2}坐标系下,O2P2→=p‾2\overrightarrow{O_{2}P_{2}}=\overline{\mathbf{p}}_{2}O2P2=p2,O2O1→=t\overrightarrow{O_{2}O_{1}}=\mathbf{t}O2O1=t,O1P1→=Rp‾1+t\overrightarrow{O_{1}P_{1}}=\mathbf{R}\overline{\mathbf{p}}_{1}+\mathbf{t}O1P1=Rp1+t,故(8)(8)(8)可改写为
p‾2T(t∧(Rp‾1+t))=0
\overline{\mathbf{p}}_{2}^{T}\left(\mathbf{t}^{\wedge}(\mathbf{R}\overline{\mathbf{p}}_{1}+\mathbf{t})\right)=0
p2T(t∧(Rp1+t))=0
进一步化简可得
p‾2T(t∧R)p‾1=0(11)
\overline{\mathbf{p}}_{2}^{T}\left(\mathbf{t}^{\wedge}\mathbf{R}\right)\overline{\mathbf{p}}_{1}=0\tag{11}
p2T(t∧R)p1=0(11)
根据归一化坐标和像素坐标的转换关系,得到
q2T[(K−1)T(t∧R)K−1]q1=0(12)
\mathbf{q}_{2}^{T}\left[(\mathbf{K}^{-1})^{T}(\mathbf{t}^{\wedge}\mathbf{R})\mathbf{K}^{-1}\right]\mathbf{q}_{1}=0\tag{12}
q2T[(K−1)T(t∧R)K−1]q1=0(12)
称下面的矩阵为本质矩阵(Essential Matrix)
E=t∧R
\mathbf{E}=\mathbf{t}^{\wedge}\mathbf{R}
E=t∧R
需要说明,一个矩阵能够成为本质矩阵当且仅当其的奇异值为σ,σ,0\sigma,\sigma,0σ,σ,0,其中σ\sigmaσ为任意实数
称下面的矩阵为基础矩阵(Fundamental Matrix)
F=(K−1)TEK−1
\mathbf{F}=(\mathbf{K}^{-1})^{T}\mathbf{E}\mathbf{K}^{-1}
F=(K−1)TEK−1
(11)(11)(11)可改写为
p‾2TEp‾1=0
\begin{align*}
\overline{\mathbf{p}}_{2}^{T}\mathbf{E}\overline{\mathbf{p}}_{1}=0\tag{13}\\
\end{align*}
p2TEp1=0(13)
(12)(12)(12)可改写为
q2TFq1=0(14)
\mathbf{q}_{2}^{T}\mathbf{F}\mathbf{q}_{1}=0\tag{14}
q2TFq1=0(14)
(11),(12)(11),(12)(11),(12)或(13),(14)(13),(14)(13),(14)称为对极约束
2.2、约束矩阵的计算
本质矩阵,基础矩阵,单应矩阵都可以做为相机运动过程中存在的约束,可以通过已知的匹配点可计算这些约束矩阵
2.2.1、基础矩阵的计算
将(14)(14)(14)的矩阵乘法写成元素形式
[U2V21][f1f2f3f4f5f6f7f8f9][U1V11]=0
\begin{bmatrix}
U_{2}&V_{2}&1
\end{bmatrix}
\begin{bmatrix}
f_{1}&f_{2}&f_{3}\\
f_{4}&f_{5}&f_{6}\\
f_{7}&f_{8}&f_{9}
\end{bmatrix}
\begin{bmatrix}
U_{1}\\
V_{1}\\
1
\end{bmatrix}=
0
[U2V21]f1f4f7f2f5f8f3f6f9U1V11=0
令f=[f1,⋯ ,f9]T\mathbf{f}=[f_{1},\cdots,f_{9}]^{T}f=[f1,⋯,f9]T,经过整理,上式可以等价地改写为
[U1U2U2V1U2V2U1V1V2V2U1V11]f=0(15)
\begin{bmatrix}
U_{1}U_{2}&U_{2}V_{1}&U_{2}&V_{2}U_{1}&V_{1}V_{2}&V_{2}&U_{1}&V_{1}&1
\end{bmatrix}
\mathbf{f}=0\tag{15}
[U1U2U2V1U2V2U1V1V2V2U1V11]f=0(15)
通常限定∥f∥=1\|\mathbf{f}\|=1∥f∥=1保证尺度确定,根据上式可以看出,一组匹配点可以构造出一项约束
设匹配点组成的系数矩阵为A∈Rn×9\mathbf{A}\in\mathbb{R}^{n\times9}A∈Rn×9,nnn为匹配点对数,则基础矩阵的约束方程(20)(20)(20)可改写为
Af=0∥f∥=1(16)
\mathbf{A}\mathbf{f}=\mathbf{0}\quad\|\mathbf{f}\|=1\tag{16}
Af=0∥f∥=1(16)
当匹配点较少时,rank(A)<8\mathrm{rank}(\mathbf{A})<8rank(A)<8时,(23)(23)(23)为欠定问题,具有多个解;当rank(A)=8\mathrm{rank}(\mathbf{A})=8rank(A)=8时,(21)(21)(21)为适定问题,具有唯一解,可直接通过解线性方程组获得;当匹配点较多时,rank(A)>8\mathrm{rank}(\mathbf{A})>8rank(A)>8时,(23)(23)(23)变为超定问题,线性方程组无解,故可以构造如下优化问题求近似解
f~=argminf:∥f∥=1 12∥Af∥2(17)
\begin{align*}
\tilde{\mathbf{f}}
&=\underset{\mathbf{f}:\|\mathbf{f}\|=1}{\mathrm{arg}\min}\,\frac{1}{2}\|\mathbf{A}\mathbf{f}\|^{2}\\
\end{align*}\tag{17}
f~=f:∥f∥=1argmin21∥Af∥2(17)
对A\mathbf{A}A做奇异值分解
A=UΣVT
\mathbf{A}=\mathbf{U}\mathbf{\Sigma}\mathbf{V}^{T}
A=UΣVT
其中V=[v1,⋯ ,v9]\mathbf{V}=[\mathbf{v}_{1},\cdots,\mathbf{v}_{9}]V=[v1,⋯,v9]按照特征值降序排列,容易知道f~\tilde{\mathbf{f}}f~可取为
f~=±v9(18)
\tilde{\mathbf{f}}=\pm\mathbf{v}_{9}\tag{18}
f~=±v9(18)
将f~\tilde{\mathbf{f}}f~转变为F~\tilde{\mathbf{F}}F~得到基础矩阵,并根据定义求出E~=KTF~K\tilde{\mathbf{E}}=\mathbf{K}^{T}\tilde{\mathbf{F}}\mathbf{K}E~=KTF~K。但受误差影响此时E~\tilde{\mathbf{E}}E~不一定满足成为本质矩阵的充要条件,需要进一步变换,首先对E~\tilde{\mathbf{E}}E~做SVD分解
E~=U~diag(σ~1,σ~2,σ~3)V~T
\tilde{\mathbf{E}}=\tilde{\mathbf{U}}\mathrm{diag}(\tilde{\sigma}_{1},\tilde{\sigma}_{2},\tilde{\sigma}_{3})\tilde{\mathbf{V}}^{T}
E~=U~diag(σ~1,σ~2,σ~3)V~T
可令
E∗=U~diag(σ~1+σ~22,σ~1+σ~22,0)V~T(19)
\mathbf{E}^{\ast}=\tilde{\mathbf{U}}\mathrm{diag}(\frac{\tilde{\sigma}_{1}+\tilde{\sigma}_{2}}{2},\frac{\tilde{\sigma}_{1}+\tilde{\sigma}_{2}}{2},0)\tilde{\mathbf{V}}^{T}\tag{19}
E∗=U~diag(2σ~1+σ~2,2σ~1+σ~2,0)V~T(19)
为最终所求的本质矩阵,E∗\mathbf{E}^{\ast}E∗满足成为本质矩阵的充要条件
2.3、基于约束矩阵的运动恢复
得到约束矩阵后,可通过分解约束矩阵来恢复运动
2.3.1、基于基础矩阵的运动恢复
得到基础矩阵F\mathbf{F}F后,可以根据相机内参数矩阵转换为本质矩阵E=KTFK\mathbf{E}=\mathbf{K}^{T}\mathbf{F}\mathbf{K}E=KTFK
对E\mathbf{E}E进行奇异值分解
E=UΣVT
\mathbf{E}=\mathbf{U}\boldsymbol\Sigma\mathbf{V}^{T}
E=UΣVT
满足E=t∧R\mathbf{E}=\mathbf{t}^{\wedge}\mathbf{R}E=t∧R的t\mathbf{t}t和R\mathbf{R}R各有两个可行解,具体形式如下
t∧={UWΣUTUWTΣUTR={UW′VTUW′W′TVT(20)
\begin{align*}
\mathbf{t}^{\wedge}=\left\{\begin{array}{ll}\mathbf{U}\mathbf{W}\boldsymbol\Sigma\mathbf{U}^{T}\\\mathbf{U}\mathbf{W}^{T}\boldsymbol\Sigma\mathbf{U}^{T}\end{array}\right.\quad
\mathbf{R}=\left\{\begin{array}{ll}\mathbf{U}\mathbf{W}^{\prime}\mathbf{V}^{T}\\\mathbf{U}\mathbf{W}^{\prime}\vphantom{\mathbf{W}^{\prime}}^{T}\mathbf{V}^{T}\end{array}\right.
\end{align*}\tag{20}
t∧={UWΣUTUWTΣUTR={UW′VTUW′W′TVT(20)
其中W=[0−10100001]\mathbf{W}=\begin{bmatrix}0&-1&0\\1&0&0\\0&0&1\end{bmatrix}W=010−100001,W′={Wdet(UV)=1−Wdet(UV)=−1\mathbf{W}^{\prime}=\left\{\begin{array}{cl}\mathbf{W}&\det(\mathbf{U}\mathbf{V})=1\\-\mathbf{W}&\det(\mathbf{U}\mathbf{V})=-1\end{array}\right.W′={W−Wdet(UV)=1det(UV)=−1以保证det(R)=1\det(\mathbf{R})=1det(R)=1。满足E=t∧R\mathbf{E}=\mathbf{t}^{\wedge}\mathbf{R}E=t∧R的(R,t)(\mathbf{R},\mathbf{t})(R,t)共有四个可行解,为t\mathbf{t}t和R\mathbf{R}R各自可行解的两两组合。
可以证明,若本质矩阵正确,则四个解中有且仅有一个解使得在两相机中都可见的空间中点在两个相机中的深度均为正值,实践中可以通过比较三角化成功的点的数量找到正确的解。
3、三角化
已知第一幅图像对应的世界坐标系下的相机位姿(R1,t1)(\mathbf{R}_{1},\mathbf{t}_{1})(R1,t1),得到两幅图像对应的相机相对运动R,t\mathbf{R},\mathbf{t}R,t后,可以计算第二幅图像对应的世界坐标系下的相机位姿(R2,t2)(\mathbf{R}_{2},\mathbf{t}_{2})(R2,t2),知两幅图像的二维匹配点对q1,q2\mathbf{q}_{1},\mathbf{q}_{2}q1,q2,可以计算从世界坐标系下的三维点到像素坐标的投影矩阵Ψ1=K[R1,t1],Ψ2=K[R2,t2]\boldsymbol\Psi_{1}=\mathbf{K}[\mathbf{R}_{1},\mathbf{t}_{1}],\boldsymbol\Psi_{2}=\mathbf{K}[\mathbf{R}_{2},\mathbf{t}_{2}]Ψ1=K[R1,t1],Ψ2=K[R2,t2]。三角化即根据Ψ1,Ψ2,q1,q2\boldsymbol\Psi_{1},\boldsymbol\Psi_{2},\mathbf{q}_{1},\mathbf{q}_{2}Ψ1,Ψ2,q1,q2估计二维匹配点对应的世界坐标系下的齐次空间点X=[x1]∈R4\mathbf{X}=\begin{bmatrix}\mathbf{x}\\1\end{bmatrix}\in\mathbb{R}^{4}X=[x1]∈R4,即恢复场景中点的真实三维位置的。因为从几何意义上看,如前图,三角化的过程即为寻找两条从相机光心O1,O2O_{1},O_{2}O1,O2出发,穿过归一化平面上的投影点的射线在空间中的交点PPP的过程,此时O1,O2,PO_{1},O_{2},PO1,O2,P组成了一个三角形,故称为三角化。
暂忽略下标,根据上面的讨论可求出相机坐标系下的归一化坐标
q=1ZΨX(21)
\mathbf{q}=\frac{1}{Z}\boldsymbol\Psi\mathbf{X}\tag{21}
q=Z1ΨX(21)
其中ZZZ为[R,t]X[\mathbf{R},\mathbf{t}]\mathbf{X}[R,t]X的最后一维坐标
在上式等号两侧同时左乘q∧\mathbf{q}^{\wedge}q∧,得到
q∧ΨX=0(22)
\mathbf{q}^{\wedge}\boldsymbol\Psi\mathbf{X}=\mathbf{0}\tag{22}
q∧ΨX=0(22)
不妨令Ψ=[Ψ1Ψ2Ψ3]\boldsymbol\Psi=\begin{bmatrix}\boldsymbol\Psi^{1}\\\boldsymbol\Psi^{2}\\\boldsymbol\Psi^{3}\end{bmatrix}Ψ=Ψ1Ψ2Ψ3,即Ψ1,Ψ2,Ψ3\boldsymbol\Psi^{1},\boldsymbol\Psi^{2},\boldsymbol\Psi^{3}Ψ1,Ψ2,Ψ3为Ψ\boldsymbol\PsiΨ的行向量,此时(22)(22)(22)可以写成
[0−1V10−U−VU0][Ψ1Ψ2Ψ3]X=0
\begin{bmatrix}
0&-1&V\\
1&0&-U\\
-V&U&0
\end{bmatrix}
\begin{bmatrix}\boldsymbol\Psi^{1}\\\boldsymbol\Psi^{2}\\\boldsymbol\Psi^{3}\end{bmatrix}
\mathbf{X}=\mathbf{0}
01−V−10UV−U0Ψ1Ψ2Ψ3X=0
进一步可写为
[VΨ3−Ψ2Ψ1−UΨ3UΨ2−VΨ1]X=0
\begin{bmatrix}
V\boldsymbol\Psi^{3}-\boldsymbol\Psi^{2}\\
\boldsymbol\Psi^{1}-U\boldsymbol\Psi^{3}\\
U\boldsymbol\Psi^{2}-V\boldsymbol\Psi^{1}
\end{bmatrix}
\mathbf{X}=\mathbf{0}
VΨ3−Ψ2Ψ1−UΨ3UΨ2−VΨ1X=0
上式中系数矩阵的第三行可以通过前两行消去,即得到
[VΨ3−Ψ2Ψ1−UΨ3]X=0
\begin{bmatrix}
V\boldsymbol\Psi^{3}-\boldsymbol\Psi^{2}\\
\boldsymbol\Psi^{1}-U\boldsymbol\Psi^{3}\\
\end{bmatrix}
\mathbf{X}=\mathbf{0}
[VΨ3−Ψ2Ψ1−UΨ3]X=0
考虑到两个匹配点各自能产生一个上述方程组,故一对匹配点可以提供444个约束方程
[V1Ψ13−Ψ12Ψ11−U1Ψ13V2Ψ23−Ψ22Ψ21−U2Ψ23]X=0(23)
\begin{bmatrix}
V_{1}\boldsymbol\Psi_{1}^{3}-\boldsymbol\Psi^{2}_{1}\\
\boldsymbol\Psi^{1}_{1}-U_{1}\boldsymbol\Psi^{3}_{1}\\
V_{2}\boldsymbol\Psi_{2}^{3}-\boldsymbol\Psi^{2}_{2}\\
\boldsymbol\Psi^{1}_{2}-U_{2}\boldsymbol\Psi^{3}_{2}\\
\end{bmatrix}
\mathbf{X}=\mathbf{0}\tag{23}
V1Ψ13−Ψ12Ψ11−U1Ψ13V2Ψ23−Ψ22Ψ21−U2Ψ23X=0(23)
设匹配点组成的系数矩阵为A∈R4n×4\mathbf{A}\in\mathbb{R}^{4n\times4}A∈R4n×4,nnn为匹配点对数,则空间坐标的约束方程(29)(29)(29)可写为
AX=0(24)
\mathbf{A}\mathbf{X}=\mathbf{0}\tag{24}
AX=0(24)
当rank(A)<4\mathrm{rank}(\mathbf{A})<4rank(A)<4时,(30)(30)(30)为欠定问题,具有多个解;当rank(A)=4\mathrm{rank}(\mathbf{A})=4rank(A)=4时,(30)(30)(30)为适定问题,具有唯一解,可直接通过解线性方程组获得,也可等价地通过SVD分解进行求解,先构造如下优化问题求近似解
X~=argminX:∥X∥=1 12∥AX∥2(25)
\begin{align*}
\tilde{\mathbf{X}}
&=\underset{\mathbf{X}:\|\mathbf{X}\|=1}{\mathrm{arg}\min}\,\frac{1}{2}\|\mathbf{A}\mathbf{X}\|^{2}\\
\end{align*}\tag{25}
X~=X:∥X∥=1argmin21∥AX∥2(25)
对A\mathbf{A}A做奇异值分解
A=UΣVT
\mathbf{A}=\mathbf{U}\mathbf{\Sigma}\mathbf{V}^{T}
A=UΣVT
其中V=[v1,⋯ ,v4]\mathbf{V}=[\mathbf{v}_{1},\cdots,\mathbf{v}_{4}]V=[v1,⋯,v4]按照特征值降序排列,容易知道P~\tilde{\mathbf{P}}P~可取为
X~=±v4(26)
\tilde{\mathbf{X}}=\pm\mathbf{v}_{4}\tag{26}
X~=±v4(26)
设α\alphaα为X~\tilde{\mathbf{X}}X~在第四维上的分量,若α=0\alpha=0α=0,则认为三角化失败,否则为保证所求结果为齐次坐标,即第四维度上值为111,可令
X∗=1αX~(27)
\mathbf{X}^{\ast}=\frac{1}{\alpha}\tilde{\mathbf{X}}\tag{27}
X∗=α1X~(27)
求出X∗\mathbf{X}^{\ast}X∗后应继续检验三角化是否失败,若对应的在三维点在两相机坐标系下的深度小于等于000,即[R1,t1]X∗[\mathbf{R}_{1},\mathbf{t}_{1}]\mathbf{X}^{\ast}[R1,t1]X∗,[R2,t2]X∗[\mathbf{R}_{2},\mathbf{t}_{2}]\mathbf{X}^{\ast}[R2,t2]X∗在第三个维度上的数值小于等于000,则认为三角化失败。
4、已知3D-2D匹配数据估算相机运动
已知世界坐标系下的3D空间点坐标和其在相机中投影的2D像素坐标,估计世界坐标系到相机坐标系的位姿变换的问题称为PnP(Perspective-n-Point)问题。
4.1、DLT
已知空间点在世界坐标系下的齐次坐标为X∈R4\mathbf{X}\in\mathbb{R}^{4}X∈R4,和其对应的像素坐标q=[U,V,1]T\mathbf{q}=[U,V,1]^{T}q=[U,V,1]T,现计算从世界坐标系下的齐次坐标到相机坐标系的位姿变换R,t\mathbf{R},\mathbf{t}R,t
设从世界坐标系下的三维点到像素坐标的投影矩阵Ψ=K[R,t]\boldsymbol\Psi=\mathbf{K}[\mathbf{R},\mathbf{t}]Ψ=K[R,t],并令
根据(21)(21)(21)
Z[UV1]=[Ψ1Ψ2Ψ3]X(28)
Z\begin{bmatrix}
U\\V\\1
\end{bmatrix}
=\begin{bmatrix}\boldsymbol\Psi^{1}\\\boldsymbol\Psi^{2}\\\boldsymbol\Psi^{3}\end{bmatrix}\mathbf{X}\tag{28}
ZUV1=Ψ1Ψ2Ψ3X(28)
(36)(36)(36)可以化简为
Ψ1X=ZUΨ2X=ZVΨ3X=Z
\begin{align*}
\boldsymbol\Psi^{1}\mathbf{X}&=ZU\\
\boldsymbol\Psi^{2}\mathbf{X}&=ZV\\
\boldsymbol\Psi^{3}\mathbf{X}&=Z
\end{align*}
Ψ1XΨ2XΨ3X=ZU=ZV=Z
因此可以得到
Ψ1X−UΨ3X=0Ψ2X−VΨ3X=0
\begin{align*}
\boldsymbol\Psi^{1}\mathbf{X}-U\boldsymbol\Psi^{3}\mathbf{X}&=0\\
\boldsymbol\Psi^{2}\mathbf{X}-V\boldsymbol\Psi^{3}\mathbf{X}&=0\\
\end{align*}
Ψ1X−UΨ3XΨ2X−VΨ3X=0=0
不妨令ψ=[Ψ11TΨ22TΨ33T]\boldsymbol\psi=\begin{bmatrix}\boldsymbol\Psi^{1}\vphantom{^{1}}^{T}\\\boldsymbol\Psi^{2}\vphantom{^{2}}^{T}\\\boldsymbol\Psi^{3}\vphantom{^{3}}^{T}\end{bmatrix}ψ=Ψ11TΨ22TΨ33T,写出关于ψ\boldsymbol\psiψ的方程组,有
[XT0T−UXT0TXT−VXT]ψ=0(29)
\begin{bmatrix}
\mathbf{X}^{T}&\mathbf{0}^{T}&-U\mathbf{X}^{T}\\
\mathbf{0}^{T}&\mathbf{X}^{T}&-V\mathbf{X}^{T}\\
\end{bmatrix}\boldsymbol\psi=\mathbf{0}\tag{29}
[XT0T0TXT−UXT−VXT]ψ=0(29)
可以看到,每对3D-2D匹配的特征点能提供两个关于ψ\boldsymbol\psiψ的约束
设匹配点组成的系数矩阵为A∈R2n×12\mathbf{A}\in\mathbb{R}^{2n\times12}A∈R2n×12,nnn为匹配点对数,则增广矩阵的约束方程可写为
Aψ=0(30)
\mathbf{A}\boldsymbol\psi=\mathbf{0}\tag{30}
Aψ=0(30)
当匹配点较少,rank(A)<12\mathrm{rank}(\mathbf{A})<12rank(A)<12时,(38)(38)(38)为欠定问题,具有多个解;当rank(A)=12\mathrm{rank}(\mathbf{A})=12rank(A)=12时,(38)(38)(38)为适定问题,具有唯一解,可直接通过解线性方程组获得;当匹配点较多时,rank(A)>12\mathrm{rank}(\mathbf{A})>12rank(A)>12时,(38)(38)(38)变为超定问题,线性方程组无解,故可以构造如下优化问题求近似解
ψ~=argminψ:∥ψ∥=1 12∥Aψ∥2(31)
\begin{align*}
\tilde{\boldsymbol\psi}
&=\underset{\boldsymbol\psi:\|\boldsymbol\psi\|=1}{\mathrm{arg}\min}\,\frac{1}{2}\|\mathbf{A}\boldsymbol\psi\|^{2}\\
\end{align*}\tag{31}
ψ~=ψ:∥ψ∥=1argmin21∥Aψ∥2(31)
对A\mathbf{A}A做奇异值分解
A=UΣVT
\mathbf{A}=\mathbf{U}\mathbf{\Sigma}\mathbf{V}^{T}
A=UΣVT
其中V=[v1,⋯ ,v12]\mathbf{V}=[\mathbf{v}_{1},\cdots,\mathbf{v}_{12}]V=[v1,⋯,v12]按照特征值降序排列,容易知道ψ~\tilde{\boldsymbol\psi}ψ~可取为
ψ~=±v12(32)
\tilde{\boldsymbol\psi}=\pm\mathbf{v}_{12}\tag{32}
ψ~=±v12(32)
将ψ~\tilde{\boldsymbol\psi}ψ~转变Ψ~\tilde{\boldsymbol\Psi}Ψ~为再转变为[R~,t~]=K−1Ψ~[\tilde{\mathbf{R}},\tilde{\mathbf{t}}]=\mathbf{K}^{-1}\tilde{\boldsymbol\Psi}[R~,t~]=K−1Ψ~即得到所求增广矩阵的初步估计,但所求得的旋转矩阵R~\tilde{\mathbf{R}}R~不一定在SO(3)SO(3)SO(3)中,可以构造如下优化问题
min −tr(RR~T)subject to RTR=Idet(R)=1
\begin{align*}
\min\,\,\,&-\mathrm{tr}\left(\mathbf{R}\tilde{\mathbf{R}}^{T}\right)\\
\mathrm{subject\,to}\,\,\,&\mathbf{R}^T\mathbf{R}=\mathbf{I}\quad\det(\mathbf{R})=1\\
\end{align*}
minsubjectto−tr(RR~T)RTR=Idet(R)=1
首先对R~\tilde{\mathbf{R}}R~进行SVD分解
R~=U~Σ~V~T
\tilde{\mathbf{R}}=\tilde{\mathbf{U}}\tilde{\boldsymbol{\Sigma}}\tilde{\mathbf{V}}^{T}
R~=U~Σ~V~T
根据§1中KKT条件,可以证明,在任何情况下,使(6)(6)(6)中目标函数最优的旋转矩阵R∗\mathbf{R}^{\ast}R∗总可以取为下述值
R∗=U~[11det(U~)det(V~)]V~T
\begin{align*}
\mathbf{R}^{\ast}=\tilde{\mathbf{U}}
\begin{bmatrix}
1&&\\
&1&\\
&&\det(\tilde{\mathbf{U}})\det(\tilde{\mathbf{V}})
\end{bmatrix}
\tilde{\mathbf{V}}^{T}
\end{align*}
R∗=U~11det(U~)det(V~)V~T
4.2、最小重投影误差
求解PnP问题还可以将每个三维点坐标投影到像素平面得到的坐标与对应的实际观测到的像素坐标做差得到的重投影误差,再通过优化重投影误差得到最优的从世界坐标系到相机坐标系的位姿变换T∈SE(3)\mathbf{T}\in SE(3)T∈SE(3),即
T∗=argminT∑i=1n∥qi−1ZiK(TXi)1:3∥2=argminT∑i=1n∥ei(T)∥2(33)
\begin{align*}
\mathbf{T}^{\ast}
&=\underset{\mathbf{T}}{\arg\min}\sum_{i=1}^{n}\left\|\mathbf{q}_{i}-\frac{1}{Z_{i}}\mathbf{K}(\mathbf{T}\mathbf{X}_{i})_{1:3}\right\|^{2}\\
&=\underset{\mathbf{T}}{\arg\min}\sum_{i=1}^{n}\left\|\mathbf{e}_{i}(\mathbf{T})\right\|^{2}\\
\end{align*}
\tag{33}
T∗=Targmini=1∑nqi−Zi1K(TXi)1:32=Targmini=1∑n∥ei(T)∥2(33)
下面暂时省略下标iii,世界坐标系下的三维点在相机坐标系下的表示为
p=(TX)1:3=[X,Y,Z]T(34)
\mathbf{p}=(\mathbf{T}\mathbf{X})_{1:3}=[X,Y,Z]^{T}\tag{34}
p=(TX)1:3=[X,Y,Z]T(34)
误差取两维
e=(q−1ZKp)1:2=[UV]−1Z[fx0cx0fycy][XYZ]=[U−fxXZ+cyV−fyYZ+cy](35)
\begin{align*}
\mathbf{e}&=
\left(\mathbf{q}-\frac{1}{Z}\mathbf{K}\mathbf{p}\right)_{1:2}
=\begin{bmatrix}
U\\
V\\
\end{bmatrix}-\frac{1}{Z}\begin{bmatrix}
f_{x}&0&c_{x}\\
0&f_{y}&c_{y}\\
\end{bmatrix}\begin{bmatrix}
X\\
Y\\
Z
\end{bmatrix}
=\begin{bmatrix}U-f_{x}\frac{X}{Z}+c_{y}\\
V-f_{y}\frac{Y}{Z}+c_{y}\end{bmatrix}
\end{align*}\tag{35}
e=(q−Z1Kp)1:2=[UV]−Z1[fx00fycxcy]XYZ=[U−fxZX+cyV−fyZY+cy](35)
根据链式法则得到
∂e∂T=−∂q′∂p∂p∂T(36)
\begin{align*}
\frac{\partial\mathbf{e}}{\partial\mathbf{T}}&=-\frac{\partial\mathbf{q}^{\prime}}{\partial\mathbf{p}}\frac{\partial\mathbf{p}}{\partial\mathbf{T}}\\
\end{align*}\tag{36}
∂T∂e=−∂p∂q′∂T∂p(36)
由(34),(35)(34),(35)(34),(35)知
∂e∂p=[−fxZ0fxXZ20−fyZfxYZ2](37)
\frac{\partial\mathbf{e}}{\partial\mathbf{p}}=
\begin{bmatrix}
-\frac{f_{x}}{Z}&0&\frac{f_{x}X}{Z^{2}}\\
0&-\frac{f_{y}}{Z}&\frac{f_{x}Y}{Z^{2}}
\end{bmatrix}\tag{37}
∂p∂e=[−Zfx00−ZfyZ2fxXZ2fxY](37)
设位姿更新方式为T←Exp(ΔT)T,ΔT∈R6\mathbf{T}\leftarrow\mathrm{Exp}(\Delta\mathbf{T})\mathbf{T},\Delta\mathbf{T}\in\mathbb{R}^{6}T←Exp(ΔT)T,ΔT∈R6,则可以通过左乘扰动求导方法计算
∂p∂T=(∂TX∂T)1:3=[I,−p∧](38)
\frac{\partial\mathbf{p}}{\partial\mathbf{T}}=\left(\frac{\partial\mathbf{T}\mathbf{X}}{\partial\mathbf{T}}\right)_{1:3}=[\mathbf{I},-\mathbf{p}^{\wedge}]\tag{38}
∂T∂p=(∂T∂TX)1:3=[I,−p∧](38)
由(36),(37),(38)(36),(37),(38)(36),(37),(38)可计算
∂e∂T=[−fxZ0fxXZ2fxXYZ2−fx−fxX2Z2fxYZ0−fyZfxYZ2fy+fyY2Z2−fxXYZ2−fxXZ](39)
\frac{\partial\mathbf{e}}{\partial\mathbf{T}}=\begin{bmatrix}
-\frac{f_{x}}{Z}&0&\frac{f_{x}X}{Z^{2}}&\frac{f_{x}XY}{Z^{2}}&-f_{x}-\frac{f_{x}X^{2}}{Z^{2}}&\frac{f_{x}Y}{Z}\\
0&-\frac{f_{y}}{Z}&\frac{f_{x}Y}{Z^{2}}&f_{y}+\frac{f_{y}Y^{2}}{Z^{2}}&-\frac{f_{x}XY}{Z^{2}}&-\frac{f_{x}X}{Z}
\end{bmatrix}\tag{39}
∂T∂e=[−Zfx00−ZfyZ2fxXZ2fxYZ2fxXYfy+Z2fyY2−fx−Z2fxX2−Z2fxXYZfxY−ZfxX](39)
问题(33)(33)(33)的雅可比矩阵
Ji=∂ei∂T(40)
\mathbf{J}_{i}=\frac{\partial\mathbf{e}_{i}}{\partial\mathbf{T}}\tag{40}
Ji=∂T∂ei(40)
得到
Hk=∑i=1nJiTJibk=∑i=1nJiTei
\begin{align*}\mathbf{H}_{k}=\sum_{i=1}^{n}\mathbf{J}_{i}^{T}\mathbf{J}_{i}\quad\quad\mathbf{b}_{k}&=\sum_{i=1}^{n}\mathbf{J}_{i}^{T}\mathbf{e}_{i}\end{align*}
Hk=i=1∑nJiTJibk=i=1∑nJiTei
则更新量可以通过下式计算
HkΔTk=−bk
\mathbf{H}_{k}\Delta\mathbf{T}_{k}=-\mathbf{b}_{k}
HkΔTk=−bk
并通过下式更新
Tk+1=Exp(ΔTk)Tk
\mathbf{T}_{k+1}=\mathrm{Exp}(\Delta\mathbf{T}_{k})\mathbf{T}_{k}
Tk+1=Exp(ΔTk)Tk
最终得到最优的位姿变换
附录
§1、尺度意义下相等
设x1,x2\mathbf{x}_{1},\mathbf{x}_{2}x1,x2为某种代数结构,若存在s∈Rs\in\mathbb{R}s∈R,使得
sx1=x2(A1)
s\mathbf{x}_{1}=\mathbf{x}_{2}\tag{A1}
sx1=x2(A1)
则称x1\mathbf{x}_{1}x1与x2\mathbf{x}_{2}x2在尺度意义下相等,记作
x1⋍x2(A2)
\mathbf{x}_{1}\backsimeq\mathbf{x}_{2}\tag{A2}
x1⋍x2(A2)