三维重建(单目、双目、多目、点云、SFM、SLAM)

news2025/1/23 9:32:15

  • 1 相机几何与标定
    • 1.1 相机模型中的坐标系
    • 1.2 四种坐标系之间的转换
    • 1.3 相机内参
    • 1.4 相机标定
  • 2 单目三维重建
    • 2.1 NeuralRecon

三维重建定义
在计算机视觉中, 三维重建是指根据单视图或者多视图的图像重建三维信息的过程. 由于单视频的信息不完全,因此三维重建需要利用经验知识. 而多视图的三维重建(类似人的双目定位)相对比较容易, 其方法是先对摄像机进行标定, 即计算出摄像机的图象坐标系与世界坐标系的关系.然后利用多个二维图象中的信息重建出三维信息。

常见的三维重建表达方式
常规的3D shape representation有以下四种:深度图(depth)点云(point cloud)体素(voxel)网格(mesh)

RGB-D深度图的D通道每个像素值代表的是物体到相机xy平面的距离,单位为 mm,由深度摄像头获取。
在这里插入图片描述

Point Cloud点云是某个坐标系下的点的数据集。点包含了丰富的信息,包括三维坐标X,Y,Z、颜色、分类值、强度值、时间等等。在我看来点云可以将现实世界原子化,通过高精度的点云数据可以还原现实世界。万物皆点云,由三维激光雷达获取。

在这里插入图片描述

体素是三维空间中的一个有大小的点,一个小方块,相当于是三维空间种的像素。
在这里插入图片描述

三角网格就是全部由三角形组成的多边形网格。多边形和三角网格在图形学和建模中广泛使用,用来模拟复杂物体的表面,如建筑、车辆、人体,当然还有茶壶等。任意多边形网格都能转换成三角网格。
在这里插入图片描述
三维重建的分类

根据采集设备是否主动发射测量信号,分为两类:基于主动视觉理论和基于被动视觉的三维重建方法。
主动视觉三维重建方法:主要包括结构光法和激光扫描法。
被动视觉三维重建方法:被动视觉只使用二维图像,根据图像的纹理分布等信息恢复深度信息,进而实现三维重建。

其中,双目视觉和多目视觉理论上可精确恢复深度信息,但实际中,受拍摄条件的影响,精度无法得到保证。单目视觉只使用单一摄像机作为采集设备,具有低成本、易部署等优点,但其存在固有的问题:单张图像可能对应无数真实物理世界场景(病态),故使用单目视觉方法从图像中估计深度进而实现三维重建的难度较大。

有前景的方向:基于SFM的运动恢复结构基于Deep learning的深度估计和结构重建基于RGB-D深度摄像头的三维重建基于点云的三维重建

SFM(Structure From Motion),主要基于多视觉几何原理,用于从运动中实现3D重建,也就是从无时间序列的2D图像中推算出三维场景结构,是计算机视觉学科的重要分支,广泛应用于AR/VR、自动驾驶等领域。SFM是一个估计相机参数及三维点位置的问题,根据SfM过程中图像添加顺序的拓扑结构,SfM方法可以分为增量式、全局式、混合式、层次式、基于语义的SFM和基于深度学习的SFM。

1 相机几何与标定

1.1 相机模型中的坐标系

针孔相机模型存在4个坐标系:世界坐标系、摄像机坐标系、图像物理坐标系和图像像素坐标系。

光心:图像的中心。
光轴:穿过图像的光心,与图像平面垂直的轴。
在这里插入图片描述

  • 世界坐标系(x,y,z):是客观三维世界的绝对坐标系,也称客观坐标系,就是物体在真实世界中的坐标,世界坐标系是随着物体的大小和位置变化的,单位是长度单位
  • 相机坐标系(x’,y’):以相机的光心坐标原点,以平行于图像的x和y方向为x轴和y轴,z轴和光轴平行,x, y,z互相垂直,单位是长度单位。

在这里插入图片描述

  • 图像物理坐标系(X,Y):以主光轴Zc和图像平面交点坐标原点,x’和y’方向如图所示,单位是长度单位。
  • 图像像素坐标系(Xc,Yc):以图像的上/下/左/右顶点坐标原点,u和v方向平行于x’和y’方向,单位是像素。(图像物理坐标系和像素坐标系仅通过平移可重合)

1.2 四种坐标系之间的转换

世界坐标系 -> 摄像机坐标系

从上面的坐标系介绍中我们可知世界坐标系和摄像机坐标系都是三维坐标系,而物体在三维空间中的位置变化只有两种,即平移和旋转,这个时候就用到我们的欧式变换了,即使原始坐标的齐次坐标乘以我们的欧式变换矩阵,就能得到最终的结果(使用欧式变换本质上就是为了实现矩阵相乘,齐次就是方便我们进行乘法)
在这里插入图片描述
但是很多时候平移和旋转都不止进行了一次,在多次连续的平移和旋转的情况下,加入假如我们将向量a进行了两次欧式变换,旋转和平移分别为R1,t1和R2,t2。
在这里插入图片描述
摄像机坐标系 -> 图像物理坐标系

从摄像机坐标变换到图像物理坐标,我们利用了相似三角形的原理,根据相似三角形的性质列出对应的矩阵计算式,即可求出我们需要的结果,但是摄像机坐标是3维的,而现在要求的图像物理坐标是2维的,所以我们还是需要用到齐次坐标。在这里插入图片描述

图像物理坐标系 -> 图像像素坐标系

图像物理坐标系与图像像素坐标系之间的转换其实就是单位转换和中心原点的转换,一个是中心点和长度单位,另一个是左上角和像素单位
在这里插入图片描述

1.3 相机内参

相机成像原理

这些坐标系转换过程(世界->相机->物理->像素)就是相机的成像原理,相机坐标系中间商
在这里插入图片描述
相机内参K相机坐标系<->像素坐标系齐次转换矩阵,由相机本身决定。
在这里插入图片描述
相机外参RT:旋转平移矩阵,世界坐标系<->相机坐标系,外参由视角决定。
在这里插入图片描述

1.4 相机标定

获取相机内参和外参的方法就是相机标定,找到很多对儿点的世界坐标系和像素坐标系的对应关系,求解内外参。
在这里插入图片描述
在这里插入图片描述

2 单目三维重建

传统三维重建:需要深度估计和点云融合的中间步骤,而深度三维重建使用End2End模型一条龙完成。
在这里插入图片描述

2.1 NeuralRecon

在这里插入图片描述

在这里插入图片描述

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

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

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

相关文章

DJ1-2 操作系统引论

目录 一、操作系统的发展过程 1. 无操作系统 2. 单道批处理系统 3. 多道批处理系统 4. 分时操作系统 5. 实时系统 二、操作系统的基本特征 1. 并发性 2. 共享性 3. 虚拟性 4. 异步性 三、操作系统的主要功能 1. 处理机管理功能 2. 存储器管理功能 3. 设备管理功…

python pca/svd原理及应用

PCA的定义主成分分析&#xff0c;即Principal Component Analysis&#xff08;PCA&#xff09;&#xff0c;是多元统计中的重要内容&#xff0c;也广泛应用于机器学习和其它领域。它的主要作用是对高维数据进行降维。PCA把原先的n个特征用数目更少的k个特征取代&#xff0c;新特…

Elasticsearch使用——高级篇

1.数据聚合**聚合&#xff08;aggregations&#xff09;**可以让我们极其方便的实现对数据的统计、分析、运算。例如&#xff1a;什么品牌的手机最受欢迎&#xff1f;这些手机的平均价格、最高价格、最低价格&#xff1f;这些手机每月的销售情况如何&#xff1f;实现这些统计功…

【ns-3】添加nr(5G-LENA)模块

文章目录前言1. 下载5G-LENA源代码2. 配置并重新构建ns-3项目参考文献前言 本篇以ns-3.37为例介绍如何在ns-3中添加nr&#xff08;5G-LENA&#xff09;模块 [1]。5G-LENA是一个由Mobile Networks group CTTC&#xff08;Centre Tecnolgic de Telecomunicacions de Catalunya&a…

微信小程序开发学习笔记1——安心食疗

2.1小程序代码结构 目录结构 1.小程序的目录 pages:小程序的页面 页面路径 一个小程序页面由四个文件组成&#xff0c;分别是&#xff1a; xxx.js xxx.wxml xxx.json xxx.wxss 注意&#xff1a;为了方便开发者减少配置项&#xff0c;描述页面的四个文件必须具有相同的路径与文…

MySQL(二)视图、锁、存储过程、触发器、锁以及常用工具

MySQL进阶视图检查选项视图的更新存储过程存储过程基本语法变量系统变量用户自定义变量局部变量if判断参数casewhile循环repeat循环loop循环cursor游标handler条件处理程序存储函数触发器锁全局锁表级锁表锁元数据锁意向锁行级锁行锁间隙锁&临键锁InnoDB引擎逻辑存储结构事…

使用Arduino开发ESP32:开发环境搭建

开发环境搭建 使用Arduino开发ESP32开发环境搭建方式和用Arduino开发ESP8266相似&#xff1a;https://blog.csdn.net/Naisu_kun/article/details/80186950#t0 下载安装Arduino IDE&#xff1a; https://www.arduino.cc/en/Main/Software Arduino IDE中添加ESP32开发板数据&a…

第二道pwn题:shellcode

题目来自视频&#xff1a;链接&#xff1a;https://pan.baidu.com/s/17vX9dbfHkXBw71mcEXBgNQ?pwd6666 提取码&#xff1a;6666查看文件类型和保护&#xff0c;虽然现在的我还没有明白太多的保护。64位&#xff0c;放到ida里边rbp:保存的是栈中当前执行函数的基本地址。当前执…

xCAT安装指南

一、简介 xCAT使您能够轻松管理任何类型的技术计算工作负载的大量服务器。xCAT以卓越的扩展、各种支持的硬件和操作系统、虚拟化平台和完整的“day0”设置功能而闻名。 二、安装指南 免责声明 这些说明仅为指南&#xff0c;具体细节可能因操作系统版本而略有不同。有关最新推…

TCP与UDP

概述 传输层时向上层的应用层提供通讯服务的&#xff0c;是属于面向通信部份的最高层&#xff0c;同时也是用户功能的最底层 传输层有两个很重要的特点&#xff1a;复用、分用 复用&#xff1a;应用层所有的应用进程都可以通过运输层再传到网络层 分用&#xff1a;运输层从网…

【Unity】多分辨率适配

笔者按&#xff1a;使用Unity版本为2021.3LTS&#xff0c;与其他版本或有异同。请仅做参考 一、前言。 本文是笔者在学习使用Unity引擎的过程中&#xff0c;产学研的一个笔记。由笔者根据官方文档Unity User Manual 2021.3 (LTS)/Create user interfaces (UI)/Unity UI/UI 操作…

mingw编译opencv

我这里是msys2 这个是msys2的教程 https://blog.csdn.net/qq_39942341/article/details/105931335?ops_request_misc%257B%2522request%255Fid%2522%253A%2522167821146216800197067008%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&requ…

【LeetCode】剑指 Offer 24. 反转链表 p142 -- Java Version

题目链接&#xff1a;https://leetcode.cn/problems/fan-zhuan-lian-biao-lcof/submissions/ 1. 题目介绍&#xff08;24. 反转链表&#xff09; 定义一个函数&#xff0c;输入一个链表的头节点&#xff0c;反转该链表并输出反转后链表的头节点。 【测试用例】&#xff1a; 示…

C++右值引用/移动语义

在此之前&#xff0c;我们所用的引用&#xff0c;其实都是左值引用。 int a 10; int& ra a; 下面我们来重新认识一下引用&#xff1a; 而何为左值&#xff1f;左值引用其实是什么&#xff1f;请往下看~ 左值是一个表示数据的表达式(如变量名或解引用的指针)&#xff…

77. writerows写入多行

文章目录1. 目标任务2. 准备工作3. writerow单行写入4. writerows多行写入5. a以追加的模式写入值6. 总结1. 目标任务 新建【各班级成绩】文件夹&#xff1b; 在该文件夹下新建一个【1班成绩单.csv】文件&#xff1b; 在该文件中写入下面的内容&#xff1a; 成绩 姓名 刘一…

CentOS 8搭建EMQX集群

概览 EMQX (opens new window)是一款大规模可弹性伸缩的云原生分布式物联网 MQTT (opens new window)消息服务器。 EMQ X 设计目标是实现高可靠&#xff0c;并支持承载海量物联网终端的MQTT连接&#xff0c;支持在海量物联网设备间低延时消息路由: 1. 稳定承载大规模的 MQTT 客…

Allegro如何添加菜单栏操作指导

Allegro如何添加菜单栏操作指导 用Allegro设计PCB的时候,将常用的命令放在菜单栏的话可以方便使用,省去设计时间,菜单如下图 Allegro支持自由添加或者删除菜单,具体操作如下 点击View点击Customize Toolbar

【使用vue init和vue create的区别以及搭建vue项目的教程】

vue init 是vue-cli2.x的初始化方式&#xff0c;可以使用github上面的一些模板来初始化项目 webpack是官方推荐的标准模板名 使用方式&#xff1a;vue init webpack 项目名称 例如使用github上面electron-vue的模板使用方式&#xff1a;vue init electron-vue 项目名称教程目…

Java的数据库编程:JDBC

Content &#x1f389;1什么是API &#x1f389;2.什么是JDBC &#x1f389;3.数据库驱动包的安装 &#x1f389;4.数据库安装包在idea的使用 &#x1f389;5.JDBC的增删改查的简单实现 今天为大家带来JAVA的数据库编程,也就是用Java实现数据库 数据库的最基本的操作就是…

分布式锁简介

Redis因为单进程、性能高常被用于分布式锁&#xff1b;锁在程序中作用是同步工具&#xff0c;保证共享资源在同一时刻只能被一个线程访问。 Java中经常用的锁synchronized、Lock&#xff0c;但是Java的锁智能保证单机的时候有效&#xff0c;分布式集群环境就无能为力了&#xf…