计算机视觉之三维重建(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. 弊端:我们无法还原出真实世界与重构场景之间的缩放比例大小,我们也不知道摄像机如何拍摄这张照片,场景的真实世界地理位置。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

R语言逻辑回归与lasso模型

一、数据描述 数据集heart_learning.csv与heart_test.csv是关于心脏病的数据集,heart_learning.csv是训练数据集,heart_test.csv是测试数据集。 变量名称变量说明age年龄sex性别,取值1代表男性,0代表女性pain 胸痛的类型&#x…

去中心化的 AI 数据供应:认识Grass,参与Grass

去中心化的 AI 数据供应:认识Grass,参与Grass 👋:邀请链接☘️:Intro❓:看好Grass和即将推出的L2的原因有哪些?💡:展望🔍:总结 👋&…

Ubuntu 安装GPU驱动

https://www.nvidia.cn/Download/index.aspx 驱动我前面安装好啦,不做了,不过可以去看看 CUDA Toolkit 12.4 Downloads | NVIDIA Developer wget https://developer.download.nvidia.com/compute/cuda/12.4.0/local_installers/cuda_12.4.0_550.54.14_l…

【CXL协议-事务层之CXL.io(3)】

3.1 CXL.io CXL.io 为 I/O 设备提供非一致的加载/存储接口。 图 14 显示了 CXL.io 事务层在 Flex Bus 分层结构中的位置。 交易类型、交易数据包格式、基于信用的流量控制、虚拟通道管理和交易排序规则遵循PCIe定义; 请参阅 有关详细信息,请参阅 PCI Ex…

一文读懂多模态大模型:原理、应用与挑战全解析

在这个信息交织、五彩斑斓的时代,文字、图像、视频和音频如同四条蜿蜒曲折的河流,各自流淌,却又相互交织。它们构成了我们数字生活的核心元素,每一天,我们都在与之亲密接触。然而,面对这些形态各异的信息流…

(附源码)基于Spring Boot + Vue 在线网课学习系统的设计与实现

前言 💗博主介绍:✌专注于Java、小程序技术领域和毕业项目实战✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 2024年Java精品实战案例《100套》 🍅文末获取源码联系🍅 &#x1f31…

政安晨:【深度学习实践】【使用 TensorFlow 和 Keras 为结构化数据构建和训练神经网络】(六)—— 二元分类

政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 收录专栏: 政安晨的机器学习笔记 希望政安晨的博客能够对您有所裨益,如有不足之处,欢迎在评论区提出指正! 这篇文章咱们将深度学习应用到另一个常见任务中。 前言 在…

说说webpack的构建流程?

文章目录 一、运行流程初始化流程编译构建流程compile 编译make 编译模块build module 完成模块编译 输出流程seal 输出资源emit 输出完成 二、小结参考文献 一、运行流程 webpack 的运行流程是一个串行的过程,它的工作流程就是将各个插件串联起来 在运行过程中会…

selenium自动化登录模块HTMLTestRunner测试报告

1.下载HTMLTestRunner.py放到python的Lib目录下,python3之后的,文件要修改以下内容: 第94行,将import StringIO修改成import io 第539行,将self.outputBuffer StringIO.StringIO()修改成self.outputBuffer io.Strin…

eth 交易案例分析9

交易hash: 先用0.26eth买入了多个GPT,然后用这多个GPT 在uniswap3 兑换了1.69 个eth, 疑问点:买入的 DLP 什么意思?

C++一维数组练习oj

思路分析:这题它说n是小于等于1000的,那么我们现在就需要找出1--1000的幸运数 4,7,44,47,74,77,444,447,474,477,774,747&…

OCR研究背景及相关论文分享

光学字符识别(Optical Character Recognition,OCR)是指使用光学方法将图像中的文字转换为机器可编辑的文本的技术。OCR技术的研究和应用已有数十年的历史,其背景和发展受到多方面因素的影响。 技术需求背景 1.自动化文档处理&am…

从原理到实践:深入探索Linux安全机制(一)

前言 本文将从用户和权限管理、文件系统权限、SELinux、防火墙、加密和安全传输、漏洞管理和更新等几个Linux安全机制中的重要方面,深入探索其工作原理和使用方法。在当今数字化时代,网络安全问题备受关注,Linux作为广泛应用的操作系统之一&…

Github 2024-03-23 Rust开源项目日报 Top10

根据Github Trendings的统计,今日(2024-03-23统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目10Dart项目1RustDesk: 用Rust编写的开源远程桌面软件 创建周期:1218 天开发语言:Rust, Dart协议类型:GNU Affero General Public Li…

Mora: Enabling Generalist Video Generation via A Multi-Agent Framework

Mora: Enabling Generalist Video Generation via A Multi-Agent Framework PDF: https://arxiv.org/html/2403.13248v1 1 概述 为弥补Sora不开源的缺陷,本文提出多代理框架Mora,整合先进视觉AI代理,复制Sora的全能视频生成能力。Mora能利用…

Springboot+vue的作业管理系统+数据库+报告+免费远程调试

项目介绍: Springbootvue的作业管理系统,Javaee项目,springboot vue前后端分离项目 本文设计了一个基于Springbootvue的前后端分离的作业管理系统,采用M(model)V(view)C(controller&…

docker将本地镜像推送到阿里云服务器上

目录 一、制作一个简单的Ubuntu中安装vim的镜像 二、在阿里云上面创建镜像仓库 三、从阿里云仓库中上传和拉取镜像 一、制作一个简单的Ubuntu中安装vim的镜像 docker pull ubuntu docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu …

spring boot商城、商城源码 欢迎交流

一个基于spring boot、spring oauth2.0、mybatis、redis的轻量级、前后端分离、防范xss攻击、拥有分布式锁,为生产环境多实例完全准备,数据库为b2b2c设计,拥有完整sku和下单流程的商城 联系: V-Tavendor

C语言——利用冒泡排序模拟实现qsort函数

一.冒泡排序 冒泡排序是C语言中众多排序中的一种。它的排序逻辑为(升序):从第一个元素开始和相邻的比较,如果第一个元素大于第二个元素,则交换,反之不交换;第二个再与第三个元素比较&#xff0…

SAP BAS中Fiori开发的高阶功能(storyboard, navigation, guided development, variant)

1. 前言 在之前的几篇文章中,我介绍了SAP BAS的一些基本功能,包括账户申请,创建工作区,git的使用以及如何step-by-step去创建出你的第一个Fiori项目等等。在本篇中,我将进一步介绍一些在开发Fiori应用程序时会用到的高…