【视觉SLAM:四、相机与图像】
相机模型
相机模型是计算机视觉中的重要内容,用于描述真实相机如何将三维世界投影到二维图像平面。以下从多个角度介绍常见的相机模型。
针孔相机模型
针孔相机模型是最简单的相机模型,用数学公式描述从三维世界到二维图像平面的映射关系。核心公式如下: s [ u v 1 ] = K [ R t ] [ X Y Z 1 ] s\begin{bmatrix}u\\v\\1\end{bmatrix}=\mathbf{K}\begin{bmatrix}\mathbf{R}&\mathbf{t}\end{bmatrix}\begin{bmatrix}X\\Y\\Z\\1\end{bmatrix} s uv1 =K[Rt] XYZ1
- 参数解释:
- (X,Y,Z) 是世界坐标系中的三维点。
- (u,v) 是图像坐标系中的像素坐标。
- R∈SO(3) 和 𝑡 描述相机的旋转和平移(即相机位姿)。
- K 是相机的内参矩阵,包含焦距和主点坐标。
- s 是尺度因子,表示物体在相机坐标系中的深度。
- 优点:
- 精确描述了相机的透视投影特性。
- 局限性:
- 忽略了真实相机中的畸变现象。
畸变模型
真实相机镜头存在一定的畸变,常见畸变包括:
- 径向畸变:由镜头曲率引起,导致直线变成弯曲。
- 表达公式: p d = p u ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) \mathbf{p}_d=\mathbf{p}_u(1+k_1r^2+k_2r^4+k_3r^6) pd=pu(1+k1r2+k2r4+k3r6)
其中 𝑟 是未畸变点 p u \mathbf{p}_u pu到光轴的距离。 - 切向畸变:由于镜头与成像平面不完全平行引起。
- 表达公式:
x d = x u + [ 2 p 1 x u y u + p 2 ( r 2 + 2 x u 2 ) ] x_d=x_u+[2p_1x_uy_u+p_2(r^2+2x_u^2)] xd=xu+[2p1xuyu+p2(r2+2xu2)]
y d = y u + [ p 1 ( r 2 + 2 y u 2 ) + 2 p 2 x u y u ] y_d=y_u+[p_1(r^2+2y_u^2)+2p_2x_uy_u] yd=yu+[p1(r2+2yu2)+2p2xuyu]
通过校正畸变,可以将畸变的图像点恢复到针孔相机模型中。
- 表达公式:
双目相机模型
双目相机系统由两个相机组成,用于通过视差恢复三维点的深度信息。
- 几何关系:
- 两个相机之间的相对位置和姿态由旋转矩阵
- 深度计算:
Z = f ⋅ b d Z=\frac{f\cdot b}{d} Z=df⋅b
其中:- 𝑍 是3D点的深度。
- 𝑓 是相机焦距。
- 𝑏 是基线长度(两个相机的距离)。
- 𝑑 是视差(两个相机对应点的像素差)。
双目相机常用于三维场景重建。
RGB-D相机模型
RGB-D相机结合了传统的RGB图像和深度信息,直接提供每个像素的深度值 𝑍。
- 深度值与3D点的计算:
[ X Y Z ] = Z ⋅ K − 1 [ u v 1 ] \begin{bmatrix}X\\Y\\Z\end{bmatrix}=Z\cdot\mathbf{K}^{-1}\begin{bmatrix}u\\v\\1\end{bmatrix} XYZ =Z⋅K−1 uv1
其中 (𝑢,𝑣) 是像素坐标,𝐾 是相机内参。 - 优点:
- 能直接获取场景深度,避免了双目相机的匹配误差。
- 常见设备:
- Kinect、Realsense、Lidar等。
图像
图像的基本定义
- 图像是对真实场景的二维采样,由像素组成,每个像素存储场景的亮度或颜色信息。
- 图像的基本形式:
- 灰度图像:每个像素存储亮度值。
- 彩色图像:每个像素存储RGB三个通道的颜色值。
图像坐标系
- 像素坐标系:以像素点为单位,左上角为原点,坐标为 (𝑢,𝑣)。
- 图像坐标系:以图像中心为原点,单位为像素。
计算机中的图像
图像的存储
- 在计算机中,图像以矩阵的形式存储:
I = [ I ( 0 , 0 ) I ( 0 , 1 ) ⋯ I ( 0 , n ) I ( 1 , 0 ) I ( 1 , 1 ) ⋯ I ( 1 , n ) ⋮ ⋮ ⋱ ⋮ I ( m , 0 ) I ( m , 1 ) ⋯ I ( m , n ) ] \mathbf{I}=\begin{bmatrix}I(0,0)&I(0,1)&\cdots&I(0,n)\\I(1,0)&I(1,1)&\cdots&I(1,n)\\\vdots&\vdots&\ddots&\vdots\\I(m,0)&I(m,1)&\cdots&I(m,n)\end{bmatrix} I= I(0,0)I(1,0)⋮I(m,0)I(0,1)I(1,1)⋮I(m,1)⋯⋯⋱⋯I(0,n)I(1,n)⋮I(m,n)
每个 𝐼(𝑢,𝑣) 表示像素的亮度或颜色值。
图像的处理
- 图像处理包括滤波、边缘检测、特征提取等。
- 在视觉SLAM中,图像处理是特征点提取和匹配的基础。
3D视觉
双目视觉
- 双目视觉通过两个相机的配合,计算场景的深度信息。
- 核心原理:
- 使用极线约束和视差进行三角测量。
- 双目视觉的应用:
- 3D场景重建。
- 目标检测与深度估计。
RGB-D视觉
- RGB-D视觉直接提供深度信息,常用于室内场景的三维建模。
- 优势:
- 数据采集速度快。
- 深度信息精确,无需匹配。
- 缺点:
- 深度传感器对光线和环境敏感。
总结
相机与图像是计算机视觉的核心组成部分。从针孔相机模型到RGB-D相机模型,从二维图像的表示到三维视觉的场景重建,都离不开对相机模型的理解与应用。结合这些模型,可以实现从图像到三维世界的感知与表达,为计算机视觉和SLAM任务奠定了理论基础。
相关文章:
【视觉SLAM:四、相机与图像】
相机模型 相机模型是计算机视觉中的重要内容,用于描述真实相机如何将三维世界投影到二维图像平面。以下从多个角度介绍常见的相机模型。 针孔相机模型 针孔相机模型是最简单的相机模型,用数学公式描述从三维世界到二维图像平面的映射关系。核心公式如…...
如何利用无线路由器实现水泵房远程监测管理
水泵站广泛部署应用在工农业用水、防洪、排涝和抗旱减灾等方面,如果水泵站发生异常,往往会对生产生活造成诸多损失,甚至引发安全事故。因此,建立一套高效、可靠的泵站远程监测管理系统至关重要。 方案背景 目前,我国大…...
使用ArcGIS Pro自带的Notebook计算多个遥感指数
在之前的分享中,我们介绍了如何使用ArcPy将GEE下载的遥感影像转为单波段文件。基于前面创建的单波段文件,我们可以一次性计算多种遥感指数,例如NDVI、EVI、NDSI等。我这里直接在ArcGIS Pro中自带的Notebook进行的运行。如下图所示,…...
宝塔-firefox(Docker应用)-构建自己的Web浏览器
安装基础软件 宝塔中安装firefox(Docker应用) 。宝塔中需要先安装docker及docker-composefirefox配置安装 点击firefox应用,选择【安装配置】点击右边绿色按钮,进行安装,这一步等待docker-compose根据你的配置初始化docker应用 等待安装 …...
OpenCV-Python实战(8)——图像变换
一、缩放 cv2.resize() img cv2.resize(src*,dsize*,fx*,fy*,interpolation*) img:目标图像。 src:原始图像。 dsize:(width,height)图像大小。 fx、fy:可选参数,水平/垂直方向…...
存储进阶笔记(二):Linux 存储栈:从 Device Mapper、LVM 到文件系统(2024)
记录一些平时接触到的存储知识。由于是笔记而非教程,因此内容不求连贯,有基础的同学可作查漏补缺之用。 存储进阶笔记(一):硬件基础:HDD/SDD、JBOD、RAID 等(2024) 存储进阶笔记&am…...
Linux(Centos 7.6)基础命令/常用命令说明
1.目录相关命令 命令命令说明pwd用于显示/打印当前目录位置。ls/ll 列出当前目录下的文件或者目录,ll是ls -l的别名,ls仅显示名称,ll会显示详细的目录文件信息。 cd目录切换,常见用法有,cd /切换到根目录,…...
超详细!一文搞定PID!嵌入式STM32-PID位置环和速度环
本文目录 一、知识点1. PID是什么?2. 积分限幅--用于限制无限累加的积分项3. 输出值限幅--用于任何pid的输出4. PID工程 二、各类PID1. 位置式PID(用于位置环)(1)公式(2)代码使用代码 2. 增量式…...
【Goland】怎么执行 go mod download
1、终端的执行 go mod tidy 2、终端执行不行的话,就可以通过右击go.mod文件来执行; 3、也可以按住Ctrl点击这个包安装;...
服务器主机测试网络
测试命令 speedtest-cli sudo yum install python-pip pip install speedtest-cli # 默认连接国外被拒绝,用阿里云 pip install -i https://mirrors.aliyun.com/pypi/web/simple --trusted-host mirrors.aliyun.com speedtest-cli Collecting speedtest-cliDownlo…...
【JMeter详解】
JMeter详解 Apache JMeter 是一个开源的、100%纯Java应用程序,设计用于负载测试和性能测量。它最初是为测试Web应用程序而设计的,但后来扩展到其他测试功能。JMeter可以用来对静态和动态资源(如静态文件、Servlets、Perl脚本、Java对象、数据…...
Maven Wrapper 报错“未找到有效的 Maven 安装”
1. 检查 Maven Wrapper 配置: 确保你的项目中包含 .mvn/wrapper/maven-wrapper.properties 文件。 检查该文件中的 distributionUrl 属性,确保它指向一个有效的 Maven 发行版 URL。 2.确认 Maven Wrapper 脚本存在: 在项目根目录下&#x…...
如何通过 360 驱动大师检查自己电脑上的显卡信息
在深入探讨如何查看显卡信息之前,首先需要了解显卡的基本概念。显卡(Graphics Processing Unit, GPU),是计算机中负责处理图形输出到显示器的重要硬件。根据其集成度和性能,显卡通常被分为两类: 集成显卡&…...
C++并发:线程管控
1 线程基本管控 每个C程序都含有至少一个线程,即运行main()的线程,它由C运行时系统启动。随后程序可以发起更多线程,它们以别的函数作为入口。这些新线程连同起始线程并发运行。当main()返回时,程序就会退出;同样&…...
C++ 设计模式:策略模式(Strategy Pattern)
链接:C 设计模式 链接:C 设计模式 - 模板方法 链接:C 设计模式 - 观察者模式 策略模式(Strategy Pattern)是一种行为设计模式,它定义了一系列算法,并将每个算法封装起来,使它们可以…...
SpringBoot(Ⅱ-2)——,SpringBoot版本控制,自动装配原理补充(源码),自动导包原理补充(源码),run方法
SpringBoot的版本控制是怎么做的 starter版本控制 SpringBoot的核心父依赖,下面导入的所有starter依赖都不需要指定版本,版本默认和spring-boot-starter-parent的parent版本一致; xxxstarter内部jar包依赖的版本管理,starter自…...
爬虫的工作原理
摘要: 本文详细阐述了爬虫的工作原理,从其基本概念出发,深入探讨了爬虫的主要组成部分,包括URL管理器、网页下载器、网页解析器和数据存储模块等。同时,分析了爬虫的抓取策略,如深度优先、广度优先等&#…...
你了解DNS吗?
你了解DNS吗? 一. 介绍二. DNS的工作原理三. DNS查询流程示意图四. DNS 记录类型五. DNS的安全问题与 DNSSEC 前言 这是我在这个网站整理的笔记,有错误的地方请指出,关注我,接下来还会持续更新。 作者:神的孩子都在歌唱 一. 介绍 …...
利用JavaScript实现顺序九宫格抽奖
顺序九宫格思路: 1.先获取抽奖按钮,方便给按钮绑定点击事件2.初始化下标k0,用于表示当前选中的索引下标,后续滚动起来会一直刷新3.获取大div盒子4.获取盒子里所有div元素,充当一个数组,后续可以通过下标来访问每个小div࿰…...
音视频入门知识(四):封装篇
⭐四、封装篇 H264封装成mp4、flv等格式,那为什么需要封装? h264也能播放,但是按照帧率进行播放,可能不准 ★FLV **FLV(Flash Video)**是一种用于传输和播放视频的容器文件格式。FLV 格式广泛应用于流媒…...
idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...
(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...
AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
高频面试之3Zookeeper
高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制࿰…...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...
【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...
微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...
C++中string流知识详解和示例
一、概览与类体系 C 提供三种基于内存字符串的流,定义在 <sstream> 中: std::istringstream:输入流,从已有字符串中读取并解析。std::ostringstream:输出流,向内部缓冲区写入内容,最终取…...
