本人讲解关于slam一系列文章汇总链接:史上最全slam从零开始 文末正下方中心提供了本人 联系方式, 点击本人照片即可显示 W X → 官方认证 {\color{blue}{文末正下方中心}提供了本人 \color{red} 联系方式,\color{blue}点击本人照片即可显示WX→官方认证} 文末正下方中心提供了本人联系方式,点击本人照片即可显示WX→官方认证
一、前言该篇博客,主要是对 Homography 矩阵进行一个细致的讲解,主要分为三个部分: 基本介绍、参数设定、公式推导、八点法求解。废话也不多说,那么我们下面就开始吧。
二、基本介绍
单应性矩阵 H \mathbf H H(Homography), 其约束了同一 3D 空间点,在两个 像素平面 \color{red}{像素平面} 像素平面 的 2D 齐次坐标 \color{red}{齐次坐标} 齐次坐标,现在我们假设 p a 1 , p b 1 p_{a1},p_{b1} pa1,pb1 分别是两个像素平面 A A A, B B B 的像素坐标,以及 单应性矩阵 H b a \mathbf H_{ba} Hba(能够把像素坐标 p a 1 p_{a1} pa1变换到 p b 1 p_{b1} pb1的矩阵): p b 1 = [ u b 1 v b 1 1 ] p b 1 = [ u a 1 v a 1 1 ] H b a = [ h 1 h 2 h 3 h 4 h 5 h 6 h 7 h 8 h 9 ] (01) \tag{01} \color{blue} p_{b1}=\left[\begin{array}{c} u_{b1} \\ v_{b1}\\ 1 \end{array}\right]~~~~~~~~p_{b1}=\left[\begin{array}{c} u_{a1} \\ v_{a1} \\ 1 \end{array}\right]~~~~~~~~\mathbf H_{ba}= \left[\begin{array}{lll} h_{1} & h_{2} & h_{3} \\ h_{4} & h_{5} & h_{6} \\ h_{7} & h_{8} & h_{9} \end{array}\right] pb1= ub1vb11 pb1= ua1va11 Hba= h1h4h7h2h5h8h3h6h9 (01) 其上的 p a 1 , p b 1 p_{a1},p_{b1} pa1,pb1 (一般是已知量)是两张图像对应的像素齐次坐标,也可以为理解为一对匹配特征点,那么他们对应关系如下: p b 1 ∝ H p a 1 (02) \tag{02} \color{blue} {p}_{b1} \propto \mathbf{H} {p}_{a1} pb1∝Hpa1(02)其上正比于符号 ∝ \color{red} \propto ∝(这里并非是等号,大家需要注意一点) 约束了 p b 1 {p}_{b1} pb1 与 H b a p a 1 \mathbf{H}_{ba} {p}_{a1} Hbapa1 的方向是同方向,但是没有约束尺度。那么可以通过叉乘计算是可以消去尺度因子,因此上式还可以转化为等式,表达如下: p b 1 × H b a p a 1 = 0 (03) \tag{03} \color{blue} {p}_{b1} \times \mathbf{H}_{ba} {p}_{a1} =\mathbf 0 pb1×Hbapa1=0(03)如果两个向量方向相同则叉乘为 0 \mathbf 0 0 向量,不是很明白的朋友可以百度一下向量叉乘的相关知识。经过详细推导,最终可以获得如下公式: H b a = K b ( R b a − t b a n a T d a ) K a − 1 = K b R b a ( E + 1 d a ⋅ t a b n a T ) K a − 1 (04) \tag{04} \color{blue} \mathbf{H}_{b a}=\mathbf{K}_{b}\left(\mathbf{R}_{b a}-\frac{\mathbf{t}_{b a} \mathbf{n}_{a}^{T}}{d_{a}}\right) \mathbf{K}_{a}^{-1}=\mathbf{K}_{b} \mathbf{R}_{b a}\left(\mathbf{E}+\frac{1}{d_{a}} \cdot \mathbf{t}_{a b} \mathbf{n}_{a}^{T}\right) \mathbf{K}_{a}^{-1} Hba=Kb(Rba−datbanaT)Ka−1=KbRba(E+da1⋅tabnaT)Ka−1(04) 其上的 R b a \mathbf{R}_{b a} Rba 表示相机坐标
三、参数设定
在相机坐标系下,3D 空间坐标为 X \mathbf X X,投影到像素坐标系的齐次坐标为p, K \mathbf K K 为相机内参,分别表示如下,: X = [ X Y Z ] p = [ u v 1 ] = 1 Z ⋅ K X K = [ f x 0 c x 0 f y c y 0 0 1 ] (05) \tag{05} \color{blue} \mathbf X=\left[\begin{array}{c} X\\ Y\\ Z \end{array}\right]~~~~~~~~~~~p=\left[\begin{array}{c} u\\ v\\ 1 \end{array}\right]= \frac{1}{Z} \cdot \mathbf K \mathbf X~~~~~~~~~~\mathbf{K}=\left[\begin{array}{ccc} f_{x} & 0 & c_{x} \\ 0 & f_{y} & c_{y} \\ 0 & 0 & 1 \end{array}\right] X= XYZ p= uv1 =Z1⋅KX K= fx000fy0cxcy1 (05) 另外 3D 空间点 X \mathbf X X 所在平面,在相机坐标系得下参数: n \mathbf n n 表示该平面单位法向量, d d d 表示相机坐标系原点到平面的距离。3D 点 X \mathbf X X 位于平面 { n , d } \{\mathbf n,d\} {n,d} 上, 其方程表达式为: n T ⋅ X + d = 0 (06) \tag{06} \color{blue} \mathbf n^T \cdot \mathbf X+d=0 nT⋅X+d=0(06) 上面我们已经相机系坐标转像素系坐标,那么反过来像素系坐标转相机系坐标公式如下: X = Z ⋅ K − 1 p (07) \tag{07} \color{blue} \mathbf X=Z\cdot \mathbf K^{-1}p X=Z⋅K−1p(07)那么这里出现了一个问题。就是说,如果我们知道一个相机坐标系下的三维点与相机内参的时候,根据公式(5)中的第二项是可以求解出对应的像素坐标的。但是在已知像素坐标的情况下,无法求解出该像素点对应相机坐标系下的三维点。根据公式(07)可知,还缺少一个变量 Z Z Z, 只要当 Z Z Z 已知的情况下,才能求解出相机系下对应的三维点。如果知道3D点所在平面参数,也就是(06)式中的 { n , d } \{\mathbf n,d\} {n,d}。那么结合(06),(07)整理得: Z ⋅ n T K − 1 p + d = 0 Z = − d n T K − 1 p (08) \tag{08} \color{blue} Z \cdot \mathbf{n}^T \mathbf{K}^{-1} p+d=0 ~~~~~~~~~~~~~~~Z=-\frac{d}{\mathbf{n}^T \mathbf{K}^{-1} p} Z⋅nTK−1p+d=0 Z=−nTK−1pd(08)也就是,如果知道3D点所在平面的相关参数,那么我们就有办法求解出3D点的深度 Z Z Z,把 (08)式 代入 (07)式 可得: X = − d n T K − 1 p ⋅ K − 1 p (09) \tag{09} \color{blue} \mathbf{X}=-\frac{d}{\mathbf{n}^T\mathbf{K}^{-1} p} \cdot \mathbf{K}^{-1} p X=−nTK−1pd⋅K−1p(09)
四、公式推导
在前面提到,Homography 是像素坐标系之间的转换。比如(02)表示的就是由像素坐标系 a a a 转到 像素坐标系 b b b。 下面我们来推导其具体过程,根据相机成像原理,相机坐标系a下的点 X a \mathbf {X_a} Xa, 和相机坐标系下的 X b \mathbf {X_b} Xb,可知公式如下: [ X b 1 ] = [ R b a t b a 0 1 ] ⏟ T b a [ X a 1 ] (10) \tag{10} \color{blue} \left[\begin{array}{c} \mathbf X_{b} \\ 1 \end{array}\right]=\underbrace{\left[\begin{array}{cc} \mathbf{R}_{b a} & \mathbf{t}_{b a} \\ \mathbf{0} & 1 \end{array}\right]}_{\mathbf{T}_{b a}}\left[\begin{array}{c} \mathbf{X}_{a} \\ 1 \end{array}\right] [Xb1]=Tba [Rba0tba1][Xa1](10) X b = R b a X a + t b a (12) \tag{12} \color{blue} \mathbf{X}_{b}=\mathbf{R}_{b a} \mathbf{X}_{a}+\mathbf{t}_{b a} Xb=RbaXa+tba(12)其中: R b a \mathbf R_{ba} Rba →表示 a系 到 b系的坐标旋转变换(也可以理解为,b系下a系的姿态) t b a \mathbf t_{ba} tba →表示 a系 到 b系的坐标平移变换(也可以理解为,b系下a系的位置)。
再根据(07)式子,可得 Z b ⋅ K b − 1 p b = Z a ⋅ R b a K a − 1 p a + t b a (13) \tag{13} \color{blue} Z_{b} \cdot \mathbf{K}_{b}^{-1} p_{b}=Z_{a} \cdot \mathbf{R}_{b a} \mathbf{K}_{a}^{-1} p_{a}+\mathbf{t}_{ba} Zb⋅Kb−1pb=Za⋅RbaKa−1pa+tba(13)那么继续化简,可得到由 a系下 表达 b系像素: p b = Z a Z b ⋅ K b R b a K a − 1 p a + 1 Z b ⋅ K b t b a (14) \tag{14} \color{blue} p_{b}=\frac{Z_{a}}{Z_{b}} \cdot \mathbf{K}_{b} \mathbf{R}_{b a} \mathbf{K}_{a}^{-1} p_{a}+\frac{1}{Z_{b}} \cdot \mathbf{K}_{b} \mathbf{t}_{b a} pb=ZbZa⋅KbRbaKa−1pa+Zb1⋅Kbtba(14)假设其上的 R b a \mathbf R_{ba} Rba, t b a \mathbf t_{ba} tba 为已知量, 但是跟前面结论一样,因为存在未知参数 Z b , Z a Z_b, Z_a Zb,Za, 所以无法直接通过 a系像素 得到 b系像素。那么我们根据前面的推导(08),引入a系中平面参数: p b = Z a Z b ⋅ K b R b a K a − 1 p a + 1 Z b ⋅ K b t b a = Z a Z b ⋅ K b ( R b a K a − 1 p a + t b a Z a ) = Z a Z b ⋅ K b ( R b a K a − 1 p a − t b a n a T K a − 1 p a d a ) = Z a Z b ⋅ K b ( R b a − t b a n a T d a ) K a − 1 p a (15) \tag{15} \color{blue} \begin{aligned} p_{b} &=\frac{Z_{a}}{Z_{b}} \cdot \mathbf{K}_{b} \mathbf{R}_{b a} \mathbf{K}_{a}^{-1} p_{a}+\frac{1}{Z_{b}} \cdot \mathbf{K}_{b} \mathbf{t}_{b a} \\ &=\frac{Z_{a}}{Z_{b}} \cdot \mathbf{K}_{b}\left(\mathbf{R}_{b a} \mathbf{K}_{a}^{-1} p_{a}+\frac{\mathbf{t}_{b a}}{Z_{a}}\right) \\ &=\frac{Z_{a}}{Z_{b}} \cdot \mathbf{K}_{b}\left(\mathbf{R}_{b a} \mathbf{K}_{a}^{-1} p_{a}-\frac{\mathbf{t}_{b a} \mathbf{n}_{a}^{T} \mathbf{K}_{a}^{-1} p_{a}}{d_{a}}\right) \\ &=\frac{Z_{a}}{Z_{b}} \cdot \mathbf{K}_{b}\left(\mathbf{R}_{b a}-\frac{\mathbf{t}_{b a} \mathbf{n}_{a}^{T}}{d_{a}}\right) \mathbf{K}_{a}^{-1} p_{a}\end{aligned} pb=ZbZa⋅KbRbaKa−1pa+Zb1⋅Kbtba=ZbZa⋅Kb(RbaKa−1pa+Zatba)=ZbZa⋅Kb(RbaKa−1pa−datbanaTKa−1pa)=ZbZa⋅Kb(Rba−datbanaT)Ka−1pa(15)到这个位置呢,可以说是基本推导完成了,另外如果 p b p_{b} pb 使用齐次像素坐标 ( x , y , 1 ) T (x,y,1)^T (x,y,1)T 与 λ ( x , y , 1 ) T \lambda (x,y,1)^T λ(x,y,1)T 以及 ( λ x , λ y , λ ) T (\lambda x,\lambda y,\lambda)^T (λx,λy,λ)T 其对应的都是空间中的同一三维点,也就是所谓的齐次坐标尺度不变性。根据这个性质,可以省略掉 Z a Z b \frac{Z_{a}}{Z_{b}} ZbZa 这个尺度因子。那么上式可以写成: p b ∝ K b ( R b a − t b a n a T d a ) K a − 1 p a (16) \tag{16} \color{blue} p_{b} \propto \mathbf{K}_{b}\left(\mathbf{R}_{b a}-\frac{\mathbf{t}_{b a} \mathbf{n}_{a}^{T}}{d_{a}}\right) \mathbf{K}_{a}^{-1} p_{a} pb∝Kb(Rba−datbanaT)Ka−1pa(16)然后再进行符号简化,如下: H b a = K b ( R b a − t b a n a T d a ) K a − 1 p b = H b a p a (17) \tag{17} \color{blue} \mathbf{H}_{ba} =\mathbf{K}_{b}\left(\mathbf{R}_{b a}-\frac{\mathbf{t}_{b a} \mathbf{n}_{a}^{T}}{d_{a}}\right) \mathbf{K}_{a}^{-1} ~~~~~~~~~p_b=\mathbf{H}_{ba}p_a Hba=Kb(Rba−datbanaT)Ka−1 pb=Hbapa(17)另外我们根据变换矩阵 T a b T b a = E \mathbf T_{ab}\mathbf T_{ba}=\mathbf E TabTba=E(单位矩阵),如下: T a b = [ R a b t a b 0 T 1 ] T b a = [ R b a t b a 0 T 1 ] (18) \tag{18} \color{blue} \mathbf{T_{ab}}=\left[\begin{array}{cc} \mathbf{R_{ab}} & \mathbf{t_{ab}} \\ \\ \mathbf{0}^{\mathbf{T}} & 1 \end{array}\right]~~~~~~~~~\mathbf{T_{ba}}=\left[\begin{array}{cc} \mathbf{R_{ba}} & \mathbf{t_{ba}} \\ \\ \mathbf{0}^{\mathbf{T}} & 1 \end{array}\right] Tab= Rab0Ttab1 Tba= Rba0Ttba1 (18)我们可以推导出 R b a t a b = − t b a (19) \tag{19} \color{blue} \mathbf{R}_{b a} \mathbf{t}_{a b}=-\mathbf{t}_{b a} Rbatab=−tba(19) 把这个带入到(19)式子当中继续推导如下: H b a = K b ( R b a − t b a n a T d a ) K a − 1 = K b ( R b a + R b a t a b n a T d a ) K a − 1 p a = K b R b a ( E + 1 d a ⋅ t a b n a T ) K a − 1 p a = K b R b a ( E + 1 d a ⋅ t a b n a T ) K a − 1 p a (20) \tag{20} \color{blue} \begin{aligned} \mathbf{H}_{ba} &=\mathbf{K}_{b}\left(\mathbf{R}_{b a}-\frac{\mathbf{t}_{b a} \mathbf{n}_{a}^{T}}{d_{a}}\right) \mathbf{K}_{a}^{-1}\\ &=\mathbf{K}_{b}\left(\mathbf{R}_{b a}+\mathbf{R}_{b a} \mathbf{t}_{a b} \frac{\mathbf{n}_{a}^{T}}{d_{a}}\right) \mathbf{K}_{a}^{-1} p_{a} \\ &= \mathbf{K}_{b} \mathbf{R}_{b a}\left(\mathbf{E}+\frac{1}{d_{a}} \cdot \mathbf{t}_{a b} \mathbf{n}_{a}^{T}\right) \mathbf{K}_{a}^{-1} p_{a} \\ &=\mathbf{K}_{b} \mathbf{R}_{b a}\left(\mathbf{E}+\frac{1}{d_{a}} \cdot \mathbf{t}_{a b} \mathbf{n}_{a}^{T}\right) \mathbf{K}_{a}^{-1} p_{a} \end{aligned} Hba=Kb(Rba−datbanaT)Ka−1=Kb(Rba+RbatabdanaT)Ka−1pa=KbRba(E+da1⋅tabnaT)Ka−1pa=KbRba(E+da1⋅tabnaT)Ka−1pa(20)这样结合起来就得到前面(04)式。竟然我们推导出 H \mathbf H H 矩阵,那么如何进行求解呢,如下推导。
五、八点法求解
根据前面的公式(02) p b 1 ∝ H p a 1 {p}_{b1} \propto \mathbf{H} {p}_{a1} pb1∝Hpa1,其表示的是一对匹配点,使用齐次坐标展开如下: [ u b 1 v b 1 1 ] ∝ [ h 11 h 12 h 13 h 21 h 22 h 23 h 31 h 32 h 33 ] [ u a 1 v a 1 1 ] (21) \tag{21} \color{blue} \left[\begin{array}{c} u_{b1} \\ v_{b1} \\ 1 \end{array}\right] \propto\left[\begin{array}{lll} h_{11} & h_{12} & h_{13} \\ h_{21} & h_{22} & h_{23} \\ h_{31} & h_{32} & h_{33} \end{array}\right]\left[\begin{array}{c} u_{a1} \\ v_{a1} \\ 1 \end{array}\right] ub1vb11 ∝ h11h21h31h12h22h32h13h23h33 ua1va11 (21)转化为方程组如下: { u b 1 = h 11 u a 1 + h 12 v a 1 + h 13 v b 1 = h 21 u a 1 + h 22 v a 1 + h 23 1 = h 31 u a 1 + h 32 v a 1 + h 33 ⇒ { u b 1 = u b 1 1 = h 11 u a 1 + h 12 v a 1 + h 13 h 31 u a 1 + h 32 v a 1 + h 33 v b 1 = v b 1 1 = h 21 u a 1 + h 22 v a 1 + h 23 h 31 u a 1 + h 32 v a 1 + h 33 (22) \tag {22} \color{blue}\left\{\begin{aligned} u_{b1} &=h_{11} u_{a1}+h_{12} v_{a1}+h_{13} \\ v_{b1} &=h_{21} u_{a1}+h_{22} v_{a1}+h_{23} \\ 1 &=h_{31}u_{a1}+h_{32} v_{a1}+h_{33} \end{aligned}\right.~~~\Rightarrow~~~\left\{\begin{aligned} u_{b1} &=\frac{u_{b1}}{1}=\frac{h_{11} u_{a1}+h_{12} v_{a1}+h_{13}}{h_{31}u_{a1}+h_{32} v_{a1}+h_{33}}\\ v_{b1} &=\frac{v_{b1} }{1}=\frac{h_{21} u_{a1}+h_{22} v_{a1}+h_{23}}{h_{31}u_{a1}+h_{32} v_{a1}+h_{33}}\\ \end{aligned}\right. ⎩ ⎨ ⎧ub1vb11=h11ua1+h12va1+h13=h21ua1+h22va1+h23=h31ua1+h32va1+h33 ⇒ ⎩ ⎨ ⎧ub1vb1=1ub1=h31ua1+h32va1+h33h11ua1+h12va1+h13=1vb1=h31ua1+h32va1+h33h21ua1+h22va1+h23(22)进一步转换如下: { u b 1 ( h 31 u a 1 + h 32 v a 1 + h 33 ) = h 11 u a 1 + h 12 v a 1 + h 13 v b 1 ( h 31 u a 1 + h 32 v a 1 + h 33 ) = h 21 u a 1 + h 22 v a 1 + h 23 (23) \tag {23} \color{blue} \left\{\begin{aligned} u_{b1}({h_{31}u_{a1}+h_{32} v_{a1}+h_{33}}) &=h_{11} u_{a1}+h_{12} v_{a1}+h_{13}\\ \\ v_{b1}({h_{31}u_{a1}+h_{32} v_{a1}+h_{33}}) &=h_{21} u_{a1}+h_{22} v_{a1}+h_{23}\\ \end{aligned}\right. ⎩ ⎨ ⎧ub1(h31ua1+h32va1+h33)vb1(h31ua1+h32va1+h33)=h11ua1+h12va1+h13=h21ua1+h22va1+h23(23)然后我买了转化为一般式: { h 11 u a 1 + h 12 v a 1 + h 13 − h 31 u a 1 u b 1 − h 32 v a 1 u b 1 − h 33 u b 1 = 0 h 21 u a 1 + h 22 v a 1 + h 23 − h 31 u a 1 v b 1 − h 32 v a 1 v b 1 − h 33 v b 1 = 0 (24) \tag {24} \color{blue} \left\{\begin{aligned} h_{11} u_{a1}+h_{12} v_{a1}+h_{13}-{h_{31}u_{a1}u_{b1}-h_{32} v_{a1}u_{b1}-h_{33}u_{b1}}=0\\ \\ h_{21} u_{a1}+h_{22} v_{a1}+h_{23}-{h_{31}u_{a1}v_{b1}-h_{32} v_{a1}v_{b1}-h_{33}v_{b1}}=0\\ \end{aligned}\right. ⎩ ⎨ ⎧h11ua1+h12va1+h13−h31ua1ub1−h32va1ub1−h33ub1=0h21ua1+h22va1+h23−h31ua1vb1−h32va1vb1−h33vb1=0(24) 因为使用齐次坐标,那么 H \mathbf{H} H 的作用与 a H a\mathbf{H} aH 是一样的,也就是 1 h 33 H \frac{1}{h33}\mathbf{H} h331H 与 H \mathbf{H} H 效果一致,或者也可以令 h 33 = 1 h_{33}=1 h33=1 写成如下形式。 H = [ h 11 h 12 h 13 h 21 h 22 h 23 h 31 h 32 1 ] (25) \tag {25} \color{blue} \mathbf{H}=\left[\begin{array}{lll} h_{11} & h_{12} & h_{13} \\ h_{21} & h_{22} & h_{23} \\ h_{31} & h_{32} & 1 \end{array}\right] H= h11h21h31h12h22h32h13h231 (25) 八对特征点的方程组如下: { h 11 u a 1 + h 12 v a 1 + h 13 − h 31 u a 1 u b 1 − h 32 v a 1 u b 1 − h 33 u b 1 = 0 h 21 u a 1 + h 22 v a 1 + h 23 − h 31 u a 1 v b 1 − h 32 v a 1 v b 1 − h 33 v b 1 = 0 h 11 u a 2 + h 12 v a 2 + h 13 − h 31 u a 2 u b 2 − h 32 v a 2 u b 2 − h 33 u b 2 = 0 h 21 u a 2 + h 22 v a 2 + h 23 − h 31 u a 2 v b 2 − h 32 v a 2 v b 2 − h 33 v b 2 = 0 h 11 u a 3 + h 12 v a 3 + h 13 − h 31 u a 3 u b 3 − h 32 v a 3 u b 3 − h 33 u b 3 = 0 h 21 u a 3 + h 22 v a 3 + h 23 − h 31 u a 3 v b 3 − h 32 v a 3 v b 3 − h 33 v b 3 = 0 h 11 u a 4 + h 12 v a 4 + h 13 − h 31 u a 4 u b 4 − h 32 v a 4 u b 4 − h 33 u b 4 = 0 h 21 u a 4 + h 22 v a 4 + h 23 − h 31 u a 4 v b 4 − h 32 v a 4 v b 4 − h 33 v b 4 = 0 (26) \tag {26} \color{blue} \left\{\begin{aligned} h_{11} u_{a1}+h_{12} v_{a1}+h_{13}-{h_{31}u_{a1}u_{b1}-h_{32} v_{a1}u_{b1}-h_{33}u_{b1}}=0\\ h_{21} u_{a1}+h_{22} v_{a1}+h_{23}-{h_{31}u_{a1}v_{b1}-h_{32} v_{a1}v_{b1}-h_{33}v_{b1}}=0\\ h_{11} u_{a2}+h_{12} v_{a2}+h_{13}-{h_{31}u_{a2}u_{b2}-h_{32} v_{a2}u_{b2}-h_{33}u_{b2}}=0\\ h_{21} u_{a2}+h_{22} v_{a2}+h_{23}-{h_{31}u_{a2}v_{b2}-h_{32} v_{a2}v_{b2}-h_{33}v_{b2}}=0\\ h_{11} u_{a3}+h_{12} v_{a3}+h_{13}-{h_{31}u_{a3}u_{b3}-h_{32} v_{a3}u_{b3}-h_{33}u_{b3}}=0\\ h_{21} u_{a3}+h_{22} v_{a3}+h_{23}-{h_{31}u_{a3}v_{b3}-h_{32} v_{a3}v_{b3}-h_{33}v_{b3}}=0\\ h_{11} u_{a4}+h_{12} v_{a4}+h_{13}-{h_{31}u_{a4}u_{b4}-h_{32} v_{a4}u_{b4}-h_{33}u_{b4}}=0\\ h_{21} u_{a4}+h_{22} v_{a4}+h_{23}-{h_{31}u_{a4}v_{b4}-h_{32} v_{a4}v_{b4}-h_{33}v_{b4}}=0\\ \end{aligned}\right. ⎩ ⎨ ⎧h11ua1+h12va1+h13−h31ua1ub1−h32va1ub1−h33ub1=0h21ua1+h22va1+h23−h31ua1vb1−h32va1vb1−h33vb1=0h11ua2+h12va2+h13−h31ua2ub2−h32va2ub2−h33ub2=0h21ua2+h22va2+h23−h31ua2vb2−h32va2vb2−h33vb2=0h11ua3+h12va3+h13−h31ua3ub3−h32va3ub3−h33ub3=0h21ua3+h22va3+h23−h31ua3vb3−h32va3vb3−h33vb3=0h11ua4+h12va4+h13−h31ua4ub4−h32va4ub4−h33ub4=0h21ua4+h22va4+h23−h31ua4vb4−h32va4vb4−h33vb4=0(26):上面的方程组就可以转化成矩阵形式: [ u a 1 v a 1 1 0 0 0 − u a 1 u b 1 − v a 1 u b 1 − u b 1 = 0 0 0 0 u a 1 v a 1 1 − u a 1 v b 1 − v a 1 v b 1 − v b 1 = 0 u a 2 v a 2 1 0 0 0 − u a 2 u b 2 − v a 2 u b 2 − u b 2 = 0 0 0 0 u a 2 v a 2 1 − u a 2 v b 2 − v a 2 v b 2 − v b 2 = 0 u a 3 v a 3 1 0 0 0 − u a 3 u b 3 − v a 3 u b 3 − u b 3 = 0 0 0 0 u a 3 v a 3 1 − u a 3 v b 3 − v a 3 v b 3 − v b 3 = 0 u a 4 v a 4 1 0 0 0 − u a 4 u b 4 − v a 4 u b 4 − u b 4 = 0 0 0 0 u a 4 v a 4 1 − u a 4 v b 4 − v a 4 v b 4 − v b 4 = 0 ] [ h 11 h 12 h 13 h 21 h 22 h 23 h 31 h 32 h 33 ] = 0 (27) \tag {27} \color{blue} \begin{bmatrix} u_{a1}&v_{a1}&{1}&{0}&0&0&-u_{a1}u_{b1}&-v_{a1}u_{b1}&-u_{b1}=0\\ 0&0&0&u_{a1}&v_{a1}&1&-u_{a1}v_{b1}&-v_{a1}v_{b1}&-v_{b1}=0\\ u_{a2}&v_{a2}&1&0&0&0&-u_{a2}u_{b2}&-v_{a2}u_{b2}&-u_{b2}=0\\ 0&0&0&u_{a2}&v_{a2}&1&-u_{a2}v_{b2}&-v_{a2}v_{b2}&-v_{b2}=0\\ u_{a3}&v_{a3}&1&0&0&0&-u_{a3}u_{b3}&-v_{a3}u_{b3}&-u_{b3}=0\\ 0&0&0&u_{a3}&v_{a3}&1&-u_{a3}v_{b3}&-v_{a3}v_{b3}&-v_{b3}=0\\ u_{a4}&v_{a4}&1&0&0&0&-u_{a4}u_{b4}&-v_{a4}u_{b4}&-u_{b4}=0\\ 0&0&0&u_{a4}&v_{a4}&1&-u_{a4}v_{b4}&-v_{a4}v_{b4}&-v_{b4}=0\\ \end{bmatrix}\left[\begin{array}{l} h_{11} \\ h_{12} \\ h_{13} \\ h_{21} \\ h_{22} \\ h_{23} \\ h_{31} \\ h_{32} \\ h_{33} \end{array}\right]=\mathbf 0 ua10ua20ua30ua40va10va20va30va40101010100ua10ua20ua30ua40va10va20va30va401010101−ua1ub1−ua1vb1−ua2ub2−ua2vb2−ua3ub3−ua3vb3−ua4ub4−ua4vb4−va1ub1−va1vb1−va2ub2−va2vb2−va3ub3−va3vb3−va4ub4−va4vb4−ub1=0−vb1=0−ub2=0−vb2=0−ub3=0−vb3=0−ub4=0−vb4=0 h11h12h13h21h22h23h31h32h33 =0(27)因为使用齐次坐标, 可以令 h 33 = 1 h_{33}=1 h33=1,那么我们只需要求解八个未知数,上式我们简写成 A ( 8 , 9 ) H ( 9 , 1 ) = 0 (28) \tag {28} \color{blue} \mathbf A_{(8,9)}\mathbf{H}_{(9,1)}=\mathbf 0 A(8,9)H(9,1)=0(28)
该公式在已知 A ( 8 , 9 ) \mathbf A_{(8,9)} A(8,9) 的情况下,我们通过 SVD奇异值分解,即可求解出单应性 H ( 9 , 1 ) \mathbf{H}_{(9,1)} H(9,1) 矩阵。
六、结语
通过该篇博客,我们已经对 单应性Homography 矩阵进行了详细的讲解。下面我们会结合前面的本质矩阵与基本矩阵进行一个对比,然后讲解他们的适用场景。或者说,什么情况下适合 单应性Homography 矩阵,什么情况下适合本质或者基本矩阵。