您当前的位置: 首页 > 
  • 3浏览

    0关注

    417博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

史上最简SLAM零基础解读(4) - 单应性Homography →公式推导与细节理解

江南才尽,年少无知! 发布时间:2022-04-25 10:03:42 ,浏览量:3

本人讲解关于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​= ​ub1​vb1​1​ ​        pb1​= ​ua1​va1​1​ ​        Hba​= ​h1​h4​h7​​h2​h5​h8​​h3​h6​h9​​ ​(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} Hba​pa1​ 的方向是同方向,但是没有约束尺度。那么可以通过叉乘计算是可以消去尺度因子,因此上式还可以转化为等式,表达如下: 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​×Hba​pa1​=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​−da​tba​naT​​)Ka−1​=Kb​Rba​(E+da​1​⋅tab​naT​)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= ​fx​00​0fy​0​cx​cy​1​ ​(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] [Xb​1​]=Tba​ [Rba​0​tba​1​]​​[Xa​1​](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​=Rba​Xa​+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−1​pb​=Za​⋅Rba​Ka−1​pa​+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​=Zb​Za​​⋅Kb​Rba​Ka−1​pa​+Zb​1​⋅Kb​tba​(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​​=Zb​Za​​⋅Kb​Rba​Ka−1​pa​+Zb​1​⋅Kb​tba​=Zb​Za​​⋅Kb​(Rba​Ka−1​pa​+Za​tba​​)=Zb​Za​​⋅Kb​(Rba​Ka−1​pa​−da​tba​naT​Ka−1​pa​​)=Zb​Za​​⋅Kb​(Rba​−da​tba​naT​​)Ka−1​pa​​(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}} Zb​Za​​ 这个尺度因子。那么上式可以写成: 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​−da​tba​naT​​)Ka−1​pa​(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​−da​tba​naT​​)Ka−1​         pb​=Hba​pa​(17)另外我们根据变换矩阵 T a b T b a = E \mathbf T_{ab}\mathbf T_{ba}=\mathbf E Tab​Tba​=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​= ​Rab​0T​tab​1​ ​         Tba​= ​Rba​0T​tba​1​ ​(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} Rba​tab​=−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​−da​tba​naT​​)Ka−1​=Kb​(Rba​+Rba​tab​da​naT​​)Ka−1​pa​=Kb​Rba​(E+da​1​⋅tab​naT​)Ka−1​pa​=Kb​Rba​(E+da​1​⋅tab​naT​)Ka−1​pa​​(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] ​ub1​vb1​1​ ​∝ ​h11​h21​h31​​h12​h22​h32​​h13​h23​h33​​ ​ ​ua1​va1​1​ ​(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. ⎩ ⎨ ⎧​ub1​vb1​1​=h11​ua1​+h12​va1​+h13​=h21​ua1​+h22​va1​+h23​=h31​ua1​+h32​va1​+h33​​   ⇒   ⎩ ⎨ ⎧​ub1​vb1​​=1ub1​​=h31​ua1​+h32​va1​+h33​h11​ua1​+h12​va1​+h13​​=1vb1​​=h31​ua1​+h32​va1​+h33​h21​ua1​+h22​va1​+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​(h31​ua1​+h32​va1​+h33​)vb1​(h31​ua1​+h32​va1​+h33​)​=h11​ua1​+h12​va1​+h13​=h21​ua1​+h22​va1​+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. ⎩ ⎨ ⎧​h11​ua1​+h12​va1​+h13​−h31​ua1​ub1​−h32​va1​ub1​−h33​ub1​=0h21​ua1​+h22​va1​+h23​−h31​ua1​vb1​−h32​va1​vb1​−h33​vb1​=0​(24) 因为使用齐次坐标,那么 H \mathbf{H} H 的作用与 a H a\mathbf{H} aH 是一样的,也就是 1 h 33 H \frac{1}{h33}\mathbf{H} h331​H 与 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= ​h11​h21​h31​​h12​h22​h32​​h13​h23​1​ ​(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. ⎩ ⎨ ⎧​h11​ua1​+h12​va1​+h13​−h31​ua1​ub1​−h32​va1​ub1​−h33​ub1​=0h21​ua1​+h22​va1​+h23​−h31​ua1​vb1​−h32​va1​vb1​−h33​vb1​=0h11​ua2​+h12​va2​+h13​−h31​ua2​ub2​−h32​va2​ub2​−h33​ub2​=0h21​ua2​+h22​va2​+h23​−h31​ua2​vb2​−h32​va2​vb2​−h33​vb2​=0h11​ua3​+h12​va3​+h13​−h31​ua3​ub3​−h32​va3​ub3​−h33​ub3​=0h21​ua3​+h22​va3​+h23​−h31​ua3​vb3​−h32​va3​vb3​−h33​vb3​=0h11​ua4​+h12​va4​+h13​−h31​ua4​ub4​−h32​va4​ub4​−h33​ub4​=0h21​ua4​+h22​va4​+h23​−h31​ua4​vb4​−h32​va4​vb4​−h33​vb4​=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 ​ua1​0ua2​0ua3​0ua4​0​va1​0va2​0va3​0va4​0​10101010​0ua1​0ua2​0ua3​0ua4​​0va1​0va2​0va3​0va4​​01010101​−ua1​ub1​−ua1​vb1​−ua2​ub2​−ua2​vb2​−ua3​ub3​−ua3​vb3​−ua4​ub4​−ua4​vb4​​−va1​ub1​−va1​vb1​−va2​ub2​−va2​vb2​−va3​ub3​−va3​vb3​−va4​ub4​−va4​vb4​​−ub1​=0−vb1​=0−ub2​=0−vb2​=0−ub3​=0−vb3​=0−ub4​=0−vb4​=0​ ​ ​h11​h12​h13​h21​h22​h23​h31​h32​h33​​ ​=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 矩阵,什么情况下适合本质或者基本矩阵。      

关注
打赏
1592542134
查看更多评论
立即登录/注册

微信扫码登录

0.6834s