多视图三维重建-SFM简介

背景

掌握传统的多视图三维重建基本流程

总体流程

多视图三维重建的Pipieline如下图,总共分为四个步骤:

  1. 拍摄场景多视角的图像
  2. 建立这些图像之间的联系(Data Association)
  3. SFM稀疏重建
  4. MVS稠密重建
    在这里插入图片描述

Data Association

建立图像之间的联系主要包含以下4个步骤:1)特征提取;2)特征匹配;3)基于几何的特征对验证;4)特征建树
1)图像的特征提取。
1.1)全局特征描述子
· Color histogram颜色直方图
在这里插入图片描述
· GIST feature
首先, 在4个尺度和8个方向上设置Gabor滤波器,并对图像做滤波,得到32个滤波后图像。
其次, 对滤波后图像分成44个区域,计算每个区域内像素均值。
最后, 得到4
844=512个区域均值组成的特征向量,即为Gist512特征。
1.2)局部特征描述子
· SIFT & SURF & DSP-SIFT
在这里插入图片描述
· BRIEF
一种二进制描述、不具备旋转不变性,不具备尺度不变性
在这里插入图片描述
· OBR
ORB特征在速度方面相较于SIFT、SURF已经有明显的提升
同时,保持了特征子具有旋转与尺度不变性
2)特征匹配
特征匹配具有两条路线:
2.1)Matching
① 每个图像分别提取全部的特征
② 图像和图像之间搜索最佳匹配特征(最佳匹配也可能是误匹配)
③ 进一步SSD、SAD、NCC等块匹配方式来验证
2.2)Tracking
① 图像1中提取特征A
② 在图像2中,临近的图像位置处,寻找完全相同的特征A
③ 在图像3中再次寻找完全相同的特征A(在连续视频帧中、或两两拍摄场景的位置相差不多时有效)
3)基于几何的特征对验证
基于对极约束:图像中的一个点p1,在另一个图像中的匹配点p2,必然在极线L2上
在这里插入图片描述
由对极几何的约束关系,将特征对中不满足几何约束的误匹配点剔除,如下图中红色线描述的特征对
在这里插入图片描述
关于对极约束的描述,若是一般的场景下,匹配点对P1-P2之间满足如下用基础矩阵描述的关系:
在这里插入图片描述
当物体是一个接近平面的对象时,可利用平面单应性矩阵H(单应性变换 Homography Estimation)来表达两个视图中点的关系
在这里插入图片描述
在这里插入图片描述
根据已有的特征点对, 由于是存在误匹配点对的,因此,通常基于RANSAC来选择若干点对P1-P2求解稳定的F或H,然后利用F或H建立的对极约束,剔除不满足几何约束的特征点对。如下表所示,根据场景类型是通用的、平面类的、全景类的,使用合理的模型进行特征对验证。
在这里插入图片描述
F矩阵是一个3*3的矩阵,秩为2,且没有尺度信息,因此自由度为7,典型的解法是使用归一化8点法来获取求解最佳近似F矩阵。值得注意的是:系数矩阵的正则化和反正则化,其次,SVD得到的解不是最终解,需要进一步最佳估计满足F矩阵特质的解
在这里插入图片描述
基础矩阵F和本质矩阵E之间关系如下
在这里插入图片描述
在内参矩阵初始化后是已知的状态,那么根据F可以估计得到E矩阵,再由E矩阵和旋转矩阵R和平移量t满足的如下关系,来分解得到R,t
在这里插入图片描述
[ t x ] [t_x] [tx]是平移量的反对称矩阵,对于E进行SVD分解,在四对解中,带入实际的点,判断点和相机坐标系正、反方向的关系,获取正解
在这里插入图片描述
对于单应性矩阵H分解得到R,t的过程可以参考之前的博文H分解得到RT
4)特征建树
所有图像的特征描述建立搜索树,以便新的下一帧图像进行特征匹配时,快速的找到对应的特征及所在的图像ID

SFM稀疏重建

SFM(Structure From Motion)
· Structure —— 指场景的几何结构
· Motion —— 指相机从多个角度来获取场景图像的过程
· 输入:多角度同一场景的图像
· 输出:场景内物体的三维坐标、相机的位姿参数

在Data Association中,我们能够获取两两视图之间的R,t相对关系,接下来我们需要获取场景内关键点的三维坐标,以及各个视图的绝对位姿信息。主要有如下三个策略
在这里插入图片描述
在这里插入图片描述

  • 增量式SFM
    Incremental Reconstruction的主要步骤包含:Initialization, Image Registration, Triangulation, Bundle Adjustment, Outlier Filtering, Reconstruction.
    在这里插入图片描述
    1)Initialization.
    1.1) Choose two non-panoramic views ( 𝑡 ≠ 0). 指从所有的多视角中,挑选两个非全景拍摄的视图作为起始位置。
    1.2) Triangulate inlier correspondences. 已知两两视图之间的R,t关系,在初始化内参已知的情况下、特征点对也已经匹配完成,就可以进行两两视图之间的特征点三维重建。

在这里插入图片描述
1.3)Bundle adjustment. 上述过程是在初始化内参情况下完成的,为了进一步获取精确的内、外参数和三维点坐标,需要利用已知的特征点二维坐标,对两两视图系统进行优化。
2)Absolute camera registration.
2.1)Find 2D-3D correspondences. 两两视图完成上述初始化工作后,当第三幅视图进入计算时,首先根据特征匹配,找到图像1和图像3,图像2和图像3的特征匹配点对。
在这里插入图片描述
2.2)Solve Perspective-n-Point problem. 根据Initialization过程中重建得到的三维点,以及图像3中的匹配点,就能建立3D-2D的对应关系,由此利用PnP来求解图像3的绝对位姿。参考之前的博文,PnP的一些总结
在这里插入图片描述

2.3)Triangulate new points. 图像1-图像3,图像2-图像3两两组合,重建新的三维点
在这里插入图片描述
3)Bundle Adjustment. 将三个视图的图像、三维点、相机内外参数再次进行系统优化。
4)Outlier filtering. 剔除重投影误差过大的点;剔除重建点三维坐标无穷大的点
在这里插入图片描述
增量式SFM就是在每一次新的视图进入计算时,都要重复的匹配、重建和捆绑调整,因此,准确性和鲁棒性比较高

  • 全局式SFM
    全局SFM是完成所有的两两视图重建后,再统一进行BA捆绑优化,效率高,但稳定性低
    在这里插入图片描述

  • 分组式SFM
    分组式SFM根据先验将图像进行分组,每一个组内进行增量式SFM或全局式SFM,然后融合所有组的三维信息
    在这里插入图片描述
    将三种策略的SFM的对比如下
    在这里插入图片描述

Challenges

在这里插入图片描述

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

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

相关文章

第十二章 微服务核心(一)

一、Spring Boot 1.1 SpringBoot 构建方式 1.1.1 通过官网自动生成 进入官网:https://spring.io/,点击 Projects --> Spring Framework; 拖动滚动条到中间位置,点击 Spring Initializr 或者直接通过 https://start.spring…

QT_day3:信号和槽的连接方式

1、使用手动连接,将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中,在自定义的槽函数中调用关闭函数 将登录按钮使用qt5版本的连接到自定义的槽函数中,在槽函数中判断ui界面上输入的账号是否为"admin",密码是…

嵌入式3-29

今日作业&#xff1a;用fwrite 和 fseek功能&#xff0c;将一张bmp格式的图片更改成 德国国旗#include <stdio.h> #include <string.h> #include <stdlib.h> #include <math.h> typedef unsigned char bgr[3]; int main(int argc, const char *argv[])…

用grafana+prometheus+cadvisor监控容器指标数据,并查询当前容器的网速网络用量

前言 整理技术&#xff0c;在这篇文章中&#xff0c;将会搭建grafanaprometheuscadvisor监控容器&#xff0c;并使用一个热门数据看板&#xff0c;再监控容器的性能指标 dashboard效果 这个是node-exporter采集到的数据&#xff0c;我没装node-exporter&#xff0c;而且这也…

3D人体姿态估计项目 | 从2D视频中通过检测人体关键点来估计3D人体姿态实现

项目应用场景 人体姿态估计是关于图像或视频中人体关节的 2D 或 3D 定位。一般来说&#xff0c;这个过程可以分为两个部分&#xff1a;(1) 2D 视频中的 2D 关键点检测&#xff1b;(2) 根据 2D 关键点进行 3D 位姿估计。这个项目使用 Detectron2 从任意的 2D 视频中检测 2D 关节…

【滑动窗口】Leetcode 将 x 减到 0 的最小操作数

题目解析 1658. 将 x 减到 0 的最小操作数 算法讲解 这道题按照题目要求的话会变得很难&#xff0c;因为不仅需要考虑数字减到0&#xff0c;还需要考虑最小的操作数。正难则反&#xff0c;按照这个思路&#xff0c;我们来解析题目 这道题本质上无非就是在左边寻找一段区间&a…

【每日算法】理论: 扩散模型+深度学习基础 刷题:力扣哈希表回顾

上期文章 【每日算法】理论&#xff1a; DALLE 系列 刷题&#xff1a;力扣链表回顾 文章目录 上期文章一、上期问题二、本期问题1、交叉熵损失函数2、SAM模型的mask encoder&#xff08;掩码解码器&#xff09;3、VQVAE的优化问题4、controlnet模型中的zero convolution模块5、…

浪潮信息AIStation与潞晨科技Colossal-AI 完成兼容性认证!

为进一步提升大模型开发效率&#xff0c;近年来&#xff0c;浪潮信息持续加强行业合作&#xff0c;携手业内头部&#xff0c;全面进攻大模型领域。日前&#xff0c;浪潮信息AIStation智能业务创新生产平台与潞晨科技Colossal-AI大模型开发工具完成兼容性互认证。后续&#xff0…

边缘计算盒子 | 什么是边缘计算盒子?选型要看哪些参数?

边缘计算(Edge Computing)是一种分布式计算范式&#xff0c;它将计算资源和数据存储位于离网络核心节点较近的地方&#xff0c;以降低延迟、提高传输速度和数据安全性。通常可以把边缘计算盒子(Edge Computing Box)理解成一种集成了边缘计算功能的硬件设备&#xff0c;通常部署…

SD 修复 Midjourney 有瑕疵照片

Midjourney V6 生成的照片在质感上有了一个巨大的提升。下面4张图就是 Midjourney V6 生成的。 如果仔细观察人物和老虎的面部&#xff0c;细节真的很丰富。 但仔细观察上面四张图的手部细节&#xff0c;就会发现至少有两只手是有问题的。这也是目前所有 AI 绘图工具面临的问题…

第十二章 微服务核心(二)

一、Spring Cloud 1. 服务注册中心 常见的服务注册中心组件如下 - Eureka - Consul - Zookeeper - Etcd - Nacos 2. Eureka SpringCloud 封装了 Netflix 公司开发的 Eureka 模块来实现服务治理。 什么是服务治理&#xff1a;在传统的 RPC 远程调用框架中&#xff0c;管…

SQLite中的隔离(八)

返回&#xff1a;SQLite—系列文章目录 上一篇&#xff1a;SQLite版本3中的文件锁定和并发(七&#xff09; 下一篇&#xff1a;SQLite—系列文章目录 数据库的“isolation”属性确定何时对 一个操作的数据库对其他并发操作可见。 数据库连接之间的隔离 如果使用两个不…

SpringBoot整合参数校验

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉🍎个人主页:Leo的博客💞当前专栏: 循序渐进学SpringBoot ✨特色专栏: MySQL学习 🥭本文内容:SpringBoot整合参数校验 📚个人知识库: Leo知识库,欢迎大家访问 目录 1.前言…

关于github提交失败的问题

问题描述 Username for https://github.com: LAL-Better Password for https://LAL-Bettergithub.com: remote: Support for password authentication was removed on August 13, 2021. remote: Please see https://docs.github.com/get-started/getting-started-with-git/abo…

QT资源添加调用

添加资源文件&#xff0c;新建资源文件夹&#xff0c;命名resource&#xff0c;然后点下一步&#xff0c;点完成 资源&#xff0c;右键add Prefix 添加现有文件 展示的label图片切换 QLabel *led_show; #include "mainwindow.h" #include<QLabel> #include&l…

Python应用JSON Web Tokens库之pyjwt使用详解

概要 JSON Web Tokens(JWT)是一种用于安全传输信息的开放标准(RFC 7519),它可以在网络应用之间传递声明。PyJWT是Python中用于创建、解析和验证JWT的库,它提供了丰富的功能和灵活性,能够轻松地在Python应用程序中实现JWT的各种功能。本文将深入探讨PyJWT库的各个方面,…

再见 mysql_upgrade

在数据库管理的世界里&#xff0c;随着技术的不断进步和业务的不断发展&#xff0c;数据库的版本升级成为了一个不可避免的过程。 MySQL 作为业界领先的开源关系型数据库管理系统&#xff0c;其版本迭代与功能优化同样不容忽视。 而在这个过程中&#xff0c;升级工具就显得尤为…

若依微服务nacos配置在哪里?

今天拿ruoyi-cloud项目拉下来看了下&#xff0c;发现nacos配置文件比较难找&#xff0c;这里说一下在哪里。 在项目sql脚本ry_config_20231204.sql里面&#xff0c;这个脚本执行会创建一个数据库叫ry-config。 安装好nacos以后&#xff0c;在nacos的配置文件application.proper…

ESP32-S3 集成了2.4GHz、Wi-Fi和BLE5.0的MCU芯片

智能家居无处不在&#xff0c;生活中一个不起眼的插座都有大讲究。那与全屋智能互相连通的WiFi智能插座内部到底是什么样呢&#xff1f; 一般的WiFi智能插座&#xff0c;由一个物理按键模块&#xff0c;负责物理上直接控制插座开关、重新配网等功能&#xff1b;WiFi模块&#x…

计数器的原理和应用

一、计数器的原理和应用 要求&#xff1a;每计数三次&#xff0c;数码管值加一 #include<reg51.h> unsigned char s[]{0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; unsigned char num0; void initcounter() {TMOD0x06;//0000 0110TH0256-3;TL0256-3;ET01;EA1;T…