我是靠谱客的博主 喜悦冷风,最近开发中收集的这篇文章主要介绍史上最简SLAM零基础解读(4) - 单应性Homography →公式推导与细节理解,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

本人讲解关于slam一系列文章汇总链接:史上最全slam从零开始
有兴趣的朋友可以加微信 17575010159 相互讨论技术 - 文末公众号也可关注

 

一、前言

该篇博客,主要是对 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} pb1Hpa1(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(RbadatbanaT)Ka1=KbRba(E+da1tabnaT)Ka1(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=Z1KX          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 nTX+d=0(06)
上面我们已经相机系坐标转像素系坐标,那么反过来像素系坐标转相机系坐标公式如下:
X = Z ⋅ K − 1 p (07) tag{07} color{blue} mathbf X=Zcdot mathbf K^{-1}p X=ZK1p(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} ZnTK1p+d=0               Z=nTK1pd(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}^Tmathbf{K}^{-1} p} cdot mathbf{K}^{-1} p X=nTK1pdK1p(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} ZbKb1pb=ZaRbaKa1pa+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=ZbZaKbRbaKa1pa+Zb1Kbtba(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=ZbZaKbRbaKa1pa+Zb1Kbtba=ZbZaKb(RbaKa1pa+Zatba)=ZbZaKb(RbaKa1padatbanaTKa1pa)=ZbZaKb(RbadatbanaT)Ka1pa(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} pbKb(RbadatbanaT)Ka1pa(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(RbadatbanaT)Ka1         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(RbadatbanaT)Ka1=Kb(Rba+RbatabdanaT)Ka1pa=KbRba(E+da1tabnaT)Ka1pa=KbRba(E+da1tabnaT)Ka1pa(20)这样结合起来就得到前面(04)式。竟然我们推导出 H mathbf H H 矩阵,那么如何进行求解呢,如下推导。

 

五、八点法求解

根据前面的公式(02) p b 1 ∝ H p a 1 {p}_{b1} propto mathbf{H} {p}_{a1} pb1Hpa1,其表示的是一对匹配点,使用齐次坐标展开如下: [ 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] proptoleft[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] ub1vb11h11h21h31h12h22h32h13h23h33ua1va11(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+h13h31ua1ub1h32va1ub1h33ub1=0h21ua1+h22va1+h23h31ua1vb1h32va1vb1h33vb1=0(24) 因为使用齐次坐标,那么 H mathbf{H} H 的作用与 a H amathbf{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+h13h31ua1ub1h32va1ub1h33ub1=0h21ua1+h22va1+h23h31ua1vb1h32va1vb1h33vb1=0h11ua2+h12va2+h13h31ua2ub2h32va2ub2h33ub2=0h21ua2+h22va2+h23h31ua2vb2h32va2vb2h33vb2=0h11ua3+h12va3+h13h31ua3ub3h32va3ub3h33ub3=0h21ua3+h22va3+h23h31ua3vb3h32va3vb3h33vb3=0h11ua4+h12va4+h13h31ua4ub4h32va4ub4h33ub4=0h21ua4+h22va4+h23h31ua4vb4h32va4vb4h33vb4=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 ua10ua20ua30ua40va10va20va30va40101010100ua10ua20ua30ua40va10va20va30va401010101ua1ub1ua1vb1ua2ub2ua2vb2ua3ub3ua3vb3ua4ub4ua4vb4va1ub1va1vb1va2ub2va2vb2va3ub3va3vb3va4ub4va4vb4ub1=0vb1=0ub2=0vb2=0ub3=0vb3=0ub4=0vb4=0h11h12h13h21h22h23h31h32h33=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 矩阵,什么情况下适合本质或者基本矩阵。
 
 
 
在这里插入图片描述

最后

以上就是喜悦冷风为你收集整理的史上最简SLAM零基础解读(4) - 单应性Homography →公式推导与细节理解的全部内容,希望文章能够帮你解决史上最简SLAM零基础解读(4) - 单应性Homography →公式推导与细节理解所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部