三维重建基础: 坐标系 (更新中)

news2024/11/29 1:48:15

文章目录

  • 概述
  • 计算机视觉:投影矩阵M: 世界坐标系 -> 像平面坐标系
    • 相机坐标系 -> 像平面坐标系:
    • 世界坐标系 -> 相机坐标系
  • 计算机图形:MVP变换
    • view/camera 变换
  • 常见坐标系定义
    • colmap中的坐标系
  • 线性代数相关基础
  • 待办
  • 附录

概述

世界坐标系与相机坐标系之间存在着互逆的转换。
具体有:
在这里插入图片描述
在这里插入图片描述
对某个三维点的坐标进行变换:

  • 世界坐标系到相机坐标系: W2C (我们俗称的相机pose)
  • 相机坐标系到世界坐标系: C2W(colmap默认输出)

在这里插入图片描述


左右手坐标系的xyz通过拇指、食指、中指三者的组合来确定。

参考链接


目标是,三维坐标转换至屏幕上的像素坐标。

我们假定起初的三维坐标是在世界坐标系下,那么为了获得其在像片上的对应坐标,我们首先需要做的事情是将三维点的坐标先从世界坐标系转换至相机坐标系下。然后我们再根据摄像机空间中的点坐标,将其投影至像平面上就可以了。
声明:部分图片摘自李博博客:https://ethanli.blog.csdn.net/article/details/113248118,本文主要用于个人笔记,若侵则删。


计算机视觉:投影矩阵M: 世界坐标系 -> 像平面坐标系

在这里插入图片描述
简写为:
在这里插入图片描述
如上式所示,K[R t]可以简写为M矩阵,即投影矩阵,是一个 3 ∗ 4 3 * 4 34的矩阵,是内参矩阵和外参矩阵的乘积。
通常来说,投影矩阵 M M M也往往会被称之为 P P P

相机坐标系 -> 像平面坐标系:

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

世界坐标系 -> 相机坐标系

在这里插入图片描述

计算机图形:MVP变换

在这里插入图片描述

本小结先主要关注view/camera变换,即相机坐标系和世界坐标系之间的变换。

view/camera 变换

首先定义 e ⃗ \vec{e} e g ⃗ \vec{g} g t ⃗ \vec{t} t
在这里插入图片描述
一个非常简单的观察就是,如果相机和物体都进行移动的话(保持相机中心和物体的相对关系持续一致),那么我们拍摄的图像理论上是不变的咯。
那么我们就可以考虑把相机先移动到世界坐标系的原点上,然后再旋转对应的轴,使得其能够世界坐标系重合上,然后我们把物体也做一样的变换,就可以保持其与相机的相对关系不变。【需要进一步地解释】
小结一下,变换过程总共可以分为两步:

  1. 将相机平移到原点;
  2. 将相机旋转到理想状态。
    在这里插入图片描述

平移矩阵很简单,直接就是:
在这里插入图片描述

我们考虑旋转矩阵的逆矩阵(描述了世界坐标系到相机坐标系的旋转过程):
在这里插入图片描述

现在我们考虑世界坐标系下 x x x轴的基向量为 [ 1 , 0 , 0 , 0 ] T [1,0,0,0]^T [1,0,0,0]T,其进行旋转后,理应变成 [ x g ^ × t ^ , y g ^ × t ^ , z g ^ × t ^ ] [x_{\hat{g} \times \hat{t}}, y_{\hat{g} \times \hat{t}}, z_{\hat{g} \times \hat{t}}] [xg^×t^,yg^×t^,zg^×t^], 即,有:
在这里插入图片描述
带入后进行解算,有:
在这里插入图片描述
参考链接

在games101_lecture_04中的描述为:
在这里插入图片描述
参考slides

常见坐标系定义

参考:https://zhuanlan.zhihu.com/p/593204605?utm_source=zhihu
在这里插入图片描述

colmap中的坐标系

colmap坐标系默认输出的是W2C的矩阵,如果想要进行正确的可视化,那么就需要将其变换到世界坐标系下:

在这里插入图片描述https://blog.csdn.net/weixin_44120025/article/details/124604229

线性代数相关基础

几何角度理解线性代数(1):向量、线性组合、矩阵乘法、行列式
几何角度理解线性代数(2): 逆矩阵、列空间与零空间

几何角度理解线性代数(3):点积与叉积

待办

  • 问:为什么有些旋转矩阵换轴的时候更换列向量,而有些是换行
    答: 以C2W为例,更换列向量是换的Camera坐标系,更换行向量是换的World坐标系。

附录

  1. C++中的using是什么作用的?
  2. 如何理解dll导出的宏定义?
  3. 怎么理解 inline Camera() = default; ?
  4. std::move()

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

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

相关文章

微信小程序安装 Vant 组件库与API Promise组件库

在项目内右键空白处选择在外部终端打开2、在终端窗口输入 npm init -y,创建package-lock.jsonnpm init -y3、在终端输入npm i vant/weapp1.3.3 -S --production,创建node_modules文件夹npm i vant/weapp1.3.3 -S --production4、详情-本地设置&#xff0…

安信证券资管清算重要业务在原生分布式数据库的创新实践

作者:安信证券信息技术委员会运维部系统平台室 刘盛彩、肖昭、张杰 来源:《金融电子化》 近日,《国务院关于数字经济发展情况的报告》(以下简称报告)提请十三届全国人大常委会第三十七次会议审议, 报告提出&#xff1a…

【Vue + Koa 前后端分离项目实战8】使用开源框架==>快速搭建后台管理系统 -- part8 【权限控制联调】

不要为了不值得的事和人感伤悲秋 本章主要关联章节:【Vue Koa 前后端分离项目实战3】使用开源框架>快速搭建后台管理系统 -- part3 权限控制行为日志_小白Rachel的博客-CSDN博客_koa权限管理 本章主要实现综合的系统权限管理 目录 一、权限控制说明 二…

【Linux】Linux常用指令(28个,以及热键,关机重启)

文章目录1、ls 指令2、pwd 命令3、cd 指令4、touch 指令5、mkdir 指令6、rmdir和rm 指令7、man 指令8、cp 指令9、mv 指令10、cat11、echo(输出,输入,追加重定向)12、wc13、more14、less15、head16、tail(以及管道 | )17、date18、cal19、find(which、wh…

KubeSphere使用外部ES进行日志收集(多行日志)

环境kubesphere : v3.3.1Docker:20.10.8Fluent-Bit:2.0.6-2.0.8ESKibana:7.9.3Docker日志示例{"log":"2023-01-10 11:32:50.021 - INFO --- [scheduling-1] traceId: p6spy : 1|conn-0|statement|SELECT fd_id A…

Java 泛型的介绍和使用

什么是泛型? 1.数据类型变得广泛,或者是数据类型变量化,这就是泛型.(广泛的类型). 2.有一个变量是用来存放一个数据类型,这就叫做泛型. 比如泛型T存放的是一个int 就表示为:Tint 当然T也可以是其他的数据类型,就取决我们给它数据类型. 3.泛型允许程序员在强类型程序设计语…

kafka zookeeper单机版安装部署全教程 含安装包

kafka zookeeper安装部署全教程 含安装包 大家好,我是酷酷的韩~ 一.基础软件安装 1.JDK安装部署 linux安装jdk1.8全教程(包含安装包) 二.安装包准备 1.kafka (kafka_2.12-2.8.0.tgz) https://kafka.apache.org/downloads 2.zookeeper (apache-zookeeper-3.7.…

最近爆火的电子血氧仪的基本原理

继口罩、抗原、药品之后,最近电子血氧仪的价格也开始水涨船高。从一个多月前的100多元,暴涨到了300多元。 那么,这类家用的电子血氧仪是如何工作的呢?测量数据到底准不准?今天就带大家来分析一下。 一、血氧仪工作原理 血氧仪是一种监测脉搏、血氧饱和度等指标的医疗器械…

人工智能-EM算法

目录1、EM算法2、EM算法介绍3、EM算法实例1、EM算法 EM算法:期望最大化算法。解决数据缺失情况下的参数估计问题 它是一个基础算法,是HMM等的基础 期望步:E步,最大步M步 步骤: 1,根据已经给出的观测数据,估计出模型参…

世界上第一款启用 QMK/VIA 的薄型无线机械键盘 Keychron K3 Pro 我刚刚入手

文章目录1. Keychron K3 Pro 是什么2. 键盘参数3. 打字音效测试4. 超薄5. 支持热插拔6. 薄型 Gateron 开关7. 薄型双射 PBT 键帽8. 多功能键9. 键盘部件可自定制10. 电池11. QMK 和 VIA 定制12. 产品清单13. 与 keychron k3 对比14. 与 keychron 其他系列对比14.1 为什么没有选…

Swin Transformer阅读笔记

Swin Transformer 使用了移动窗口的层级式的Vit(Hierarchical Vision Transformer using Shifted Windows) 总体来说:Swin Transformer想让Transformer像卷积神经网络一样,可以分为多个block,可以做层级式特征提取&a…

Flowable工作流——基础篇

1. 介绍 Flowable是BPMN的一个基于Java的软件实现,但是不仅仅限于BPMN,还有DMN决策表和CMMN Case管理引擎,并且有自己的用户管理,微服务API的功能,是一个服务平台。 是由开发了Acitivity6的开发人员,再次升…

nacos的使用

此篇博客是对nacos安装运行进行简单的介绍,后续博客会介绍下nacos的简单使用。nacos的安装安装可以去github上进行下载,下载地址(不建议下载最新版本,可以找比较稳定的版本)可以点解Tags查看所有历史版本我下载的是2.2…

基于 js 制作一个贪吃蛇小游戏

目录前言:项目效果展示:代码实现思路:使用方法:实现代码:总结:前言: 在工作学习之余玩一会游戏既能带来快乐,还能缓解生活压力,跟随此文一起制作一个小游戏吧。 描述&…

ESXI8.0一键安装黑群晖DSM7

🎈 作者:互联网-小啊宇 🎈 简介: CSDN 运维领域创作者、阿里云专家博主。目前从事 Kubernetes运维相关工作,擅长Linux系统运维、开源监控软件维护、Kubernetes容器技术、CI/CD持续集成、自动化运维、开源软件部署维护…

如何做好项目管理

项目管理概述 什么是项目 项目 是为创造独特的产品、服务或者成果而进行的临时性工作 项目三要素:临时性、独特性、渐进明确性 什么是项目管理 项目管理通过合理运营和整合项目相关活动,以满足项目目标达成的过程 项目与日常工作的区别 项目&…

设计测试用例

⭐️前言⭐️ 这篇文章主要介绍测试用例相关的知识,一个优秀的测试人员,需要具备设计优秀测试用例的能力。 🍉欢迎点赞 👍 收藏 ⭐留言评论 📝私信必回哟😁 🍉博主将持续更新学习记录收获&…

基于启发式蝙蝠算法、粒子群算法、花轮询算法和布谷鸟搜索算法的换热器PI控制器优化(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨‍💻4 Matlab代码 💥1 概述 本文采用蝙蝠算法、粒子群优化、花轮询算法和布谷鸟搜索算法,对管壳式换热器的控制系统进行了建模和计算机仿真。为…

trie树入门

trie树分为普通的trie树和01trie树两者可以实现成树,很大一部分原因是:只有26个字母和01两种状态,一个结点度数不会太大,而且字符串长度和位数不会很大,更容易存储普通trie树维护了一堆字符串集合的前缀,in…

Elastic-Job分布式任务调度(4):Elastic-Job高级

1 事件追踪 Elastic-Job-Lite在配置中提供了JobEventConfiguration,支持数据库方式配置,会在数据库中自动创建JOB_EXECUTION_LOG和JOB_STATUS_TRACE_LOG两张表以及若干索引,来记录作业的相关信息。 1.1 修改Elastic-Job配置类 在ElasticJo…