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

news2024/11/25 9:49:02

12 Structure Computation

本章讲述如何在已知基本矩阵 F F F和两幅图像中若干对对应点 x ↔ x ′ x \leftrightarrow x' xx的情况下计算三维空间点 X X X的位置。

文章目录

  • 12 Structure Computation
    • 12.1 Problem statement
    • 12.2 Linear triangulation methods
    • 12.3 Geometric error cost function
    • 12.4 Sampson approximation (first-order geometric correction)
    • 12.5 An optimal solution
    • 12.5.1 Reformulation of the minimization problem
    • 12.5.2 Details of the minimization
    • 12.5.3 Local minima
    • 12.5.4 Evaluation on real images
  • 12.6 Probability distribution of the estimated 3D point
    • 12.6 线段重建

12.1 Problem statement

我们假设已知摄像机矩阵 P P P P ′ P' P,基本矩阵 F F F,还有两幅图像中若干对对应点 x ↔ x ′ x \leftrightarrow x' xx。因为有噪声的存在,图像中的点反投影回去的两条射线不一定相交, x F x ′ xFx' xFx也不一定等于0,所以简单三角化不一定可行。

我们先回忆一下第10章三维重建的知识。我们介绍了好几种不同种类的三维重建,这取决于我们对摄像机矩阵的知晓程度。那么结合本章的三角化,我们希望三角化在不同种类的重建之间能给出同样的结果。我们首先用 τ \tau τ来代表三角化的过程,如果 τ \tau τ能满足下式,那么我们就说三角化在变换 H H H下是不变的:
τ ( x , x ′ , P , P ′ ) = H − 1 τ ( x , x ′ , P H − 1 , P ′ H − 1 ) \tau(x,x',P,P') = H^{-1}\tau(x,x',PH^{-1},P'H^{-1}) τ(x,x,P,P)=H1τ(x,x,PH1,PH1)

为什么需要讨论这个?这是因为我们首先需要确定三维重建的种类,才能决定优化目标的形式。如果我们只知道摄像机矩阵是一个projective matrix,那么我们就不能在三维空间最优化目标函数。因为这样的优化函数在投影变换中不能给出唯一的结果,因为距离和垂直度等概念在projective geometry的背景下无效。所以,本章给出的三角化方法优化的是二维图像上的距离,所以本章的方法在投影变换(projective transformation)中是不变的。
在这里插入图片描述

12.2 Linear triangulation methods

对于两幅图像,我们分别有 x = P X , x ′ = P X ′ x=PX,x'=PX' x=PX,x=PX,我们可以将第一个方程改成 x × P X = 0 x \times PX=0 x×PX=0,第二幅图也一样。我们继续改写就可以有 A X = 0 AX=0 AX=0

Homogeneous method 找出 A A A最小特征值对应的特征向量

Inhomogeneous method 参见4.1.2节,原书P90

讨论
Inhomogeneous method假设点不在无穷远处,不适合projective reconstruction。其实这两个方法都不适合。

Inhomogeneous method适合affine reconstruction。

Homogeneous method不适合affine reconstruction。

12.3 Geometric error cost function

在这里插入图片描述
由于图像中有噪声的存在, x ↔ x ′ x \leftrightarrow x' xx其实不能满足极线的约束,我们用 x ˉ , x ′ ˉ \bar{x},\bar{x'} xˉ,xˉ表示没有噪声的点。那么我们可以构建以下优化函数:

C ( x , x ′ ) = d ( x , x ^ ) 2 + d ( x ′ , x ^ ′ ) 2 s u b j e c t   t o   x ′ ^ T F x ^ = 0 C(x,x') = d(x,\hat{x})^2 + d(x',\hat{x}')^2 \\ subject \ to \ \hat{x'}^{T}F\hat{x} = 0 C(x,x)=d(x,x^)2+d(x,x^)2subject to x^TFx^=0

其中 d d d表示两点之间的欧氏距离。这相当于最小化点 X X X的重投影误差,该点 X X X通过与 F F F一致的投影矩阵映射到两个点,如图12.2。

12.4 Sampson approximation (first-order geometric correction)

在这里插入图片描述
我们定义 X X X X ^ \hat{X} X^之间的差为 δ X \delta_X δX
δ X = − J T ( J J T ) − 1 ϵ \delta_X = -J^T(JJ^T)^{-1} \epsilon δX=JT(JJT)1ϵ

其中
ϵ = x ′ T F x J = ∂ ϵ / ∂ x = [ ( F T x ′ ) 1 , ( F T x ′ ) 2 , ( F X ) 1 , ( F X ) 2 ] \epsilon = x'^{T}Fx \\ J = \partial \epsilon/ \partial x=[(F^{T}x')_{1}, (F^{T}x')_{2},(FX)_{1},(FX)_{2}] ϵ=xTFxJ=ϵ/x=[(FTx)1,(FTx)2,(FX)1,(FX)2]

其中 ( F T x ′ ) 1 = f 11 x ′ + f 21 y ′ + f 31 (F^{T}x')_{1}=f_{11}x'+f_{21}y'+f_{31} (FTx)1=f11x+f21y+f31,以此类推。
所以我们可以看出该差值其实是基本矩阵方程关于 x x x的导数
那么 X X X X ^ \hat{X} X^之间的关系可以写成:
X ^ = X + δ X \hat{X} = X + \delta_X X^=X+δX

我们只需要把 δ X \delta_X δX算出来,然后对计算出的理论点 X X X按照上式进行一个纠正就可以了。
在这里插入图片描述

12.5 An optimal solution

本节介绍一种可以找到全局最优解的优化函数,并且是非迭代的,我们同时假设噪声服从高斯分布。

12.5.1 Reformulation of the minimization problem

先对问题进行一个梳理。

我们知道第一幅图的极点一定在极线上,第二幅图的极点也满足这个性质。反过来,在极线上的点也满足基本矩阵的约束。那么就能让观测到的点尽可能靠近极线,也就是找观测点到极线的距离,并使其最小。

所以我们就可以构建出以下损失函数
d ( x , l ) 2 + d ( x ′ + l ′ ) 2 d(x,l)^2 + d(x'+l')^2 d(x,l)2+d(x+l)2

我们的策略如下:

  1. 将极线方程参数化,所以第一幅图像中的极线方程就可以写为 l ( t ) l(t) l(t)
  2. 利用基本矩阵 F F F,和 l ( t ) l(t) l(t)来计算第二幅图像中的极线l ′ ( t ) '(t) (t)
  3. 将损失函数写成 d ( x , l ( t ) ) 2 + d ( x ′ + l ′ ( t ) ) 2 d(x,l(t))^2 + d(x'+l'(t))^2 d(x,l(t))2+d(x+l(t))2
  4. 求解最优的 t t t

12.5.2 Details of the minimization

接下来我们讲一下需要注意的一些细节。

首先,两幅图中对应点都不能与极点重合。

并且,我们可以对两幅图都做一个刚体变换,那么 x , x ′ x,x' x,x就可以被放置在原点 ( 0 , 0 , 1 ) (0,0,1) (0,0,1),那么两幅图的极点分别是 ( 1 , 0 , f ) , ( 1 , 0 , f ′ ) (1,0,f),(1,0,f') (1,0,f),(1,0,f)。我们知道极点也是要满足 F F F的,所以我们有 F ( 1 , 0 , f ) T = ( 1 , 0 , f ′ ) F = 0 F(1,0,f)^T = (1,0,f')F = 0 F(1,0,f)T=(1,0,f)F=0,如此以来我们就可以把基本矩阵表示为一种特殊形式:
F = [ f f ′ d − f ′ c − f ′ d − f b a b − f d c d ] F = \left[ \begin{matrix} ff'd & -f'c & -f'd \\ -fb & a & b\\ -fd & c & d \\ \end{matrix} \right] F= ffdfbfdfcacfdbd

同时我们也知道极线会通过极点 ( 1 , 0 , f ) (1,0,f) (1,0,f),我们再找一个特殊点,那就是极线与 y y y轴的交点 ( 0 , t , 1 ) (0,t,1) (0,t,1),所以极线就可以写成 ( 1 , 0 , f ) × ( 0 , t , 1 ) = ( t f , 1 , − t ) (1,0,f) \times (0,t,1) = (tf,1,-t) (1,0,f)×(0,t,1)=(tf,1,t),那么该直线到原点的距离就是:
d ( x , l ( t ) ) 2 = t 2 1 + ( t f ) 2 d(x,l(t))^2 = \frac{t^2}{1+(tf)^2} d(x,l(t))2=1+(tf)2t2

紧接着我们找下一个极线:
l ′ ( t ) = F ( 0 , t , 1 ) T = ( − f ′ ( c t + d ) , a t + b , c t + d ) T l'(t) = F(0,t,1)T=(-f'(ct+d),at+b,ct+d)^T l(t)=F(0,t,1)T=(f(ct+d),at+b,ct+d)T

该极线到原点的距离:
d ( x ′ , l ′ ( t ) ) 2 = ( c t + d ) 2 ( a t + v ) 2 + f ′ 2 ( c t + d ) 2 d(x',l'(t))^2 = \frac{(ct+d)^2}{(at+v)^2 +f'^2(ct+d)^2} d(x,l(t))2=(at+v)2+f′2(ct+d)2(ct+d)2

于是我们把 d ( x ′ , l ′ ( t ) ) 2 , d ( x , l ( t ) ) 2 d(x',l'(t))^2, d(x,l(t))^2 d(x,l(t))2,d(x,l(t))2 加在一起,记为 s ( t ) s(t) s(t)求导数,令导数等于0,就可以了。

一些讨论 s ( t ) s(t) s(t)是6次多项式,那么它就有6个实根,对应于3个最小值和3个最大值。顺便别忘了检查 x → ∞ x \rightarrow \infty x的情况。

下面我们把整个算法流程重复一遍,对应于P318算法12.1。

算法输入:观测到的对应点 x ↔ x ′ x \leftrightarrow x' xx,基本矩阵 F F F

算法输出:寻找一对 x ^ ↔ x ^ ′ \hat{x} \leftrightarrow \hat{x}' x^x^可以使几何损失函数最小,同时这一对点满足 x ^ ′ T F x ^ = 0 \hat{x}'^{T}F\hat{x} = 0 x^TFx^=0

算法步骤:

  1. 定义一对转换矩阵,可以把 x = ( x , y , 1 ) T , x ′ = ( x ′ , y ′ , t ) T x=(x,y,1)^{T},x'=(x',y',t)^{T} x=(x,y,1)T,x=(x,y,t)T转换到原点
    T = [ 1 − x 1 − y 1 ] T=\left[ \begin{matrix} 1 & & -x \\ &1 & -y \\ & & 1\\ \end{matrix} \right] T= 11xy1

    T ′ T' T的形式与 T T T是类似的

  2. 将基本矩阵 F F F变成 T ′ − T F T − 1 T'^{-T}FT^{-1} TTFT1

  3. 计算左极点 e = ( e 1 , e 2 , e 3 ) e=(e_1,e_2,e_3) e=(e1,e2,e3)和右极点 e ′ = ( e 1 ′ , e 2 ′ , e 3 ′ ) e'=(e'_1,e'_2,e'_3) e=(e1,e2,e3),并且归一化,使得 e 1 + e 2 = 1 e_1+e_2=1 e1+e2=1

  4. 构造两个旋转矩阵,这两个矩阵可以把 e e e旋转到 ( 1 , 0 , e 3 ) (1,0,e_3) (1,0,e3) ( 1 , 0 , e 3 ′ ) (1,0,e'_3) (1,0,e3).
    R = [ e 1 e 2 − e 2 e 1 1 ] R=\left[ \begin{matrix} e_1 &e_2 & \\ -e_2 &e_1 & \\ & & 1\\ \end{matrix} \right] R= e1e2e2e11
    R ′ R' R R R R类似

  5. F F F改成 R ′ F R T R'FR^{T} RFRT

  6. 设置以下等式 f = e 3 , f ′ = e 3 , a = F 22 , b = F 23 , c = F 32 , d = F 33 f=e_3,f'=e_3,a=F_{22},b=F_{23},c=F_{32},d=F_{33} f=e3,f=e3,a=F22,b=F23,c=F32,d=F33

  7. 将第6步中的等式带入 s ( t ) s(t) s(t)中,求解t

  8. 对求得的解进行验证,同时检查 t → ∞ t \rightarrow \infty t 的情况

  9. t t t带入极线方程,找到 x ^ , x ^ ′ \hat{x},\hat{x}' x^x^,极线知道了,观测点 x , x ′ x,x' x,x也知道,求直线上某个点,它要满足到已知点距离最近,由于我们把 x , x ′ x,x' x,x转到了原点,那么问题就转变成了直线上求某一点,它到原点距离最近。书中给出了一个公式,对于一个一般的直线 ( λ , μ , ν ) (\lambda, \mu, \nu) (λ,μ,ν),直线上到原点最近的点是 ( − λ ν , − μ ν , λ 2 + μ 2 ) (-\lambda \nu, -\mu \nu, \lambda^2+\mu^2) (λν,μν,λ2+μ2)

  10. 知道 x ^ , x ^ ′ \hat{x},\hat{x}' x^,x^后,再把他们旋转到原坐标, x ^ = T − 1 R T x ^ \hat{x} = T^{-1} R^{T} \hat{x} x^=T1RTx^ x ^ ′ = T − 1 R T x ^ ′ \hat{x}' = T^{-1} R^{T} \hat{x}' x^=T1RTx^

  11. 可以顺便利用 x ^ , x ^ ′ \hat{x},\hat{x}' x^,x^计算出三维空间点 X ^ \hat{X} X^(三角化,12.2)

12.5.3 Local minima

g ( t ) g(t) g(t)有6个自由度,所以它最多有三个最小值。那么如果用迭代的方法去寻找最小值,可能陷在局部最小值里出不来。

12.5.4 Evaluation on real images

本节大概展示了一些实验结果,在P320

12.6 Probability distribution of the estimated 3D point

估计三维点的概率分布。

通过两幅图像估计出来的三维空间点应该是满足一定概率分布的。其准确与否主要取决于从摄像机出发的,两条射线之间的角度。本节就对这个问题进行建模。书中为了简化这个问题,只考虑空间某平面上的点 X = ( x , y ) T X=(x,y)^T X=(x,y)T,其图像上的点分别表示为 x = f ( X ) , x ′ = f ′ ( X ) x=f(X), x'=f'(X) x=f(X),x=f(X), f , f ′ f,f' f,f 2 × 3 2 \times 3 2×3的矩阵,而不是 3 × 4 3 \times 4 3×4 如果忘了可以复习一下p175 6.4.2节

我们线考虑第一幅图像上的点 x x x,并且我们假设噪声服从均值为0,方差为 σ 2 \sigma^2 σ2的高斯分布,那么在已知 X X X的条件下 x x x的概率分布可以表示为 p ( x ∣ X ) p(x|X) p(xX),对第二幅图上的点 x ′ x' x有相同的结论 p ( x ′ ∣ X ) p(x'|X) p(xX)。那么当 x , x ′ x,x' x,x已知的时候,我们可以用贝叶斯公式反推 X X X的概率分布

p ( X ∣ x , x ′ ) = p ( x , x ′ ∣ X ) p ( X ) / p ( x , x ′ ) p(X|x,x') = p(x,x'|X)p(X) / p(x,x') p(Xx,x)=p(x,xX)p(X)/p(x,x)

再加上 x , x ′ x,x' x,x独立的假设,上式就可以化成

p ( X ∣ x , x ′ ) ∼ p ( x ∣ X ) p ( x ′ ∣ X ) p(X|x,x') \sim p(x|X)p(x'|X) p(Xx,x)p(xX)p(xX)

12.6 线段重建

我们现在要重建空间中的一个线段。它在两幅图像上分别表示为 l , l ′ l, l' l,l。我们可以把 l , l ′ l,l' l,l反投影回去,那么他们在空间中就是两个平面 π , π ′ \pi, \pi' π,π, 这两个平面的交点就是所求直线。我们可以形式化的表示为 π = P T l , π ′ = P ′ T l ′ \pi = P^Tl, \pi' = P'^T l' π=PTl,π=PTl,那么三维空间中的线就可以用这两个平面来表示 ( L L L是一个 2 × 4 2 \times 4 2×4的矩阵)
L = [ l T P l ′ T P ′ ] L = \left[ \begin{matrix} l^T P \\ l'^T P' \end{matrix} \right] L=[lTPlTP]

空间中的点 X X X L L L上,所以 L X = 0 LX=0 LX=0

在这里插入图片描述
在这里插入图片描述

退化的情况

如果这个直线在极平面上,那么上一节的方法就失效了,而且这样直线会和基线相交。在实际情况下,几乎要和基线相交的线也不能用以上方法来重建.

多平面相交的重建

假设有 n n n个平面,那么我们就他们像前文 L L L一样放在一起,形成一个 n × 4 n \times 4 n×4的矩阵 A A A。对 A A A做SDV分解 A = U D V T A=UDV^T A=UDVT,从 D D D中找出两个最大的特征值对应的特征向量,用他们来表示平面,也可以假设空间中直线 L L L投影到各个平面,然后计算投影直线和观测直线之间的几何损失函数,用极大似然估计求解。

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

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

相关文章

NLP的不同研究领域和最新发展的概述

一、介绍 作为理解、生成和处理自然语言文本的有效方法,自然语言处理 (NLP) 的研究近年来迅速普及并被广泛采用。鉴于NLP的快速发展,获得该领域的概述和维护它是困难的。这篇博文旨在提供NLP不同研究领域的结构化概述,…

淘宝商品详情接口数据采集用于上货,无货源选品上货,采集淘宝天猫商品详情数据

淘宝商品详情接口数据采集可用于上货。先通过关键字搜索接口,抓取到批量的商品ID,再将商品ID传入商品详情数据采集接口的请求参数中,从而达到批量抓取商品详情数据的功能。 接口名称:item_get,获取商品详情数据&#…

读高性能MySQL(第4版)笔记17_复制(下)

1. 复制切换 1.1. 复制是高可用性的基础 1.1.1. 总是保留一份持续更新的副本数据,会让灾难恢复更简单 1.2. “切换副本”(promoting a replica)和“故障切换”(failing over)是同义词 1.2.1. 意味着源服务器不再接…

JDBC【DBUtils】

一、 DBUtils工具类🍓 (一)、DBUtils简介🥝 使用JDBC我们发现冗余的代码太多了,为了简化开发 我们选择使用 DbUtils Commons DbUtils是Apache组织提供的一个对JDBC进行简单封装的开源工具类库,使用它能够简化JDBC应用程序的开发&#xff0c…

Ubuntu 20.04二进制部署Nightingale v6.1.0和Prometheus

sudo lsb_release -r可以看到操作系统版本是20.04,sudo uname -r可以看到内核版本是5.5.19。 sudo apt-get update进行更新镜像源。 完成之后,如下图: sudo apt-get upgrade -y更新软件。 选择NO,按下Enter。 完成如下&…

C# Onnx Yolov8 Detect 手势识别

效果 Lable five four one three two 项目 代码 using Microsoft.ML.OnnxRuntime; using Microsoft.ML.OnnxRuntime.Tensors; using OpenCvSharp; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing;…

软件设计师考试

知识点速记 数据库 三范式和BC范式之间的关系 并发操作带来的问题是数据的不一致性,主要有三类: 丢失更新:两个事务T1和T2读入同一数据并修改,T2提交的结果破坏了T1提交的结果,导致T1的修改被丢失 不可重复读,不可重…

【小笔记】fasttext文本分类问题分析

【学而不思则罔,思维不学则怠】 2023.9.28 关于fasttext的原理及实战文章很多,我也尝试在自己的任务中进行使用,是一个典型的短文本分类任务,对知识图谱抽取的实体进行校验,判断实体类别是否正确,我构建了…

windows 下 vs code 格式化代码(clang-format)

vscode 的格式化代码能力来源于插件(有不止一种插件提供格式化功能),而非 vscode 本身 1、安装插件 2、windows 下载 LLVM-17.0.1-win64.exe (exe 结尾的安装包) Releases llvm/llvm-project GitHub 可以直接把这…

python - random模块随机数常用方法

文章目录 前言python - random模块随机数常用方法1. 返回1-10之间的随机数,不包括102. 返回1-10的随机数,包括103. 随机选取0到100之间的偶数4. 返回一个随机浮点数5. 返回一个给定数据集合中的随机字符6. 从多个字符中选取特定数量的字符7. 生成随机字符…

巧用@Conditional注解根据配置文件注入不同的bean对象

项目中使用了mq,kafka两种消息队列进行发送数据,为了避免硬编码,在项目中通过不同的配置文件自动识别具体消息队列策略。这里整理两种实施方案,仅供参考! 方案一:创建一个工具类,然后根据配置文…

23.09.26用户切库流程记录

23.09.26用户切库流程记录 hello,我是阿昌,今天记录一下最近切库的流程,内容如下: 一、切库的原因 因为db_A用户数据量超过预期,磁盘空间逐渐不足,需要换成db_A库的压力,所以将部分db_A用户切…

外卖侠CPS小程序_带有分销功能的完整全套源码【前后端】

外卖侠CPS全套源码是一款为外卖平台提供分销功能的微信小程序。用户可以通过你的链接去领取外卖红包,然后去下单点外卖,既能省钱,又能获得佣金。该小程序带有商城、影票、吃喝玩乐等多个模块,适合不同用户的需求。 外卖CPS的势头…

第一届龙信杯取证比赛部分题目复现

感谢大佬是toto的wp 第一届“龙信杯”电子数据取证竞赛Writeup-CSDN博客 手机取证 1.请分析涉案手机的设备标识是_______。(标准格式:12345678) 打开龙信取证软件分析镜像即可得到结果 2.请确认嫌疑人首次安装目标APP的安装时间是______。…

FreeRTOS入门教程(任务优先级,Tick)

文章目录 前言一、什么是任务优先级二、FreeRTOS如何分辨出优先级最高可运行的任务三、FreeRTOS中的时钟节拍Tick四、什么是时间片五、相同优先级任务怎么进行切换六、任务优先级实验七、修改任务优先级总结 前言 本篇文章将带大家学习FreeRTOS中的任务优先级,并且…

FreeRTOS入门教程(任务状态)

文章目录 前言一、简单实验二、任务状态概念讲解三、vTaskDelay和vTaskDelayUntil1.vTaskDelay2.vTaskDelayUntil3.vTaskDelay和vTaskDelayUntil的区别 总结 前言 本篇文章将为大家讲解FreeRTOS中的任务状态,在FreeRTOS任务是有非常多种状态的,了解了任…

YOLOv7改进:GAMAttention注意力机制

1.背景介绍 为了提高各种计算机视觉任务的性能,人们研究了各种注意机制。然而,以往的方法忽略了保留通道和空间方面的信息以增强跨维度交互的重要性。因此,我们提出了一种全局调度机制,通过减少信息缩减和放大全局交互表示来提高深…

风光储一体化能源中心 | 数字孪生智慧能源

自“双碳”目标提出以来,我国能源产业不断朝着清洁低碳化、绿色化的方向发展。其中,风能、太阳能等可再生能源在促进全球能源可持续发展、共建清洁美丽世界中被寄予厚望。风能、太阳能具有波动性、间歇性、随机性等特点,主要通过转化为电能再…

This dependency was not found: vxe-table/lib/vxe-table in ./src/main.js

描述 使用时 安装 npm install xe-utils vxe-table 引入 import Vue from vue import xe-utils import VXETable from vxe-table import vxe-table/lib/style.css vxe-table是一个基于 vue 的 PC 端表格组件, 支持增删改查、虚拟滚动、懒加载、快捷菜单、数据校验…

微信公众平台怎么添加秒杀活动

微信公众平台是一个非常有用的工具,它可以帮助企业或个人建立自己的品牌形象,增加用户粘性,提高销售业绩等等。在微信公众平台上添加秒杀活动为主题可以吸引更多的用户关注,促进销售,提高品牌知名度等。下面我们将介绍…