计算机视觉之三维重建(3)---单视几何

文章目录

  • 一、问题提出
  • 二、无穷远点、无穷远线、无穷远平面
    • 2.1 2D空间
    • 2.2 3D空间
  • 三、影消点和影消线
    • 3.1 2D平面上的无穷远点,无穷远线变换
    • 3.2 影消点
    • 3.3 影消线
  • 四、单视重构


一、问题提出

 1. 当摄像机标定后,内部参数 K K K 已知,外部参数 [ R , T ] [R,T] [R,T] 已知,是否可以根据单个图像的测量值 p p p 去估算 P P P:一般情况下不能,因为 P P P 可以位于 C C C p p p 定义的直线上的任意位置。
在这里插入图片描述

 2. 一般情况下不能,但是总有一些场合可以从二维图像转换到三维场景结构。那接下就要研究比如如何将下面这幅图从二维图像转换成三维场景。

在这里插入图片描述

二、无穷远点、无穷远线、无穷远平面

:对于下面所有的坐标均用齐次坐标表述,而不是欧式坐标。

2.1 2D空间

 1. 对于一条2D平面上的直线,我们可以用 a x 1 + b x 2 + c = 0 ax_1+bx_2+c=0 ax1+bx2+c=0 来表示。把其中的参数拿出来构成向量并定义为 l l l(一般说到参数向量 l l l 就表示直线)。 x x x 作为直线上的一个点,齐次坐标表示为 x = [ x 1 , x 2 , 1 ] T x=[x1,x2,1]^T x=[x1,x2,1]T x x x l l l 满足 x T l = 0 x^Tl=0 xTl=0 或者 l T x = 0 l^Tx=0 lTx=0

在这里插入图片描述

 2. 定义两条直线叉乘得到的积,表示交点的坐标。(这里由叉乘的定义可以理解)

在这里插入图片描述

 3. (1) 下图右上角的齐次坐标 x ∞ x_∞ x 在欧式坐标下表示无穷远点。 (2) 任意选取两条直线 l l l l ′ l' l,使得 − a / b = − a ′ / b ′ -a/b=-a'/b' a/b=a/b,即斜率相同的两条线平行。 (3) 直线 l l l l ′ l' l 叉乘得到 x ∞ x_∞ x

在这里插入图片描述

 4. 同一平面直线(在2D平面上均为同一平面)的无穷远点均位于同一无穷远线上,我们定义无穷远线为 l ∞ = [ 0 , 0 , 1 ] T l_∞=[0,0,1]^T l=[0,0,1]T

在这里插入图片描述

2.2 3D空间

 1. 对于一个3D空间中的面可以定义为 a x 1 + b x 2 + c x 3 + d = 0 ax_1+bx_2+cx_3+d=0 ax1+bx2+cx3+d=0。同理可以将参数拿出来构成参数向量形式,定义参数表示的面 Π = [ a , b , c , d ] T Π=[a,b,c,d]^T Π=[a,b,c,d]T。对于一个面上的点 x = [ x 1 , x 2 , x 3 , 1 ] T x=[x1,x2,x3,1]^T x=[x1,x2,x3,1]T,仍然有 x T Π = 0 x^TΠ=0 xTΠ=0 或者 Π T x = 0 Π^Tx=0 ΠTx=0 成立。

在这里插入图片描述

 2. 3D空间中的直线,一般很难去表示,可以用直线方向来粗略表示。

在这里插入图片描述

 3. 3D空间中的无穷远点,定义齐次坐标中的 x 4 x_4 x4 为0,其他三个坐标为直线的方向。此时必须保证同一平面上的平行线相交于同一无穷远点。

在这里插入图片描述

 4. 平行平面上的任意一对平行线,在无穷远处都会相交于无穷远点。很多个无穷远点会构成无穷远线。所以:对于平行平面会在无穷远处相交于同一条公共线,即无穷远直线;而若干条无穷远直线形成无穷远平面。定义无穷远平面为 Π ∞ = [ 0 , 0 , 0 , 1 ] T Π_∞=[0,0,0,1]^T Π=[0,0,0,1]T

在这里插入图片描述

三、影消点和影消线

 影消点和影消线是无穷远点和无穷远线投影到像素平面的对应关系。

3.1 2D平面上的无穷远点,无穷远线变换

 1. 对于2D平面上点到点的变换就是乘以一个变换矩阵的映射关系,即 p ′ = H p p'=Hp p=Hp H H H 表示变换矩阵。对于透视和仿射变换而言,仿射变换后的无穷远点还是无穷远点,透视变换后的无穷远点不再是无穷远点。

在这里插入图片描述

 2. 线的变换等价于任意点 x x x 在线 l l l 上,该点 x x x 进行变换得到 x ′ x' x,变换后的点 x ′ x' x 又一定在变换后的线 l ′ l' l 上,所以通过式子的代换得到了线与线之间变换是乘以一个变换矩阵的转置的逆的映射关系,即 l ′ = H − T l l'=H^{-T}l l=HTl。推导过程如下所示:

在这里插入图片描述

 3. 根据线到线的变换关系,可以得到对于无穷远线经过仿射变换不变,透视变换会改变。

在这里插入图片描述

3.2 影消点

 1. 影消点:三维空间中的无穷远点经过摄像机在图像中的投影点。

在这里插入图片描述

 2. 一般我们定义三维空间的平行线方向为 d = [ a , b , c ] T d=[a,b,c]^T d=[a,b,c]T,而三维空间中的无穷远点为 x ∞ = [ a , b , c , 0 ] T x_∞=[a,b,c,0]^T x=[a,b,c,0]T。假设像平面的影消点为 v v v,那么一定有 v = K d v=Kd v=Kd 成立。结论:给一个影消点和摄像机的内外参数,我们就可以知道三维空间中一组平行线的方向。
.

在这里插入图片描述

3.3 影消线

 1. 影消点:三维空间中的无穷远线经过摄像机在图像中的投影线。影消线与无穷远线的关系为 l ′ = H − T l l'=H^{-T}l l=HTl

在这里插入图片描述

 2. 下图为三维空间下,同一平面的两条平行线在无穷远处相交,在像平面下形成的影消点。无数影消点形成影消线。

在这里插入图片描述

 3. 影消线与平面法向量的关系:我们可以知道多个平行平面会聚在无穷远处得到无穷远线,无穷远线经过投影变换到像平面得到影消线。假设一个点 P P P 位于生成无穷远线的平行平面中的任意一个 Π Π Π 上的一点,记平面法向量为 n n n,那么一定满足 n T P = 0 n^T P=0 nTP=0。另外该点经过投影变换一定在影消线上,满足 l h T ( K [ I 0 ] P ) = 0 l_h ^T(K[I \hspace{0.25cm} 0]P)=0 lhT(K[I0]P)=0 成立,所以一定有 n = K T l h n=K^Tl_h n=KTlh 成立 。

在这里插入图片描述

 4. 总结:

在这里插入图片描述

四、单视重构

 1. 注意是一共是四条线,两组平行线之间的夹角为 θ θ θ,根据余弦定理可以得到夹角与两组平行线直线方向的关系,如下图所示:

在这里插入图片描述

 2. 由于 K K K 5 5 5 个自由度,而一般我们只能找到三组互相垂直的平行线,如下图这种典型的三个平面互相垂直,在三个平面上选择三组平行线,那么最多只能得到三个方程,而三个方程不能精确的解出五个未知数,所以一般我们规定零倾斜,正方形像素,此时内参矩阵中的 θ = 90 ° θ=90° θ=90° α = β α=β α=β,此时只剩下三个未知数,理论上可以解出图像中的任意点,直线位置。

在这里插入图片描述

在这里插入图片描述

 3. 我们也可以根据平面法向量和影消线之间的关系重构出世界坐标下的任何一个平面。

在这里插入图片描述

 4. 弊端:我们无法还原出真实世界与重构场景之间的缩放比例大小,我们也不知道摄像机如何拍摄这张照片,场景的真实世界地理位置。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

最新上门预约服务派单小程序源码 仿东郊到家小程序源码 开源可二开 含完整搭建部署教程

上门预约服务派单小程序源码的在提供便捷的预约服务、实现有效的派单管理、优化服务流程、提升用户体验,并为业务发展和优化提供数据支持。分享一个最新上门预约服务派单小程序源码,仿东郊到家小程序源码,O2O平台系统,跟58到家模式…

简易电路设计,PW1605芯片实现24V/30V/48V限流过压保护功能

一般描述 PW1605 是一款电流限制开关,具有可编程输入过压保护和输出电压箝位功能。集成保护 N 沟道 FET 具有极低的 RDS(ON) 功能,PW1605有助于降低正常工作期间的功率损耗。可编程软启动时间控制启动期间输出电压的压摆率。独立的…

Docker学习笔记 - 基本概念

一. 什么是“容器”(container)和“镜像”(Image) 所谓“容器”可以理解为一个模拟操作系统的虚拟层,大部分是基于Linux的,应用程序及其配置信息,依赖库可以打包成一个Image独立运行在这个虚拟…

基于springboot+vue+Mysql的校园博客系统

开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:…

Android 系统应用 pk8签名文件转jks或keystore教程

一、介绍 签名文件对于我们在做应用开发中,经常遇到,且签名文件不仅仅是保护应用安全,还会涉及到应用与底层之间的数据共享和API文件等问题。 在Android中,签名文件同样也存在这个问题。但是android中又区分系统应用和普通应用。系…

Python数据结构实验 串和数组的实现

一、实验目的 1.熟悉串和数组类型的实现方法,了解简单文字处理的设计方法; 2.熟悉Python语言的字符和把字符串处理的原理和方法; 3.了解矩阵的存储结构,运用Python语言进行矩阵简单运算处理。…

UE像素流公网(Windows、Liunx)部署无需GPU服务器

前言 之前有个前端地图服务项目要改成UE来渲染3D,有需要在云服务器上多实例运行,所以就先研究了Windows版本的像素流云渲染,后来客户的云服务器是Linux版CectOS系统,加上又有了一些后端服务在上面运行了不能重装成Windows,所以就又着手去研究了Linux系统的云渲染。 推流…

【笔记】以论文发表形式通俗理解 TCP/IP模型

【笔记】以论文发表形式通俗理解 TCP/IP模型 前言TCP/IP模型理论通俗理解 前言 在网络基础学习过程中,以前只对TCP/IP理解个字面,网上查一下能知道个字面意思,但是连起来到底是什么意思,还是一知半解的,停留在表面&am…

数据结构基础(三)链表

链表(Linked List)是一种常见的线性数据结构,由一系列称为节点(Node)的元素组成,每个节点包含两部分:数据(Data)和指向下一个节点的引用(Pointer 或者 Link&a…

放弃 Rust 选择 Zig,Xata 团队推出 pgzx —— 计划使用 Zig 开发基于 PG 的分布式数据库

Summary Xata 公司在基于 PostgresSQL 开发自己的分布式数据库,出于 Zig 和 C 语言以及 PostgreSQL 的 API 有更好的互操作性的考虑,他们选择了 Zig 而非当红炸子鸡语言 Rust。他们的博客文章中对 pgzx 进行了介绍。让我们来看下他们对 Zig 和 Rust 语言…

【开发环境搭建篇】Git的安装和配置

作者介绍:本人笔名姑苏老陈,从事JAVA开发工作十多年了,带过大学刚毕业的实习生,也带过技术团队。最近有个朋友的表弟,马上要大学毕业了,想从事JAVA开发工作,但不知道从何处入手。于是&#xff0…

利用Python和IP技术实现智能旅游情报系统

文章目录 引言一、系统架构设计1. 数据采集模块2. 数据处理模块3. 用户界面模块 二、数据获取技术应用三、系统功能展示四、亮数据采集工具介绍五、总结六、号外 引言 随着旅游行业的不断发展,人们对旅游信息的需求也越来越大。为了帮助旅行者更好地规划行程&#…

基于javaweb(springboot+mybatis)宠物医院预约管理系统设计和实现以及论文报告

基于javaweb(springbootmybatis)宠物医院预约管理系统设计和实现以及论文报告 博主介绍:多年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎…

【超全详解一文搞懂】Scala基础

目录 Scala 01 —— Scala基础一、搭建Scala开发环境安装Scala编译器在IDEA中进行scala编码 二、Scala简介与概述Scala简介Scala概述Scala代码规范 三、理解Scala变量与数据类型Scala的变量与常量Scala和Java变量的区别 Scala的数据类型 四、Scala的程序逻辑1.表达式2.运算符3.…

紫鸾5.0:紫光云新一代敏捷应用开发平台全家桶

曾几何时,“瀑布式”占据了二十世纪软件开发的主流,开发时间往往以年计,一款软件应用动辄几年才能交付。而随着社会生产力的跃升,“瀑布式”已严重跟不上时代的节奏,2001年,“敏捷宣言”的发布,…

AtCoder Regular Contest 143 C - Piles of Pebbles 博弈 , 每个人要拿的是固定的!不够也算不能拿

C - Piles of Pebbles 题意: n堆鹅卵石,第一个人可以拿任意堆x个,第二个人可以拿任意堆y个,第一个人先拿,谁不能拿谁败。 思路: 这个题我一直没读清楚,如文章标题,拿的是固定数目…

MySQL查询约束

1 DML DML 数据操作语句 插入 insert 更新 update 删除 delete 1.1 更新 语法 update 表名 set 字段 值 [, 字段2 值2, ... ] [where 字段 值]; -- [, 字段2 值2, ... ] 是指,可选的,可以同时修改多个列的值 -- [where 字段 值] 是指,可选的,加上是指过滤,只更新符合条…

【C#】C#窗体应用修改窗体的标题和图标

修改窗体顶部的标题和图表,如果不修改则会使用默认的图标,标题默认为Form1,如第一张图,这时候如果想换成和系统有关的内容,如第二张图,可以使用下面的方法进行修改,修改后打开该软件任务栏显示的…

前台处理:CO主数据之成本中心标准层次更改-<OKEON>

一、背景: 前面讲解了成本要素和成本要素组,我们继续介绍成本控制与核算的主数据之成本中心,成本控制分主数据篇和业务篇: 主数据篇主要内容:成本要素、成本中心、订单、作业类型、工作中心; 业务篇主要…

ServletConfig和ServletContext

ServletConfig接口 在Servlet运行期间,需要一些配置信息,这些信息都可以在WebServlet注解的属性中配置。当Tomcat初始化一个Servlet时,会将该Servlet的配置信息封装到一个ServletConfig对象中,通过调用init(ServletConfig config…