计算机视觉之三维重建(三)(单视图测量)

2D变换

等距变换

  • 旋转平移
  • 保留形状、面积
  • 通常描述刚性物体运动

相似变换

  • 在等距变换的基础增加缩放特点

射影变换

  • 共线性、四共线点的交比保持不变

仿射变换

  • 面积比值、平行关系等不变
  • 仿射变换是特殊的射影变换

影消点与影消线

2D无穷远点

  • 两直线的交点可由两直线的叉乘得到,表达为 ( x 1 , x 2 , z ) (x_1, x_2, z) (x1,x2,z)。若 z = 0 z=0 z=0,则该点为无穷远点(欧式坐标表示为 ( x 1 z , x 2 z ) (\frac{x_1}{z},\frac{x_2}{z}) (zx1,zx2))。
  • 无穷远点经过射影变换后为有限远点。
  • 无穷远点经过仿射变换后仍为无穷远点。

2D无穷远线

  • 无穷远点集位于一条线上,该线成为无穷远线(可表示为 l i n f = [ 0 0 1 ] l_{inf}=[0 \space 0 \space 1] linf=[0 0 1])。
  • 无穷远点经过射影变换后为有限远点。
  • 无穷远点经过仿射变换后仍为无穷远点。
线的变换

已知 l x = 0 lx=0 lx=0,求解 l ′ H x = 0 l'Hx=0 lHx=0.
推导过程为:
已知方程: l T x = 0 添加逆矩阵: l T H − 1 H x = 0 拆组: ( H − 1 l ) T ( H x ) = 0 可得: l ′ = H − T l = 0 \begin{equation} \begin{split} 已知方程:l^{T}x=0 \\ 添加逆矩阵:l^{T}H^{-1}Hx=0 \\ 拆组:({H^{-1}l})^T(Hx)=0 \\ 可得:l'=H^{-T}l=0 \\ \end{split} \end{equation} 已知方程:lTx=0添加逆矩阵:lTH1Hx=0拆组:(H1l)T(Hx)=0可得:l=HTl=0
无穷远线表示为 [ 0 0 1 ] \begin{bmatrix} 0\\ 0\\ 1 \end{bmatrix} 001

  • 无穷远线透视(射影)变换 H = [ A t v b ] H=\begin{bmatrix} A & t\\ v &b \end{bmatrix} H=[Avtb]后不再为无穷远线。
  • 无穷远线仿射变换 H = [ A t 0 b ] H=\begin{bmatrix} A & t\\ 0 &b \end{bmatrix} H=[A0tb]后为无穷远线。

空间中的点和面

  • 面: a x + b y + c z + d = 0 ax+by+cz+d=0 ax+by+cz+d=0
  • 点: x ∞ = [ a b c 0 ] x_{\infty}=\begin{bmatrix} a\\ b\\ c\\ 0 \end{bmatrix} x= abc0
影消点
  • 三维空间的无穷远点在二维像素平面的投影点 p ∞ = [ a b c ] p_{\infty}=\begin{bmatrix} a\\ b\\ c \end{bmatrix} p= abc
  • 影消点=摄像机内参数 * 直线方向。
影消线
  • 影消点的集合。
  • 识别影消线有助于重构三维场景。

与平面法向量的关系
平面法向量 = 摄像机内参数转置矩阵 * 影消线

无穷远平面

  • 平行平面在无穷远处相较于一条公共线——无穷远线。
  • 2条或多条无穷远直线的集合定义为无穷远平面。

单视图重构

步骤

  • 标定摄像机内参数
  • 恢复三维场景面的信息
  • 重构
    缺点:手动选择影消点与影消线;需要场景先验;场景的实际比例无法恢复。

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

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

相关文章

Java 注解计算12生肖,java Data中获取年,根据生日日期获取生肖注解,根据输入时间获取生肖,自定义注解的方式获取生肖 根据年份时间获取十二生肖

最近,开发中需要增加生肖,但是不想增加字段,于是通过注解的方式,实现生日与生肖的转换。 话不多说,直接上代码,如下: 实体类中的字段,添加自定义注解(ToChineseZodiacSe…

考研C语言进阶题库——更新51-60题

目录 51.银行系中有很多恒星,H 君晚上无聊,便爬上房顶数星星,H 君将整个银河系看做一个平面,左上角为原点(坐标为(1, 1))。现在有 n 颗星星,他给每颗星星都标上坐标&…

使用 OpenCV Python 实现自动图像注释工具的详细步骤--附完整源码

注释是深度学习项目中最关键的部分。它是模型学习效果的决定因素。然而,这是非常乏味且耗时的。一种解决方案是使用自动图像注释工具,这大大缩短了时间。 本文是pyOpenAnnotate系列的一部分,其中包括以下内容。 1、使用 OpenCV 进行图像注释的路线图。 2、pyOpenAnnotate工…

常见前端面试之VUE面试题汇总二

4. slot 是什么?有什么作用?原理是什么? slot 又名插槽,是 Vue 的内容分发机制,组件内部的模板引擎使用 slot 元素作为承载分发内容的出口。插槽 slot 是子组件的一个模板 标签元素,而这一个标签元素是否显…

Electron学习2 使用Electron-vue和Vuetify UI库

Electron学习2 使用Electron-vue和Vuetify UI库 一、Electron-vue简介二、安装yarn三、创建Electron-vue项目1. 关于 electron-builder2. 安装脚手架3. 运行4. 打包应用程序 四、background.js说明1. 引入模块和依赖:2. 注册协议:3. 创建窗口函数&#x…

Mysql group by使用示例

文章目录 1. groupby时不能查询*2. 查询出的列必须在group by的条件列中3. group by多个字段,这些字段都有索引也会索引失效,只有group by单个字段索引才能起作用4. having条件必须跟group by相关联5. 用group by做去重6. 使用聚合函数做数量统计7. havi…

thinkphp开发的在线学习培训考试模拟考试做题练习系统带商城功能证书管理课程系统

thinkphp开发的在线学习培训考试模拟考试做题练习系统带商城功能证书管理课程系统 1、做题界面 2、前端UI的展示 3、带商城购物功能

【Redis从头学-8】Redis中的ZSet数据类型实战场景之用户积分榜

🧑‍💻作者名称:DaenCode 🎤作者简介:啥技术都喜欢捣鼓捣鼓,喜欢分享技术、经验、生活。 😎人生感悟:尝尽人生百味,方知世间冷暖。 📖所属专栏:Re…

大数据 算法

什么是大数据 大数据是指数据量巨大、类型繁多、处理速度快的数据集合。这些数据集合通常包括结构化数据(如数据库中的表格数据)、半结构化数据(如XML文件)和非结构化数据(如文本、音频和视频文件)。大数据…

Hadoop小结(上)

最近在学大模型的分布式训练和存储,自己的分布式相关基础比较薄弱,基于深度学习的一切架构皆来源于传统,我总结了之前大数据的分布式解决方案即Hadoop: Why Hadoop Hadoop 的作用非常简单,就是在多计算机集群环境中营…

页面禁用鼠标右键,禁用F12打开开发者工具!!!

文章目录 问题分析方法一方法二方法二问题 今天在浏览博主文章时发现无法复制页面上的内容,也无法F12打开开发者工具,更用不了鼠标右键,于是上网找了原因并亲测可用 分析 方法一 将 <body> 改成 <body oncontextmenu=self.event.returnValue=false>方法二 …

【面试经典150题】移除元素·JavaScript版

题目来源 大致思路&#xff1a;遍历数组&#xff0c;如果遇到值为val的元素&#xff0c;使用数组最后一个元素替换它。详细过程&#xff1a; /*** param {number[]} nums* param {number} val* return {number}*/ var removeElement function(nums, val) {let i0,nnums.leng…

链表的顶级理解

目录 1.链表的概念及结构 2.链表的分类 单向或者双向 带头或者不带头 循环或者非循环 3.无头单向非循环链表的实现 3.1创建单链表 3.2遍历链表 3.3得到单链表的长度 3.4查找是否包含关键字 3.5头插法 3.6尾插法 3.7任意位置插入 3.8删除第一次出现关键字为key的节点 …

R包开发一:R与Git版本控制

目录 1.安装Git 2-配置Git&#xff08;只需配置一次&#xff09; 3-用SSH连接GitHub(只需配置一次) 4-创建Github远程仓库 5-克隆仓库到本地 目标&#xff1a;创建的R包&#xff0c;包含Git版本控制&#xff0c;并且能在远程Github仓库同步&#xff0c;相当于发布在Github。…

详解C#-static void Main(string[] args)

目录 简介: 举例: 输出结果:​ 总结&#xff1a; 简介: 在C#中static void Main(string[] args)这个句话有什么作用&#xff0c;分别代表什么意思&#xff01;&#xff01; 这句话是入口函数的声明&#xff0c;指定了C#程序的入口点&#xff0c;并定义了一个名为”Main”静…

存储系统性能优化中IOMMU的作用是什么?

一、IOMMU原理 IOMMU(Input/Output Memory Management Unit)是一种用于管理计算机内存的技术,它允许将物理内存映射到虚拟地址空间。IOMMU通过使用专用的硬件来管理和优化内存访问,从而提高系统性能和稳定性。本文将详细介绍IOMMU的原理,并介绍一些应用案例和典型的问题解…

-bash: java: command not found笔记

文章目录 场景解决方案找java的方法find命令进行查找根据java进程找寻具体位置 场景 linux系统执行java命令时报错&#xff1a; -bash: java: command not found。 解决方案 可能是没有安装java(这种情况比较少)或者安装了java但是没有设置环境变量(一般是这种情况)。 找ja…

Android 12对“返回”按钮的处理带来的问题

在Android 12之前&#xff0c;按下“返回”按钮&#xff0c;会执行当前Activity的finish()方法。如果是在启动器Activity中按下“返回”按钮&#xff0c;则是结束App的运行。 Android 12改变了这一行为&#xff0c;具体见https://developer.android.google.cn/about/versions/1…

Hook免杀实战: 去除杀软的三环钩子

Hook的概念 什么是Hook Hook&#xff08;也被称为“挂钩子”&#xff09;是一种程序设计模式&#xff0c;它提供了一种方式去截获&#xff08;或者“挂钩子”在&#xff09;系统级别或者应用级别的函数调用、消息、事件等。通过使用Hook&#xff0c;开发者可以在不修改源程序…

将SonarLint集成到Git

1、搭建SonarQube服务器 下载SonarQube安装包 访问SonarQube官网&#xff08;https://www.sonarqube.org/downloads/&#xff09;下载最新版本的SonarQube Community Edition。解压安装包 将下载的压缩包解压到一个目录&#xff0c;例如&#xff1a;D:\sonarqube-community-7.…