视觉相机模型以及投影原理推导——(单目)

news2024/11/23 22:26:09

相机模型简介

参考文献:视觉SLAM十四讲、视觉惯性SLAM理论与源码分析、该博客、文中的公式直接引用上面的文章,如有侵权请联系本人删除

1、针孔相机模型

投影过程

三维世界中的物体(目标点)P反射光线,通过相机光心,投影到相机的感光平面(物理成像平面/像素成像平面),一个个的光线投影点汇聚成三维世界的投影图像(二维),物理成像平面中的图像在像素坐标系下输出为最终的图像。

名词解释

1、光心:

相机光心越小越好,这样就能够保证空间中反射的光线只有一条通过光心,因为空间中的一个点反射的光线是漫反射,是多条的不规则的,而成像只需要一个点的一条光线即可

2、世界坐标系

也就是固定不动的坐标系,用来标记三维空间中物体的位置的参考系。SLAM中构建的地图也需要一个参考系,一般是机器人开机时的起始位置作为参考坐标系,以此坐标系来向地图中添加真实世界中的物体坐标。

3、相机坐标系

也就是以相机为参考系,以相机光兴为原点,观察到的真实世界中的物体相对于相机的位置坐标,该参考系Z轴通过光心且垂直于相机成像平面。该坐标系随着相机自身的移动而变化,与相机的位姿有关。

4、像素坐标系

真实世界中的物理点(三维)反射光线,通过光心,投射到相机的感光平面,形成一个像素点,这个像素点的集合就构成了图像(二维)。该坐标系位于光心后面一定距离(焦距),且垂直于光轴,但是其原点一般位于图片的左上角。

5、图像坐标系(物理成像平面)

这个坐标系是用来描述投影关系的平面,它和像素平面重合,原点位于光轴与像素平面的交点。

5、相机内参、相机外参

内参:
   内参指相机内部参数,包括焦距,畸变参数等,相机的标定通常就是求解这些参数
   
外参:
   相机外参、变换矩阵、相机位姿是同一个概念,通常是SLAM要求解的参数之一。
    
坐标系之间关系如下:
在这里插入图片描述

投影公式推导

假设三维空间中的物理点位置已知。通常情况下这是一个未知量,是SLAM要求解的地图点坐标。

1、物理点(三维)由世界坐标系转换到相机坐标系:

物理点坐标的变换和坐标系之间的变换是一致的,T表示变换矩阵,由旋转矩阵R和平移矩阵的齐次坐标t构成。齐次坐标(把三维的坐标再加一维变成四维)的作用是将非线性的变换公式转换成矩阵的形式的线性变换。

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

2、相机坐标系中的物理点(三维)投影成二维图像

投影原理:利用相似三角形的原理求解到成像平面的坐标点(二维),这一步是成像原理,实际的成像过程应该没有这一步,直接生成像素坐标下的像素点。

在这里插入图片描述

在这里插入图片描述

图像翻转处理:投影后的图像是倒立的缩小的像,将其投影到光心的前面(去掉公式中的负号)的位置,就成为我们看到的正规的图像。

在这里插入图片描述

得到最终投影平面的点坐标(二维)

在这里插入图片描述

投影实质(归一化处理)
    投影的实质就是将实际距离的物理点,全部沿着光线移动到相机光心前距离为1的平面上,就完成了三维点到平面点的转换

3、将成像平面的点坐标,转换到像素坐标系下

光线打到感光器件上形成的是一个像素点,该像素点才是构成图像的关键。像素坐标和图像坐标之间进行转换,其转换关系只是平移和放大缩小的关系。
    在这里插入图片描述

4、最后将全部过程总结:

合并参数:

在这里插入图片描述

改写成矩阵形式:K就是常说的内参矩阵、

在这里插入图片描述

在这里插入图片描述

最终投影公式:左边的是投影点坐标、右边的K叫做内参矩阵,由焦距、缩放因子、平移因子组成,Pw 为世界坐标系下的物理点的齐次坐标 Pu、v 为像素坐标下的投影点的齐次坐标。

在这里插入图片描述
到此投影过程完成

相机畸变模型解释

1、畸变产生的原因:
    透镜的存在导致发生光线的折射
    
    透镜的安装平面和成像平面不是严格的平行
2、畸变的种类:
    由折射产生的畸变(径向畸变):
        枕型畸变:
        桶型畸变:
    由安装导致的畸变(切向畸变):

相机的畸变模型:

纠正径向畸变公式:
在这里插入图片描述
纠正切向畸变公式
在这里插入图片描述
综合纠正公式:其中的5个畸变参数就是内参之一
在这里插入图片描述
纠正后的投影公式
在这里插入图片描述

总结

综上就是整个相机的投影模型,从其目的就是让三维点,投射到二维平面,使其失去一个深度上的值。其中我们需要首先知晓世界坐标系下的点坐标Pw,相机在世界坐标系下的位姿变换T,才能将投影公式推导出来。但是真实情况是,相机拍照,直接就能得到一定像素值的图像Puv,而真正求解的却是相机的位姿,以及图像的像素点在三维空间中的位置,那么此时,就需要逆推公式了,这样的方法将在后面的文章进行解读。

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

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

相关文章

RL - 强化学习 蒙特卡洛 (Monte-Carlo) 方法计算状态价值

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://blog.csdn.net/caroline_wendy/article/details/131102145 在强化学习中,状态价值 (State Value) 是指在特定状态下,智能体能够从该状态开始执行一系列动作&…

你还在用U盘和聊天工具来处理文档吗?ONLYOFFICE的协作空间来解决你的痛点了!

你还在用U盘和聊天工具来处理文档吗?ONLYOFFICE的协作空间来解决你的痛点了! 说起Office办公软件,大家想到的首先就是Word、PPT、Excel,这是微软Office的三件套,从我们当代人念大学写论文时候开始学着用,到…

PDF或图片文档内容识别、关系抽取

需求 自动识别法院和公积金中心的文书(调解书、判决书、裁定书、通知书)扫描件(PDF或图片),获取特定结构的数据,自动对比。抽取结构如: [标题,诉讼案号,执行案号,公积金,{原告: [姓名, 单位, 生…

无代码让我彻夜难眠

最近人工智能非常的火,特别是GPT,让一些程序员很慌。 但是GPT终归还是一个智能的搜索引擎,你可以问它某个问题或者算法问题,你让它快速开发一个系统,它能吗? 不能! 但是无代码可以&#xff0…

【Android Studio】Flamingo版本 更新gradle插件 7.+到8.+

步骤 build.gradle(module) android {namespace //adddefaultConfig {applicationId }}AndroidManifest.xml 取消package属性 <?xml version"1.0" encoding"utf-8"?> <manifest xmlns:android"http://schemas.android.com/apk/res/andr…

nginx负载均衡+反向代理

最近业务上遇到一个需求&#xff0c;其它系统因业务校验需要调用上级系统进行数据发送或校验&#xff0c;如果上级系统停机维护&#xff0c;其它下级系统发送的http通讯会丢失&#xff0c;还要一次次补发数据&#xff0c;耗费人工与时间。使用nginx反向代理解决了部分需求。 目…

【Java项目】从0到1完成Nacos配置文件扩展和共享

文章目录 环境配置配置文件名称空间和组扩展配置共享配置文件配置文件优先级 使用nacos作用配置中心的好处在于我们可以在云端上修改配置文件之后&#xff0c;使得本地的配置重新生效&#xff0c;从而做到不用重启项目也可以加载新的配置。 环境配置 首先引入依赖&#xff0c;…

【基础知识整理】图的基本概念 邻接矩阵 邻接表

一、图概述 定义&#xff1a; 图(graph)是由一些点(vertex)和这些点之间的连线(edge)所组成的&#xff1b; 其中&#xff0c;点通常被成为"顶点(vertex)“&#xff0c;而点与点之间的连线则被成为"边或弧”(edege)。 通常记为&#xff0c;G(V,E)。 图是一种重要的…

ANR中为什么会出现堆栈漂移

前言 我们排查ANR问题的时候&#xff0c;会发现有时候anr文件中捕获的堆栈信息&#xff0c;并不准确&#xff0c;而且经常会打印下面这样的堆栈&#xff1a; "main" prio5 tid1 Native| group"main" sCount1 ucsCount0 flags1 obj0x71ac6f78 self0xb4000…

java+mysql校园外卖订餐管理系统servlet

3.1 课题目的 对于客户而言&#xff0c;外卖订单管理系统最好是越方便操作&#xff0c;越简单越好。客户对于外卖订单系统&#xff0c;对他的首要要求就是能够安全&#xff0c;顺利的完成订单。但是很多时候开发人员更在意一些创新的模式&#xff0c;去增加用户的体验感或增值服…

关于变邻域搜索求解柔性作业车间问题的探讨

邻域结构交换内部关键块的操作 譬如&#xff0c;某案例的内部关键块为501—601—502—701&#xff0c;部分OS加工顺序码如下(标注的黄色底纹&#xff1a;为内部关键块) 在移动内部关键快操作时&#xff0c;请教各位是否是如下的变换&#xff1a; ① 块尾701 移至 块内工序50…

vs Git 本地服务器仓库配置

1、安装Git程序 Git 下载地址一https://git-scm.com/download/winGit 下载地址二We bring the awesome Git VCS to Windowshttps://gitforwindows.org/ 2、新建本地服务端仓库 2.1、新建文件夹&#xff0c;并创建仓库 在本地新建文件夹&#xff1a;//本地服务器仓库 在服务…

Vue+SpringBoot打造电子元器件管理系统(附源码文档)

作者主页&#xff1a;Designer 小郑 作者简介&#xff1a;Java全栈软件工程师一枚&#xff0c;来自浙江宁波&#xff0c;负责开发管理公司OA项目&#xff0c;专注软件前后端开发、系统定制、远程技术指导。CSDN学院、蓝桥云课认证讲师&#xff0c;全栈领域优质创作者。 一、摘要…

SSRS rdlc报表 七 安装及配置报表服务

开发环境 vs2022 sqlserver 2019 参考文档&#xff1a;安装 SQL Server Reporting Services - SQL Server Reporting Services (SSRS) | Microsoft Learn 配置 URL (Configuration Manager) - SQL Server Reporting Services (SSRS) | Microsoft Learn 如果你在安装数据库的…

基于html+css的图展示114

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

chatgpt赋能python:Python与Kafka的对接方法介绍

Python与Kafka的对接方法介绍 Kafka作为一种高吞吐量的分布式消息系统&#xff0c;近年来在数据处理、大数据分析以及实时流计算等领域得到了广泛的应用&#xff0c;成为了数据处理和分析领域中的标配。而Python作为一种简单易学、功能强大的编程语言&#xff0c;也因其在数据…

学习WooCommerce跨境电商社交媒体营销

WooCommerce 长期以来一直为电子商务店主提供多样化的服务。大约 500 万家商店啓用安装了免费的 WooCommerce 插件。 官方 WooCommerce 插件从 WordPress.org 下载了161,908,802次&#xff0c;并且还在增加。 超过5,106,506 个网站正在使用 WooCommerce。 本文网址: https…

pytorch相关报错【报错】

AttributeError: cannot assign module before Module.init() call 原因&#xff1a;自定义类中缺少supre()函数 解决 KeyError: tensor(1) 报错原因&#xff1a;tensor不能作为字典的键 解决&#xff1a;转化为numpy x torch.tensor([1,2,3]) y {1:1,2:2,3:3} z [y[i]…

提交arxiv的格式调整与流程

提交arxiv的格式调整与流程 进入arxiv网站&#xff08;注册或登录&#xff09;: https://arxiv.org/ 点击发布submission 上传本地资源&#xff0c;完成以下步骤&#xff1a; 许可证一般需要选&#xff1a; 这个表示最小的利益冲突&#xff0c;因为我们最后肯定希望publi…

如何在项目中优雅的抛出异常,这些知识佬们还记得嘛

前言&#xff1a; 本篇文章主要讲解Java中的几种异常关键字和异常类相关知识。该专栏比较适合刚入坑Java的小白以及准备秋招的大佬阅读。 如果文章有什么需要改进的地方欢迎大佬提出&#xff0c;对大佬有帮助希望可以支持下哦~ 小威在此先感谢各位小伙伴儿了&#x1f601; 以…