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

news2025/1/11 5:13:38

8 More Single View Geometry

本章主要讲述除了点以外的几何体,在投影变换下的性质。这些几何体包括:平面,线,圆锥曲线,二次曲线。

讲到这里就明白了,为什么投影几何这么重要,因为摄像机就是一个投影几何模型。为什么无穷远平面 π ∞ \pi_{\infty} π重要?因为它在投影变换下保持不变,它只和摄像机内参有关系。

同时, π ∞ \pi_{\infty} π上的点、线、面也很重要。 π ∞ \pi_{\infty} π上的点就是消失点, π ∞ \pi_{\infty} π上的线就是消失线。点和线的图像与摄像机内参和旋转有关,所以可以从他们来估计相机的旋转。 π ∞ \pi_{\infty} π上的圆锥曲线只和相机内参有关。

文章目录

  • 8 More Single View Geometry
    • 8.1 Action of a projective camera on planes, lines, and conics
      • 8.1.1 On planes
      • 8.1.2 On lines
      • 8.1.3 On conics
    • 8.2 Images of smooth surfaces
    • 8.3 Action of a projective camera on quadrics
    • 8.4 The importance of the camera centre
    • 8.5 Camera calibration and the image of the absolute conic
    • 8.6 Vanishing points and vanishing lines
      • 8.6.1 Vanishing points
      • 8.6.2 Vanishing lines
      • 8.6.3 Orthogonality relationships amongst vanishing points and lines
    • 8.7 Affine 3D measurements and reconstruction
    • 8.8 Determining camera calibration K K K from a single view
    • 8.9 Single view reconstruction
    • 8.10 The calibrating conic

8.1 Action of a projective camera on planes, lines, and conics

8.1.1 On planes

对于空间中的平面 x π x_{\pi} xπ,我们可以先考虑一个特殊的,也就是 x y xy xy平面,没有 z z z坐标。所以, x π = ( X , Y , 1 ) T x_{\pi}=(X,Y,1)^{T} xπ=(X,Y,1)T,那么P就变成了 3 × 3 3 \times 3 3×3,rank为3的单应性矩阵 H H H
在这里插入图片描述

8.1.2 On lines

空间中的线和摄像机中心定义了一个平面,该平面和成像平面交于一点。所以说,如果3D空间里有两个点 A A A B B B,它们在图像上的坐标是 a a a b b b,那么由 A A A B B B构成的直线 X ( μ ) = A + μ B X(\mu)=A+\mu B X(μ)=A+μB就被转换到 x ( μ ) = P ( A + μ B ) = P A + μ P B = a + μ b x(\mu)=P(A+\mu B)=PA+\mu PB=a+\mu b x(μ)=P(A+μB)=PA+μPB=a+μb

如果我们反过来,图像上一个线 l l l,反投影回去,就会形成一个平面,可以表示为 P T l P^T l PTl。也就是说,映射到图像中的一条线的空间点集是由相机中心和图像线定义的空间平面。
在这里插入图片描述

8.1.3 On conics

首先我们明确为什么不是圆锥曲线的投影,而是反投影? 因为圆锥曲线投影到图像上是不变的。

其次我们说,一个圆锥曲线 C C C反投影到空间中,就成了圆锥 Q Q Q

Q C O = P T C P Q_{CO}=P^TCP QCO=PTCP

8.2 Images of smooth surfaces

光滑曲面上的点投影到图像上,其轨迹是一条射线,该射线与光滑曲面相切。如果一个线和该点在图像上相切,反投影回去也会和曲面相切。
在这里插入图片描述

8.3 Action of a projective camera on quadrics

二次曲线 Q Q Q P P P的作用下就会变成圆锥曲线:
C ∗ = P Q ∗ P T C^* = P Q^* P^T C=PQPT
在这里插入图片描述

8.4 The importance of the camera centre

3D空间中的物体和相机中心定义了一组光线,并且通过将这些光线与平面相交来获得图像。通常这组光线被称为光线锥体。 假设光线锥体被两个平面相交,如图 8.5 所示,则两个图像 I I I I ′ I′ I通过透视图(perspective map)清晰地相关。 这意味着使用相同相机中心获得的图像可以通过平面投影变换相互映射,换句话说,它们是投影等效的,因此具有相同的投影属性。 因此,相机可以被认为是投影成像设备——测量以相机中心为顶点的光线锥体的投影特性。

简而言之,相机中心为什么重要?因为通过同一个相机中心获取的多个图像之间存在平面变换关系。

比如说我们做一个纯旋转,没有平移,那么同一个点在两个不同图像之间的关系可以表达为以下:
x ′ = H x w h e r e   H = K R K − 1 x'=Hx \\ where \ H =KRK^{-1} x=Hxwhere H=KRK1
在这里插入图片描述
如果我们做个纯缩放,对物体缩放一个 k k k,那么就相当于给内参矩阵 K K K乘以一个对角矩阵右乘一个 d i a g ( k , k , 1 ) diag(k,k,1) diag(k,k,1)

8.5 Camera calibration and the image of the absolute conic

现在我们描述如果相机内部校准 K K K已知的话会得到什么。 我们可以测量欧几里得属性,例如两条射线之间的角度。

8.5.1 The image of the absolute conic

我们首先来讨论一个问题,如果已知内参 K K K,那么图像点 x x x反映射回去就是一个射线,该射线的方向就是 d = K − 1 x d=K^{-1} x d=K1x。那么我们如果考虑两条射线间的角度 cos ⁡ θ \cos \theta cosθ,它其实就可以用相机内参来表示。

接下来我们考虑绝对圆锥在图像上的投影。我们先看 π ∞ \pi_{\infty} π π ∞ \pi_{\infty} π上的点可以写成 ( d T , 0 ) T (d^T,0)^T (dT,0)T,那我们有以下式子成立:
x = P X ∞ = K R [ I ∣ − C ~ ] ( d T , 0 ) T = K R d x = PX_{\infty} \\ =KR[I|-\widetilde{C}] (d^T,0)^T \\ =KRd x=PX=KR[IC ](dT,0)T=KRd

所以说无穷远处平面投影到图像上的矩阵就是 H = K R H=KR H=KR,那么利用这结果,我们可以考虑 π ∞ \pi_{\infty} π上的圆锥 C C C。我们知道点 x x x H H H投影到可以表示为 x → H x x \rightarrow Hx xHx,那么 C C C就会变成 H − T C H − 1 H^{-T} C H^{-1} HTCH1,我们把 H H H替换成 K R KR KR,就会得到 C = ( K K T ) − 1 = K − T K − 1 C=(KK^T)^{-1}=K^{-T}K^{-1} C=(KKT)1=KTK1

由此我们可以看出绝对圆锥曲线只依赖于相机内参,所以知道了绝对圆锥曲线的表达式,就可以恢复出相机内参。

然后图像上两点形成的射线之间的角度也可以通过绝对圆锥计算出来。

那么问题来了,如果知道绝对圆锥曲线的表达式呢?我们可以找三个正方形,然后拍一个图像。每个正方形世界坐标的四个点可以认为是 ( 0 , 0 ) T , ( 1 , 0 ) T , ( 0 , 1 ) T , ( 1 , 1 ) T (0,0)^{T},(1,0)^{T},(0,1)^{T},(1,1)^{T} (0,0)T,(1,0)T,(0,1)T,(1,1)T,然后我们再找出正方形在图像坐标系下的四个点,计算一个 H H H

然后,绝对圆锥曲线上还有两个虚点,分别是 ( 1 , i , 0 ) , ( 1 , − i , 0 ) (1,i,0),(1,-i,0) (1,i,0),(1,i,0),我们也给它乘上 H H H,得到 H ( 1 , ± i , 0 ) H(1,\pm i,0) H(1,±i,0),这样一个 H H H提供2个虚点,三个H就是6个虚点,用这6个虚点去拟合一个方程。

8.5.2 Orthogonality and ω \omega ω

上文提到绝对圆锥曲线是可以用来计算线段之间角度的。那么我们有这样一个结论:一个点 x x x反投影成了一条射线,一个线 l l l反投影成了一个平面。射线如果与平面相切,那么有如下等式存在: l = ω x l=\omega x l=ωx

8.6 Vanishing points and vanishing lines

8.6.1 Vanishing points

消失点是怎么形成的?可以说消失点是两个平行线交点形成的。我们也可以说消失线是图像平面与一个和地平面平行的射线相交形成的。所以消失点的方向是重要的,位置不重要,因为它在无穷远处。

我们假设三维空间有一点 A A A,它的方向是 D = ( d T , 0 ) T D=(d^T,0)^T D=(dT,0)T,那么该点和方向形成的线就表示成 X ( λ ) = A + λ D X(\lambda)=A+\lambda D X(λ)=A+λD,如果我们再乘上 P P P,就有
x ( λ ) = P X ( λ ) = P A + λ P D = a + λ K d x(\lambda) = PX(\lambda)=PA+\lambda PD=a + \lambda Kd x(λ)=PX(λ)=PA+λPD=a+λKd

λ → ∞ \lambda \rightarrow \infty λ,上式的极限就是 K d Kd Kd,这个极限记为 v v v v v v就是无穷远点 X ∞ X_{\infty} X在图像上形成的点。反过来, v v v反投影回去就是一个射线。

那么具体给一个图像我们怎么找出 v v v?从图中找到若干条平行线,把它们延长,交点就是 v v v

8.6.2 Vanishing lines

平行的平面与 π ∞ \pi_{\infty} π 相交于一条直线,这就是消失线。消失线同样只取决平行平面的方向而不是位置。

消失线有一些性质:

  1. 一个通过相机中心的平面,其法向量是 n n n,那么消失线就是 l = K − T n l=K^{-T} n l=KTn
  2. 两个平面之间的夹角可以由他们对应的消失线来计算,见书中式8.14

具体一点,我们怎么找消失线? 找两个消失点,然后连起来就行了,因为消失点都落在消失线上。

8.6.3 Orthogonality relationships amongst vanishing points and lines

  1. 如果两个线垂直,那么他们的消失点满足 v 1 T ω v 2 = 0 v_1^T \omega v_2=0 v1Tωv2=0
  2. 如果一个线和平面垂直,那么他们对应的消失点和消失线满足 l = ω v l= \omega v l=ωv
  3. 两个垂直的平面,他们对应的消失线满足 l i T ω l 2 = 0 l_i^T \omega l_2=0 liTωl2=0

8.7 Affine 3D measurements and reconstruction

我们已知一个消失线 l l l,还有图像中的两个点,我们可以只用图像就测出来两点之间线段的长度,具体细节参见P222的算法。

8.8 Determining camera calibration K K K from a single view

前文我们说过求出绝对圆锥曲线 ω \omega ω,我们就知道了内参 K K K。除了前文所述的用点拟合,我们还可以用消失点和消失线来提供一些约束,在书中P224提供了6种约束,每一种约束都可以表达成一个方程,所以我们可以这样求解 ω \omega ω

我们先把 ω \omega ω写成一个向量 w = ( w i ) , i = 1 , 2 , 3 , 4 , 5 , 6 w=(w_i),i=1,2,3,4,5,6 w=(wi),i=1,2,3,4,5,6,然后224页的6种约束,每一个都可以写成 a T w = 0 a^T w = 0 aTw=0,这样就有6个方程组,6个未知数,用SVD分解就可以求出 ω \omega ω,知道了 ω \omega ω 再把它用cholesky分解就求出了内参。

8.9 Single view reconstruction

简要介绍了一下单视角重建。

8.10 The calibrating conic

绝对圆锥曲线(IAC)是一个想象出来的东西,所以我们看不见。但是非要把它画出来的话,应该怎么办呢?

我们找一个替代品,叫标定圆锥曲线,它的图像是一个与 x x x轴成45度的圆锥。它的方程是
C = K − T [ 1 1 − 1 ] K − 1 C= K^{-T} \left[ \begin{matrix} 1& & \\ & 1& \\ & &-1 \end{matrix} \right] K^{-1} C=KT 111 K1

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

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

相关文章

VLANIF配置

目录 实验原理: 案例: 设备配置 用ping验证不同vlan之间实现相互通信 实验原理: VLANIF接口是一种第三层的逻辑接口,用于在第三层实现不同VLAN 之间的通信。 每个VALN有一个VLANIF接口,并通过该接口在网络层转发…

【操作系统笔记】缓存一致性

CPU 核心之间数据如何传播 高速缓存中的值被修改了,那么怎么同步到内存中呢? ① 写直达(Write-Through)② 写回(Write-Back) 写直达(Write-Through) 简单,但是很慢&am…

《Kubernetes部署篇:Ubuntu20.04基于containerd二进制部署K8S 1.25.14集群(多主多从)》

一、架构图 如下图所示: 二、部署说明 2.1、部署流程 1、系统环境初始化,主要包括 主机名设置、主机hosts解析、关闭防火墙、关闭swap分区、修改系统参数、时间时区同步、修改内核参数、启用ipvs模式。 2、使用一键生成K8S集群证书工具创建证书文件。…

vue页面嵌入飞书网页组件,用于在类似ERP,OA等系统中展示在线文档

先展示最终效果(就是在vue页面中,内嵌了一块ifream页面): 1. 注册进入飞书开放平台,地址为: 飞书开放平台 2.进入开放平台后,选择--创建企业自建应用--创建网页应用,然后在主页面记住该应用的appId和appSecret参数,后面要用 3.然后注意一点的是,因为后面的授权等逻辑我们一般…

Android设计支持库

本文所有的代码均存于 https://github.com/MADMAX110/BitsandPizzas 设计支持库(Design Support Library)是 Google 在 2015 年的 I/O 大会上发布的全新 Material Design 支持库,在这个 support 库里面主要包含了 8 个新的 Material Design …

clickhouse简单安装部署

目录 前言(来源于官方文档): 一.下载并上传 1.下载地址:点我跳转下载 2.上传至Linux 二.解压和配置 1.解压顺序 注意:必须按照以下顺序解压,并且每解压一个都要执行该解压后文件的install/doinst.sh文件 解压步骤&#xff…

antd-design-vue Table组件全局配置(分页器...)

描述:该框架许多默认配置好像还不支持,一般都是挨个使用挨个配置。我的项目中也遇到了类似的情况,但是当需求发生变化时,代码所有的组件使用则都需要修改,这种方式真的很不礼貌。 《我为了一口醋包了顿饺子》 需求是将…

MQ - 19 安全_限流方案的设计

文章目录 导图Pre概述集群中的数据加密加密算法分类消息队列限流机制思考单机限流全局限流全局限流还是单机限流?对哪些资源和维度进行限流发生限流后怎么处理消息队列全局限流设计单机限流方案全局限流方案消息队列的服务降级配置 Broker 的 CPU 或内存的使用率额度配置磁盘保…

C语言每日一题(5):求两个数二进制中不同位的个数

文章主题:求两个数二进制中不同位的个数🔥所属专栏:C语言每日一题📗作者简介:每天不定时更新C语言的小白一枚,记录分享自己每天的所思所想😄🎶个人主页:[₽]的个人主页&a…

BOA服务器移植

BOA服务器移植 1、源码下载 http://www.boa.org/ News! (last updated 23 February 2005) Latest Released Version (0.94.13) here (signature here) --- 下载地址1.1 boa简介: 其可执行代码只有大约60KB左右,Boa是一个单任务的HTTP服务器&#xff…

MyBatisPlus(五)配置表名前缀:table-prefix

说明 数据库中的表名,和项目中的实体类名,并不符合默认对应规则。所有表都有同样的前缀,而实体类名是和表名去掉前缀后的部分对应的。 解决方案 配置全局表名前缀,使实体类名对应的表名,自动加上一段前缀。 限制 …

JSON 串和 Java 对象的相互转换

JSON 串和 Java 对象的相互转换 以 json 格式的数据进行前后端交互 前端发送请求时,如果是复杂的数据就会以 json 提交给后端; 而后端如果需要响应一些复杂的数据时,也需要以 json 格式将数据响应回给浏览器 为达到以上目的就需要重点学习…

基于微信小程序的美术馆预约平台设计与实现(源码+lw+部署文档+讲解等)

前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 👇🏻…

Linux_9_网络协议和管理

目录 1网络基础1.1 网络概念1.2常见的网络物理组件1.3网络应用程序1.3.1各种网络应用1.3.2应用程序对网络的要求 1.4网络的特征1.4.1速度(带宽)1.4.2网络拓扑 1.5网络1.5.1网络准和分层1.5.2开放系统互联OSI1.5.3网络的通信过程1.5.3.1数据封装和数据解封1.5.3.2协议数据单元PD…

基于SSM的四六级报名与成绩查询系统的设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

机器学习 day36(纯度)

熵 这些例子的纯度和熵如图所示,且左侧为熵函数图熵函数是判断某组数据是否纯度高的指标 熵函数公式如上图,底数为2仅为了使函数峰值为1,且设定0log(0)为0,但log(0)为无穷大

【Java 基础篇】Java实现文件搜索详解

文件搜索是计算机应用中的一个常见任务,它允许用户查找特定文件或目录,以便更轻松地管理文件系统中的内容。在Java中,您可以使用各种方法来实现文件搜索。本文将详细介绍如何使用Java编写文件搜索功能,以及一些相关的内容。 文件…

【数据结构】图的应用:最小生成树;最短路径;有向无环图描述表达式;拓扑排序;逆拓扑排序;关键路径

目录 1、最小生成树 1.1 概念 1.2 普利姆算法(Prim) 1.3 克鲁斯卡尔算法(Kruskal) 2、最短路径 2.1 迪杰斯特拉算法(Dijkstra) 2.2 弗洛伊德算法(Floyd) 2.3 BFS算法&…

windows主机和vmware ubuntu18.04虚拟机ping通

windows主机 网线连接电脑,读取当前windows的相关信息 powershell 更改IP地址指令 New-NetIPAddress -InterfaceIndex 23 -IPAddress 192.168.0.105 -PrefixLength 24 -DefaultGateway 192.168.0.1 虚拟机 虚拟机需要管理员权限打开 选择桥接方式 IPV4地址改成同…

求生之路2专用服务器搭建对抗模式,药抗模式,特殊模式Ubuntu系统另附上游戏代码以及控制台代码

求生之路2专用服务器搭建对抗模式,药抗模式,特殊模式Ubuntu系统另附上游戏代码以及控制台代码 大家好我是艾西,熟悉Left 4 Dead 2求生之路2这游戏的小伙伴都知道这个游戏分为以下几种模式: 对抗模式:在对抗模式下,玩家需要掌握一…