【视觉SLAM:四、相机与图像】

news2025/1/4 0:37:21

相机模型

相机模型是计算机视觉中的重要内容,用于描述真实相机如何将三维世界投影到二维图像平面。以下从多个角度介绍常见的相机模型。

针孔相机模型

针孔相机模型是最简单的相机模型,用数学公式描述从三维世界到二维图像平面的映射关系。核心公式如下: 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=dfb
    其中:
    • 𝑍 是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 =ZK1 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任务奠定了理论基础。

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

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

相关文章

Vue router router-link router-view keep-alive

Vue router router-link router-view keep-alive keep-alive 1. /:id 2 ?id

掌握 PostgreSQL 的 psql 命令行工具

title: 掌握 PostgreSQL 的 psql 命令行工具 date: 2024/12/30 updated: 2024/12/30 author: cmdragon excerpt: psql 是 PostgreSQL 关系数据库管理系统的交互式命令行工具,是数据库管理员和开发人员进行数据库管理和操作的主要接口。熟练使用 psql 工具,不仅能够提高对 …

【C++】深入理解 break 和 continue 语句

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯break 和 continue 介绍**break** 的作用**continue** 的作用注意事项 💯break 示例代码示例**执行结果****解析过程** 💯continue 示例代码示例&am…

【C++】B2064 斐波那契数列

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯题目描述输入格式输出格式输入输出样例输入输出 💯思路分析**题目本质** 💯代码实现与对比**我的代码实现**代码展示思路解析优点不足 **老师的代码…

在 Ubuntu 24.04.1 LTS | Python 3.12 环境下部署 Crypto 库

测试一些密码学方案需要用到 Crypto 库,网上教程大多针对 Windows 和 Python 3.10 或以下的环境,所以写下了这篇博文。 部署与使用 首先执行 su 输入密码进入超级用户,部署完 Python 3.12 环境后,执行以下命令进行安装&#xff…

【ArcGIS Pro/GeoScene Pro】可视化时态数据

可视化过去二十年新西兰国际旅游业的发展变化 工程数据下载 ArcGIS Pro 快速入门指南—ArcGIS Pro | 文档 添加数据 数据为中国旅客数据 转置表字段 列数据转行数据

Junit4单元测试快速上手

文章目录 POM依赖引入业务层测试代码Web层测试代码生成测试类文件 在工作中我用的最多的单元测试框架是Junit4。通常在写DAO、Service、Web层代码的时候都会进行单元测试&#xff0c;方便后续编码&#xff0c;前端甩锅。 POM依赖引入 <dependency><groupId>org.spr…

HTML——24.图片引入1

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>图片的引入</title></head><body><!--网页中引入图片&#xff1a;使用img标签&#xff0c;<img src"图片路径"/>--><!--src属性…

云计算基础实验

云计算基础实验报告 实验一 Linux环境下算法的测试 一&#xff0c; 根据基本计算思想&#xff0c;验证和求解&#xff0c;设计算法。 根据运行需要&#xff0c;自行完成&#xff08;C和Python&#xff09;环境配置。 1.1验证卡布列克常数6174 原理过程&#xff1a; 循环输…

京东供应链创新与实践:应用数据驱动的库存选品和调拨算法提升履约效率

2024 年度总结系列 2024 年 10 月&#xff0c;京东零售供应链技术团队凭借其在库存选品与调拨技术上的创新与实践&#xff0c;荣获运筹与管理学领域的国际顶级奖项 Daniel H. Wagner Prize。本文为您介绍获奖背后的供应链技术创新和落地应用。 00 摘要 在电商行业中&#x…

按照人们阅读Excel习惯来格式化BigDecimal

1、环境/问题描述 使用springboot发送邮件(附件)的方式将月度报表发送给领导查阅&#xff0c;数据是准确的&#xff0c;领导基本满意。 就是对一些数字的格式化提出了改进建议&#xff0c;比如不要让大数字自动转为科学计数法、浮点数小数点后都是0就不要带出来&#xff0c;根…

软体机器人研究报告:设计方法、材料与驱动、感知与控制

软体机器人因其出色的可变形性和高适应性受到了广泛关注&#xff0c;这些特性使其在医疗、救援、探测等复杂场景中展现出独特的优势和巨大的应用潜力。研究人员对软体机器人的设计方法、材料与驱动技术、感知与控制策略等方面进行深入研究&#xff0c;取得了一系列成果。 本文汇…

医疗数仓业务数据采集与同步

业务数据采集与同步 业务采集组件配置业务数据同步概述数据同步策略选择数据同步工具概述1.1.4 全量表数据同步DataX配置文件生成全量表数据同步脚本增量表数据同步 MySQL - Maxwell - Kafka - Flume - HDFSMaxwell配置增量表首日全量同步 业务采集组件配置 Maxwell将业务采集到…

神经网络-VggNet

2014年VggNet被推出&#xff0c;获取了ILSVRC2014比赛分类项目的第二名&#xff0c;第一名是GoogleNet&#xff0c;该网络在下节介绍&#xff0c;本节主要介绍VggNet。 VggNet可以称为是一个家族&#xff0c;根据层数的不同包括了A、A-LRN、B、C、D等网络结构&#xff0c;其中…

计算机网络 (7)物理层下面的传输媒体

一、定义与位置 物理层是计算机网络体系结构的最低层&#xff0c;它位于传输媒体&#xff08;传输介质&#xff09;之上&#xff0c;主要作用是为数据链路层提供一个原始比特流的物理连接。这里的“比特流”是指数据以一个个0或1的二进制代码形式表示。物理层并不是特指某种传输…

敏捷开发中的自动化脚手架在 HarmonyOS 的应用

文章目录 前言什么是自动化脚手架工具构建自动化脚手架实战代码项目目录结构生成功能说明 示例代码生成功能说明 主工具类入口功能说明 如何运行脚手架工具总结参考资料 前言 在敏捷开发环境中&#xff0c;快速搭建项目结构是提升开发效率的关键。然而&#xff0c;手动配置开发…

VScode 格式化代码空格记录

点击 -> “文件” -> “首选项" -> “设置” -> 按下图操作&#xff1a; 怎么格式化代码空格&#xff0c;先看下&#xff1a; 保存代码后&#xff0c;这代码自动格式化发&#xff0c;如下图&#xff1a; 你可以试试看就即可

Python编程技术

设计目的 该项目框架Scrapy可以让我们平时所学的技术整合旨在帮助学习者提高Python编程技能并熟悉基本概念&#xff1a; 1. 学习基本概念&#xff1a;介绍Python的基本概念&#xff0c;如变量、数据类型、条件语句、循环等。 2. 掌握基本编程技巧&#xff1a;教授学生如何使…

《Java核心技术 卷II》流的创建

流的创建 Collection接口中stream方法可以将任何集合转换为一个流。 用静态Stream.of转化成数组。 Stream words Stream.of(contents.split("\\PL")); of方法具有可变长参数&#xff0c;可以构建具有任意数量的流。 使用Array.stream(array,from,to)可以用数组…

ESP32-CAM开发板入门 (下载示例程序)

ESP32-CAM开发板例程使用 1、准备工作1.1、硬件准备1.2、软件准备 2、选择示例程序并录入第一步 1、准备工作 1.1、硬件准备 1.2、软件准备 Arduino IDE &#xff1a; 编程与写入&#xff08;下载地址 https://www.arduino.cc/en/software&#xff09; 安装好后将软件设置到…