【视觉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=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任务奠定了理论基础。

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

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

相关文章

数据分析思维(六):分析方法——相关分析方法

数据分析并非只是简单的数据分析工具三板斧——Excel、SQL、Python,更重要的是数据分析思维。没有数据分析思维和业务知识,就算拿到一堆数据,也不知道如何下手。 推荐书本《数据分析思维——分析方法和业务知识》,本文内容就是提取…

小程序中引入echarts(保姆级教程)

hello hello~ ,这里是 code袁~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹 🦁作者简介:一名喜欢分享和记录学习的在校大学生…

【SQLi_Labs】Basic Challenges

什么是人生?人生就是永不休止的奋斗! Less-1 尝试添加’注入,发现报错 这里我们就可以直接发现报错的地方,直接将后面注释,然后使用 1’ order by 3%23 //得到列数为3 //这里用-1是为了查询一个不存在的id,好让第一…

基于JAVA+SpringBoot+Vue的校园二手书交易平台

基于JAVASpringBootVue的校园二手书交易平台 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末附源码下载链接🍅 …

快速掌握Elasticsearch检索之二:滚动查询(scrool)获取全量数据(golang)

Elasticsearch8.17.0在mac上的安装 Kibana8.17.0在mac上的安装 Elasticsearch检索方案之一:使用fromsize实现分页 1、滚动查询的使用场景 滚动查询区别于上一篇文章介绍的使用from、size分页检索,最大的特点是,它能够检索超过10000条外的…

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

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

高效使用AI完成编程项目任务的指南:从需求分析到功能实现

随着人工智能工具的普及,即便是零编程基础或基础薄弱的用户,也可以借助AI完成许多技术任务。然而,要高效地使用AI完成编程任务,关键在于如何清晰表达需求,并逐步引导AI实现目标。 在本文中,我们将通过开发…

算法每日双题精讲 —— 滑动窗口(水果成篮,找到字符串中所有字母异位词)

🌟快来参与讨论💬,点赞👍、收藏⭐、分享📤,共创活力社区。 🌟 别再犹豫了!快来订阅我们的算法每日双题精讲专栏,一起踏上算法学习的精彩之旅吧!💪…

基于Qt事件机制中的定时器事件的闹钟设计

目标 代码 pro文件 QT core gui texttospeechgreaterThan(QT_MAJOR_VERSION, 4): QT widgetsCONFIG c11# The following define makes your compiler emit warnings if you use # any Qt feature that has been marked deprecated (the exact warnings # depend on …

后台管理系统DEMO

该项目后端使用SpringBootMyBatisPlusJWT,前端使用Vue3Vite2TSPiniaAxiosElementPlus等简单技术栈,实现了一个简约精致版的后台管理系统,包含非常基础的rbac权限功能,可以增删改查角色、用户、权限,角色添加权限、添加…

数据结构之线性表之链表(附加一个考研题)

链表的定义 链表的结构: 单链表-初始化 代码实现: 单链表-头插法 代码实现: 这里我给大家分析一下 我们每创建一个新的节点都要插在头节点的后面,我们一定要注意顺序 一定要先让新节点指向头节点指向的下一个节点,…

Python爬取城市天气信息,并存储到csv文件中

1.爬取的网址为:天气网 (weather.com.cn) 2.需要建立Weather.txt文件,并在里面加入如下形式的字段: 101120701济宁 101010100北京 3.代码运行后,在命令行输入Weather.txt文件中添加过的城市,如:济宁。 …

工厂+策略模式之最佳实践(疾病报卡维护模块API设计)

目录 💻业务场景 🔧应用技术 ⚙概要流程 ❗开发注意 服务类上标注了 自定义注解 却无法直接利用getDeclaredAnnotation 获取 *Spring代理机制 代理机制的工作原理 代理的工作机制 代理的使用场景 已获取EmrXXXServiceImpl 的Class,…

【智行安全】基于Synaptics SL1680的AI疲劳驾驶检测方案

随著车载技术的快速进步,驾驶安全越来越受到重视,而疲劳驾驶是造成交通事故的重要原因之一。传统的驾驶监控技术因精度不足或反应迟缓,无法满足实时监测需求。因此,结合人工智能技术的疲劳驾驶检测系统成为行业新方向,…

Go-知识 注释

Go-知识 注释 行注释块注释包注释结构体&接口注释函数&方法注释废弃注释文档 在 go 语言中注释有两种,行注释和块注释 行注释 使用双斜线 // 开始,一般后面紧跟一个空格。行注释是Go语言中最常见的注释形式,在标准包中,…

2025年阿里云认证改版新消息!2025年阿里云认证考试内容有变!

阿里云认证已经确定在2025年要进行大改,这次改动幅度会比2023年改动更大,2023年主要改变是在考试题型上的变化,这次则主要是考试内容的变化了! 2023年阿里云ACP认证考试的改版变化主要有: (一&#xff09…

ArrayList 和LinkedList的区别比较

前言 ‌ArrayList和LinkedList的主要区别在于它们的底层数据结构、性能特点以及适用场景。‌ArrayList和LinkedList从名字分析,他们一个是Array(动态数组)的数据结构,一个是Linked(链表)的数据结构&#x…

STM32-笔记22-sg90舵机

一、接线 二、实验实现 动手让 SG90 每秒转动一下,0 -> 20 -> 40 -> 100 -> 180 如此循环。 舵机接A6 复制18-呼吸灯,重命名24-sg90舵机 把PWM重命名sg90 打开项目文件 在魔术棒和品上把PWM都去掉,加载sg90文件夹 加载之后…

QT集成intel RealSense 双目摄像头

最近一个小项目,用到了双目相机,选用了Intel的RealSense双目相机。功能很简单,就是识别某一个物体,然后对对这个物体进行操作。具体功能随后再说,这里只介绍QT如何集成IntelRealSense相机,就是下面这个。 首…

前端小案例——520表白信封

前言:我们在学习完了HTML和CSS之后,就会想着使用这两个东西去做一些小案例,不过又没有什么好的案例让我们去练手,本篇文章就提供里一个案例——520表白信封 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨想要了解更多内容可以访问我的主…