《计算机视觉中的多视图几何》笔记(14)

news2024/11/26 5:56:04

14 Affine Epipolar Geometry

本章主要是在仿射摄像机的情况下重新考虑对极几何,也就是仿射对极几何。

仿射摄像机的优点是它是线性的,所以很多最优化算法可以用线性代数的知识解决。如果是一般的投影摄像机,很多算法就不是线性的了(比如三角化)。

文章目录

  • 14 Affine Epipolar Geometry
    • 14.1 Affine epipolar geometry
    • 14.2 The affine fundamental matrix
      • 14.2.1 Derivation
    • 14.2.2 Properties
    • 14.3 Estimating F A F_{A} FA from image point correspondences
      • 14.3.1 The linear algorithm
      • 14.3.2 The Gold Standard algorithm
    • 14.4 Triangulation
    • 14.5 Affine reconstruction
    • 14.6 Necker reversal and the bas-relief ambiguity
    • 14.7 Computing the motion

14.1 Affine epipolar geometry

仿射摄像机的特点是它的光心在无穷远,所以从三维空间像二维平面投影时,投影射线时互相平行的。在这种情况下,对极几何就可以得到简化。

极线 所有极线都是互相平行的,因为不同点向图像投影的射线是平行的。

极点 因为所有极线互相平行,那么极点在无穷远处。

14.2 The affine fundamental matrix

仿射基本矩阵 F A F_A FA长这样:

[ 0 0 a 0 0 b c d e ] \left[ \begin{matrix} 0 & 0 & a \\ 0 & 0 & b \\ c & d & e \\ \end{matrix} \right] 00c00dabe
因为 a , b , c , d , e a,b,c,d,e abcde都不为0,那么 F A F_A FA的秩就是3,一般情况下, F F F秩是2。

14.2.1 Derivation

接下来讲一下 F A F_A FA的推导过程。

从几何角度推导 F A F_A FA的过程

  1. 考虑对应点之间的对应关系。因为从图像1到空间平面,再到图像2的所有变换都是基于平面的仿射变换,所以对应点之间的变换也是仿射变换,也就是 x ′ = H A x x'=H_A x x=HAx
  2. 构造极线。极线是通过极点和 x ′ x' x构造的。所以 l ′ = e ′ × H A x = F A x l'=e' \times H_A x =F_A x l=e×HAx=FAx,所以 F A = [ e ′ ] × H A F_A=[e']_{\times} H_A FA=[e]×HA。我们现在考虑仿射矩阵的特殊形式,以及当 e ′ e' e为无穷大时的偏斜矩阵 [ e ′ ] × [e']_{\times} [e]×,因此最后一个元素为零,具体展开如下:

F A = [ e ′ ] × H A = [ 0 0 ∗ 0 0 ∗ ∗ ∗ 0 ] [ ∗ ∗ ∗ ∗ ∗ ∗ 0 0 1 ] = [ 0 0 ∗ 0 0 ∗ ∗ ∗ ∗ ] F_A =[e']_{\times} H_A \\ = \left[ \begin{matrix} 0 & 0 & * \\ 0 & 0 & * \\ * & * & 0 \\ \end{matrix} \right] \left[ \begin{matrix} * & * & * \\ * & * & * \\ 0 & 0 & 1 \\ \end{matrix} \right] \\ = \left[ \begin{matrix} 0 & 0 & * \\ 0 & 0 & * \\ * & * & * \\ \end{matrix} \right] FA=[e]×HA= 00000 001 = 0000

从代数角度推导 F A F_A FA的过程

F = [ e ′ ] × P ′ P + F=[e']_{\times}P'P^{+} F=[e]×PP+,把仿射摄像机的矩阵带入即可。

14.2.2 Properties

F A F_A FA有5个非零元素,所以有4个自由度,是这么算的:2个极点,每个贡献一个自由度,2个平面上的极线互相映射,贡献2个自由度。

因为 F A e = 0 F_A e = 0 FAe=0,所以极点表示为 ( − d , c , 0 ) (-d,c,0) (dc0),所以 e e e l ∞ l_{\infty} l上。

x x x对应的极线 l ′ = F A x = ( a , b , c x + d y + e ) T l'=F_A x=(a,b,cx+dy+e)^T l=FAx=(abcx+dy+e)T,此式表明所有的极线都是平行的,因为 ( a , b ) (a,b) (ab) ( x , y ) (x,y) (xy)互相独立

14.3 Estimating F A F_{A} FA from image point correspondences

给定若干对对应点,矩阵是 x ′ T F A x = 0 x^{'T}F_{A}x=0 xTFAx=0定义的,所以我们可以从对应点中计算 F A F_A FA

14.3.1 The linear algorithm

因为 F A F_A FA规定了点与点之间的对应关系,所以给出足够过的点,肯定是能把 F A F_A FA计算出来的。比如我们规定 x i = ( x i , y i , 1 ) , x i ′ = ( x i ′ , y i ′ , 1 ) x_i=(x_i,y_i,1),x'_i=(x'_i,y'_i,1) xi=(xiyi1)xi=(xiyi1)。这样一对对应点可以构造一个线性方程:
a x i ′ + b y i ′ + c x i + d y i + e = 0 ax'_i+by'_i+cx_i+dy_i+e=0 axi+byi+cxi+dyi+e=0

写成矩阵形式就是 A f = 0 Af=0 Af=0 A A A是一个 n × 5 n \times 5 n×5的矩阵,最少需要4对点。 F A F_A FA有4个自由度,剩下的1个变量可由其他4个来表示。

奇异性约束

我们知道一般情况的 F F F是奇异矩阵,所以 F A F_A FA也应该是一个奇异性矩阵。而且 F A F_A FA的形式就确定了它的rank不会大于2,所以没有必要将奇异性约束像求普通 F F F那样加入求解的过程,换言之,不用考虑这个约束,直接求解就可以了。

几何解释

求解两个图像上的对应点就是在四维空间中去拟合一个平面( a x i ′ + b y i ′ + c x i + d y i + e = 0 ax'_i+by'_i+cx_i+dy_i+e=0 axi+byi+cxi+dyi+e=0 就是四维空间中的平面)。这样做有两个好处:第一,求 F F F就是一个平面拟合过程,容易思考。第二,可以用sampson损失函数,因为它是唯一的一阶近似方法。

14.3.2 The Gold Standard algorithm

在这里插入图片描述

知道了求解 F F F的几何解释,我们就用这个几何解释来求解它。求解的过程就是黄金标准算法。我们考虑有噪声的情况,理论点可以表示为 x i ^ , x i ^ ′ \hat{x_i},\hat{x_i}' xi^xi^,实际观测点是 x i , x i ′ x_i,x'_i xixi,所谓的黄金标准算法就是优化以下函数:

m i n ∑ i d ( x i , x i ^ ) 2 + d ( x i ′ , x i ^ ′ ) 2 min \sum_{i} d(x_i,\hat{x_i})^2 + d(x'_i,\hat{x_i}')^2 minid(xixi^)2+d(xixi^)2

其中 x i ^ , x i ^ ′ \hat{x_i},\hat{x_i}' xi^xi^满足 x i ^ ′ T F A x i ^ = 0 \hat{x_i}^{'T}F_A \hat{x_i}=0 xi^TFAxi^=0,如果我们考虑几何解释,我们就可以考虑四维空间的一个点 X i = ( x i ′ , y i ′ , x i , y i ) X_i=(x'_i,y'_i,x_i,y_i) Xi=(xiyixiyi),用这个点去拟合一个平面,其参数为 ( a , b , c , d , e ) (a,b,c,d,e) (abcde),那么就是求点到平面的最小距离。
d ⊥ = a x i ′ , b y i ′ + c x i + d y i + e a 2 + b 2 + c 2 + d 2 d_{\perp} = \frac{ax'_i,by'_i+cx_i+dy_i+e}{\sqrt{a^2+b^2+c^2+d^2}} d=a2+b2+c2+d2 axibyi+cxi+dyi+e

求解cost function函数的过程如下:
先对 e e e求导数,令其等于0,可以得到:
e = − 1 n ∑ ( N T X i ) = − N T X ˉ e=-\frac{1}{n} \sum(N^T X_i) = -N^T \bar{X} e=n1(NTXi)=NTXˉ

N = ( a , b , c , d ) N=(a,b,c,d) N=(abcd)

N ˉ \bar{N} Nˉ就是所有已知 X X X的均值,也就是质心。

e e e反带回 d ⊥ d_{\perp} d 得到:

d ⊥ = 1 ∣ ∣ N ∣ ∣ 2 ∑ i ( N T Δ X i ) d_{\perp} = \frac{1}{||N||^2} \sum_i(N^T \Delta X_i) d=∣∣N21i(NTΔXi)

Δ X i = X i − X ˉ \Delta X_i = X_i - \bar{X} ΔXi=XiXˉ

Δ X i \Delta X_i ΔXi的行构造一个矩阵,然后直接SVD分解就可以了。
最后一个需要注意的点:黄金标准算法需要多于4对对应点。那么如果我们只知道4对对应点,该怎么办? 下面的算法来解决。

4对对应点求解 F A F_A FA 的步骤如下:

  1. 用前三对对应点计算一个仿射变换 H A H_A HA,也就是求解 x i ′ = H A x i x'_i=H_A x_i xi=HAxi
  2. H A H_A HA计算 H A x 4 H_A x_4 HAx4,然后 ( H A x 4 × x 4 ′ ) (H_A x_4 \times x'_4) (HAx4×x4) 得到极线 l ′ l' l
    那么极点就是 e ′ = ( − l 2 ′ , l 1 ′ , 0 ) e'=(-l'_2,l'_1,0) e=(l2l10)
  3. 所以对任何一个点 x x x,它对应的极线就是 e ′ × ( H A x ) = F A x e' \times (H_A x) = F_A x e×(HAx)=FAx

14.4 Triangulation

现在假设我们知道一对对应点 ( x , y ) ↔ ( x ′ , y ′ ) (x,y) \leftrightarrow (x',y') (xy)(xy) 和仿射基本矩阵 F A F_A FA,因为已知对应点是含噪声的,我们想要确定不含噪声的点 ( x ^ , y ^ ) ↔ ( x ^ ′ , y ^ ′ ) (\hat{x},\hat{y}) \leftrightarrow (\hat{x}',\hat{y}') (x^y^)(x^y^) 所以我们得到一个带约束的优化:

( x − x ^ ) 2 + ( y − y ^ ) 2 + ( x ′ − x ^ ′ ) 2 + ( y − y ^ ′ ) 2 (x-\hat{x})^2 + (y-\hat{y})^2 + (x'-\hat{x}')^2 + (y-\hat{y}')^2 (xx^)2+(yy^)2+(xx^)2+(yy^)2

同时:

( x ^ , y ^ , 1 ) F A ( x ^ ′ , y ^ ′ , 1 ) = 0 (\hat{x},\hat{y},1) F_A (\hat{x}',\hat{y}',1) = 0 (x^y^1)FA(x^y^1)=0

那么怎么样求解呢? 除了几何解释的求解法以外,我们还可以用sampson损失函数:

( x ^ ′ y ^ ′ x ^ y ^ ) = ( x ′ y ′ x y ) − a x ′ + b y ′ + c x + d y + e a 2 + b 2 + c 2 + d 2 ( a b c d ) \begin{pmatrix} \hat{x}' \\ \hat{y}' \\ \hat{x} \\ \hat{y} \\ \end{pmatrix}= \begin{pmatrix} x' \\ y' \\ x \\ y \\ \end{pmatrix}- \frac{ax'+by'+cx+dy+e}{a^2+b^2+c^2+d^2} \begin{pmatrix} a \\ b \\ c \\ d \\ \end{pmatrix} x^y^x^y^ = xyxy a2+b2+c2+d2ax+by+cx+dy+e abcd

14.5 Affine reconstruction

假设我们有多于4对对应点 x i ↔ x i ′ x_i \leftrightarrow x'_i xixi,如果摄像机是投影摄像机,那么重建的结果就是投影重建。现在如果摄像机是仿射摄像机,那么重建结果就是仿射重建。本节就来说明这个结果。

我们假设空间中有4个不共面的点 X i X_i Xi,我们选择 X 0 X_0 X0作为原点。然后我们构造三个坐标轴,表示为 E i ~ = X i ~ − X 0 ~ \tilde{E_i} = \tilde{X_i} - \tilde{X_0} Ei~=Xi~X0~。所以对于一个空间中的点 X = ( x , y , z ) X=(x,y,z) X=(xyz),它的坐标就可以表示为:

X ~ = X 0 + x E 1 ~ + y E 2 ~ + z E 3 ~ \tilde{X} = X_0 + x \tilde{E_1} + y \tilde{E_2} + z \tilde{E_3} X~=X0+xE1~+yE2~+zE3~

X 0 ~ = ( 0 0 0 ) X 1 ~ = ( 1 0 0 ) X 2 ~ = ( 0 1 0 ) X 3 ~ = ( 0 0 1 ) \tilde{X_0} = \begin{pmatrix} 0 \\ 0 \\ 0 \\ \end{pmatrix} \tilde{X_1} = \begin{pmatrix} 1 \\ 0 \\ 0 \\ \end{pmatrix} \tilde{X_2} = \begin{pmatrix} 0 \\ 1 \\ 0 \\ \end{pmatrix} \tilde{X_3} = \begin{pmatrix} 0 \\ 0 \\ 1 \\ \end{pmatrix} X0~= 000 X1~= 100 X2~= 010 X3~= 001

有了这些公式以后,我们来看看仿射摄像机的投影过程长什么样,该过程可以被表达为:
x ~ = M 2 × 3 X ~ + t ~ \tilde{x} = M_{2 \times 3} \tilde{X} + \tilde{t} x~=M2×3X~+t~

所以说上文的 E i ~ \tilde{E_i} Ei~可以被表示成 e i ~ = M 2 × 3 E i ~ \tilde{e_i}=M_{2 \times 3} \tilde{E_i} ei~=M2×3Ei~,那么对于空间点 X = ( x , y , z ) X=(x,y,z) X=(xyz),它在第一幅图像中就可以被表示成:
x e 1 ~ + y e 2 ~ + z e 3 ~ x \tilde{e_1} + y \tilde{e_2} + z \tilde{e_3} xe1~+ye2~+ze3~

对于第二幅图象, e ~ ′ = M 2 × 3 E i ~ \tilde{e}'=M_{2 \times 3} \tilde{E_i} e~=M2×3Ei~,那么 X X X在第二幅图象中就可以表示成:

x e 1 ~ ′ + y e 2 ~ ′ + z e 3 ~ ′ x \tilde{e_1}' + y \tilde{e_2}' + z \tilde{e_3}' xe1~+ye2~+ze3~

14.6 Necker reversal and the bas-relief ambiguity

本章主要讲述在已标定摄像机的情况下,只用两个图像会产生一系列的歧义.
主要是两种歧义:

  1. Necker reversal
    主要原因是物体旋转 ρ \rho ρ 和旋转 − ρ -\rho ρ的镜像,在affine摄像机下会产生同样的投影图像。如果是透视投影,那么每个点都会有不同的深度,所以这种歧义就没有了。

  2. The bas-relief ambiguity
    主要原因是摄像机进行一个旋转后,从光心出发的光线依旧相交于同一点。这样导致深度和旋转角度是不确定的,参见P357,fig14.9(b),看图容易理解一点。

14.7 Computing the motion

本节主要讲述如果从 F A F_A FA中计算摄像机运动。

我们首先把摄像机的运动表示为 R = R ρ R θ R=R_{\rho}R_{\theta} R=RρRθ

θ \theta θ是绕视线方向的旋转角度. ρ \rho ρ是绕与图像平面平行的轴的旋转角度, ϕ \phi ϕ是图像x轴的旋转角度.具体参见P358图14.10,图像之间除了旋转还有一个缩放因子 s s s

具体的推导过程我们省略,在这里直接给出公式:
tan ⁡ ϕ = b a tan ⁡ ( ϕ − θ ) = d c s 2 = c 2 + d 2 a 2 + b 2 \tan \phi = \frac{b}{a} \\ \tan (\phi - \theta) = \frac{d}{c} \\ s^2 = \frac{c^2+d^2}{a^2+b^2} tanϕ=abtan(ϕθ)=cds2=a2+b2c2+d2

a , b , c , d a,b,c,d a,b,c,d就是黄金标准算法里提到的四维空间的平面参数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1122515.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[架构之路-241]:目标系统 - 纵向分层 - 企业信息化与企业信息系统(多台企业应用单机组成的企业信息网络)

目录 前言: 一、什么是信息系统:计算机软件硬件系统 1.1 什么是信息 1.2 什么是信息系统 1.3 什么是信息技术 1.4 什么是信息化与信息化转型 1.5 什么是数字化与数字化转型(信息化的前提) 1.6 数字化与信息化的比较 1.7 …

Android 10.0 Launcher3定制化之动态时钟图标功能实现

1.概述 在10.0的系统产品rom定制化开发中,在Launcher3中的定制化的一些功能中,对于一些产品要求需要实现动态时钟图标功能,这就需要先绘制时分秒时针表盘,然后 每秒刷新一次时钟图标,时钟需要做到实时更新,做到动态时钟的效果,接下来就来分析这个功能的实现 如图: 2.动…

基于nodejs+vue市民健身中心网上平台mysql

市民健身中心网上平台分为用户界面和管理员界面, 用户信息模块:管理员可在后台添加、删除普通用户,查看、编辑普通用户的信息。 课程表管理模块:管理员可对课程表进行修改任课教师、新增某一堂课、删除某一堂课、查找课程、修改…

论文导读|9月MSOM文章精选:智慧城市运筹

推文作者:郭浩然 编者按 本期论文导读围绕“智慧城市运筹”这一话题,简要介绍并分析了近期的三篇MSOM文章,分别涉及了最后一公里配送中的新模式:“司机辅助”,易腐库存管理的新策略:“截断平衡”&#xff0…

Openssl数据安全传输平台004:套接字C语言API封装为C++类 / 客户端及服务端代码框架和代码实现

文章目录 0. 代码仓库1. 客户端C API2. 客户端C API的封装分析2.1 sckClient_init()和sckClient_destroy()2.2 sckClient_connect2.3 sckClient_closeconn()2.4 sckClient_send()2.5 sckClient_rev()2.6 sck_FreeMem 3. 客户端C API4. 服务端C API5. 服务端C6. 客户端和服务端代…

性能测试LoadRunner02

本篇主要讲:通过Controller设计简单的测试场景,可以简单的分析性能测试报告。 Controller 设计场景 Controller打开方式 1)通过VUG打开 2)之间双击Controller 不演示了,双击打开,选择Manual Scenario自…

buuctf[HCTF 2018]WarmUp 1

题目环境&#xff1a; 发现除了表情包&#xff0c;再无其他F12试试发现source.php文件访问这个文件&#xff0c;格式如下&#xff1a;url/source.php回显如下&#xff1a;PHP代码审计&#xff1a; <?php highlight_file(__FILE__); class emmm {public static function ch…

Linux笔记之diff工具软件P4merge的使用

Linux笔记之diff工具软件P4merge的使用 code review! 文章目录 Linux笔记之diff工具软件P4merge的使用1.安装和配置2.使用&#xff1a;p4merge a.cc b.cc3.配置git 参考博文: Ubuntu Git可视化比较工具 P4Merge 的安装/配置及使用 1.安装和配置 $ wget https://cdist2.per…

分享一下我家网络机柜,家庭网络设备推荐

家里网络机柜搞了几天终于搞好了&#xff0c;非专业的&#xff0c;走线有点乱&#xff0c;勿喷。 从上到下的设备分别是&#xff1a; 无线路由器&#xff08;当ap用&#xff09;:TL-XDR6088 插排&#xff1a;德木pdu机柜插排 硬盘录像机&#xff1a;TL-NVR6108-L8P 第二排左边…

OpenGL 环境搭建和 hello world 程序(LearnOpenGL P1)

文章目录 OpenGLGLFW & CMake链接到 Hello OpenGL&#xff01;GLAD运行测试 OpenGL 什么是 OpenGL&#xff0c;OpenGL 能做什么在此不再赘述 运行 OpenGL 需要准备的有&#xff1a; CMake&#xff1a;用于执行编译VS&#xff1a;我使用的是 Visual Studio 17 2022 版本G…

系统架构师备考倒计时13天(每日知识点)

1. 数据仓库四大特点 面向主题的。操作型数据库的数据组织面向事务处理任务&#xff0c;各个业务系统之间各自分离&#xff0c;而数据仓库中的数据是按照一定的主题域进行组织的。集成的。数据仓库中的数据是在对原有分散的数据库数据抽取、清理的基础上经过系统加工、汇总和整…

[ 云计算 | AWS 实践 ] Java 如何重命名 Amazon S3 中的文件和文件夹

本文收录于【#云计算入门与实践 - AWS】专栏中&#xff0c;收录 AWS 入门与实践相关博文。 本文同步于个人公众号&#xff1a;【云计算洞察】 更多关于云计算技术内容敬请关注&#xff1a;CSDN【#云计算入门与实践 - AWS】专栏。 本系列已更新博文&#xff1a; [ 云计算 | …

100 # mongoose 的使用

mongoose elegant mongodb object modeling for node.js https://mongoosejs.com/ 安装 mongoose npm i mongoose基本示例 const mongoose require("mongoose");// 1、连接 mongodb let conn mongoose.createConnection("mongodb://kaimo313:kaimo313loc…

python算法

第一章 算法 一系列解决单个或多个问题&#xff0c;或有执行计算机功能的命令集合。人类在解决复杂问题时所采用的一系列特定的方法&#xff0c;即为算法。 算法与程序的区别 程序指一组计算机能识别和执行&#xff0c;并有一定功能的指令。程序是以计算机能理解的各式各样的…

CCF CSP认证 历年题目自练Day37

题目一 试题编号&#xff1a; 201312-3 试题名称&#xff1a; 最大的矩形 时间限制&#xff1a; 1.0s 内存限制&#xff1a; 256.0MB 问题描述&#xff1a; 问题描述   在横轴上放了n个相邻的矩形&#xff0c;每个矩形的宽度是1&#xff0c;而第i&#xff08;1 ≤ i ≤ n&a…

SLAM ORB-SLAM2(6)系统对象

SLAM ORB-SLAM2(6)系统对象 1. 封装2. 成员变量2.1. 核心数据2.2. 三个对象2.3. 三个线程2.4. 跟踪状态3. 成员函数4. 构造函数5. 数据驱动接口1. 封装 在 《SLAM ORB-SLAM2(5)例程了解》 了解到创建了一个 ORB_SLAM2::System 类型的对象 然后不断的把数据供给该对象就可以…

图论02-【无权无向】-图的深度优先遍历DFS

文章目录 1. 代码仓库2. 深度优先遍历图解3. 主要代码3.1 dfs递归的主要代码 - 先序遍历和后序遍历3.2 dfs非递归的主要代码 - 使用栈3.3 递归与非递归遍历出来的顺序不一致3.4 标记不同的联通分量 4. 完整代码4.1 CC.java4.2 Graph.java 1. 代码仓库 https://github.com/Chufe…

【计算机网络】TCP 协议的相关特性

TCP&#xff08;传输控制协议&#xff09;是一种面向连接的、可靠的、基于字节流的协议。以下是TCP协议的相关特性&#xff1a; 可靠性&#xff1a;TCP通过确认和重传机制保证数据的可靠传输。 面向连接&#xff1a;TCP在传输数据前需要先建立连接。连接的建立过程包括三次握手…

03、Python 字符串高级用法

目录 Python 字符串高级用法转义字符字符串格式化序列相关的方法大小写相关的方法dir 可以查看某个类的所有方法删除空白查找、替换相关方法 Python 字符串高级用法 转义字符 字符串格式化 序列相关的方法 字符串本质就是由多个字符组成&#xff0c;字符串的本质就是不可变序…

Metabase:简单快捷的商业智能与数据分析工具 | 开源日报 No.61

moby/moby Stars: 66.8k License: Apache-2.0 Moby 是一个由 Docker 创建的开源项目&#xff0c;旨在实现和加速软件容器化。它提供了工具包组件的“乐高集”&#xff0c;可以将它们组装成基于容器的自定义系统的框架。组件包括容器生成工具、容器注册表、业务流程工具、运行时…