相机模型的内参、外参

相机模型的内参、外参

文章目录

  • 相机模型的内参、外参
      • 1. 针孔模型、畸变模型(内参)
      • 2. 手眼标定(外参)
    • Reference

这篇笔记主要参考:slam十四讲第二版(高翔)

相机将三维世界中的坐标点(单位为米)映射到二维的像素平面(单位为像素)的过程能够使用一个几何模型来进行描述,为了简单起见这个模型我们通常使用针孔模型。同时,由于相机镜头上透镜的存在,透镜的安装不能保证绝对的准确,因此在成像的过程中还会出现畸变。因此,我们使用针孔模型和畸变模型来描述整个投影过程。

针孔模型和畸变模型能够把外部的三维点投影到相机内部的成像平面,这组参数就构成了相机的内参(intrinsics)

1. 针孔模型、畸变模型(内参)

针孔模型可以用中学学习的小孔呈现原理来进行解释,如下图所示,

Image

图中包括两个坐标系,一个是相机内部的物理成像平面坐标系 O ′ − x ′ − y ′ O^\prime-x^\prime-y^\prime Oxy,这是一个二维的坐标系,还有一个是以相机的光心为中心的相机坐标系 O − x − y − z O-x-y-z Oxyz,这是一个三维坐标系。根据小孔成像原理,现实世界中的 P P P点在经过小孔 O O O投影之后,落在物理平面 O ′ − x ′ − y ′ O^\prime-x^\prime-y^\prime Oxy上,成像点为 P ′ P^\prime P,设 P P P的坐标为 [ X , Y , Z ] T [X,Y,Z]^T [X,Y,Z]T P ′ = [ X ′ , Y ′ , Z ′ ] T P^\prime=[X^\prime,Y^\prime,Z^\prime]^T P=[X,Y,Z]T,并且设物理成像平面到小孔的距离为 f f f(焦距),那么根据三角形的相似原理,我们很容易得到如下的等式:
Z f = − X X ′ = − Y Y ′ \frac{Z}{f} = - \frac{X}{X^\prime} = - \frac{Y}{Y^\prime} fZ=XX=YY
为了让模型更符合实际,我们可以利用算法等价地把成像平面对称地放到相机的前方,和三维空间点一起放在相机坐标系的同一侧,如图所示:

Image

这样我们就可以把负号去掉了,使式子更加简洁

Z f = X X ′ = Y Y ′ X ′ = f X Z Y ′ = f Y Z \begin{align*} \frac{Z}{f} & = \frac{X}{X^\prime} = \frac{Y}{Y^\prime} \\ X^\prime & = f\frac{X}{Z} \\ Y^\prime & = f\frac{Y}{Z} \end{align*} fZXY=XX=YY=fZX=fZY

上式描述了点 P P P和它的像之间的空间关系,这里的所有单位都可以用米(m)来表示。不过在最终的相机中,我们获得的是一个个的像素,这需要我们在成像平面上进行采样和量化。为了描述传感器将感受到的光线转换成图片像素的过程,我们设在物理成像平面上固定着一个像素平面 o − u − v o-u-v ouv,如下图所示

Image

像素坐标系通常的定义方式为:原点 o o o位于图像的左上角, u u u轴和 x x x轴平行, v v v轴向下和 y y y轴平行,像素坐标系和成像平面之间相差了一个缩放和一个原点的平移。我们假设现像素平面下的坐标 P ′ = [ u , v ] T P^\prime=[u,v]^T P=[u,v]T。设像素坐标在 u u u轴上缩放了 α \alpha α倍,在 v v v轴上缩放了 β \beta β倍,同时原点移动了 [ c x , c y ] T [c_x,c_y]^T [cx,cy]T,这样 P ′ P^\prime P在成像坐标系下的坐标 [ X ′ , Y ′ ] T [X^\prime,Y^\prime]^T [X,Y]T与像素坐标系下的坐标 [ u , v ] T [u,v]^T [u,v]T具有如下的关系:
{ u = α X ′ + c x v = β Y ′ + c y \left\{ \begin{align*} u & = \alpha X^\prime + c_x \\ v & = \beta Y^\prime + c_y \end{align*} \right. {uv=αX+cx=βY+cy
代入之前的关系,有下式
{ u = α f X Z + c x v = β f Y Z + c y \left\{ \begin{align*} u & = \alpha f\frac{X}{Z} + c_x \\ v & = \beta f\frac{Y}{Z}+ c_y \end{align*} \right. uv=αfZX+cx=βfZY+cy
然后把 α f \alpha f αf合并为 f x f_x fx,把 β f \beta f βf合并为 f y f_y fy,得:
{ u = f x X Z + c x v = f y Y Z + c y \left\{ \begin{align*} u & = f_x\frac{X}{Z} + c_x \\ v & = f_y\frac{Y}{Z}+ c_y \end{align*} \right. uv=fxZX+cx=fyZY+cy
其中, f f f的单位为米, α , β \alpha, \beta α,β的单位为像素/米。再将上式写成齐次的形式
[ u v 1 ] = 1 Z [ f x 0 c x 0 f y c y 0 0 1 ] [ X Y Z ] ≜ 1 Z K P \begin{bmatrix} u \\ v \\ 1 \end{bmatrix} = \frac{1}{Z} \begin{bmatrix} f_x & 0 & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} X \\ Y \\ Z \end{bmatrix} \triangleq \frac{1}{Z}\bold{K}\bold{P} uv1 =Z1 fx000fy0cxcy1 XYZ Z1KP
然后再将 Z Z Z移到左边
Z [ u v 1 ] = [ f x 0 c x 0 f y c y 0 0 1 ] [ X Y Z ] ≜ K P Z\begin{bmatrix} u \\ v \\ 1 \end{bmatrix} = \begin{bmatrix} f_x & 0 & c_x \\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} X \\ Y \\ Z \end{bmatrix} \triangleq \bold{K}\bold{P} Z uv1 = fx000fy0cxcy1 XYZ KP
其中,我们将中间量组成的矩阵 K \bold{K} K称为相机的内参矩阵(Camera Intrinsics)。 K \bold{K} K通常认为,相机的内参在出厂之后就已经固定好了,不会在使用的过程中发生变化,有时 K \bold{K} K是由厂家提供,有时 K \bold{K} K需要自己进

有了内参矩阵 K \bold{K} K,我们就可以通过确定像素点的坐标 P u v P_{uv} Puv,来反算出点 P P P在相机坐标系中的位置 [ X , Y , Z ] T [X,Y,Z]^T [X,Y,Z]T,然后通过这个位置就可以计算出点 P P P在世界坐标系world中的坐标 P w P_w Pw了。

相机的畸变模型,这里不再介绍了,感兴趣的可以去看原书。

2. 手眼标定(外参)

相机的外参一般指的是从相机坐标系到机器人的基坐标系的齐次变换矩阵,当然这个齐次变换矩阵也可以用旋转矩阵 R \bold{R} R和平移向量来进行描述 t \bold{t} t,有下式成立
Z P u v = Z [ u v 1 ] = K ( R P w + t ) = K T P w ZP_{uv} = Z \begin{bmatrix} u \\ v \\ 1 \end{bmatrix} = \bold{K}(\bold{R}P_w + \bold{t}) = \bold{K}\bold{T}P_w ZPuv=Z uv1 =K(RPw+t)=KTPw

这个在以后的博客中再详细介绍。

Reference

[1]slam十四讲第二版(高翔)

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

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

相关文章

PDK安装及简介

目录 PDK简介 pdk安装 Standard Cell Library简介 IO Library简介 PDK简介 PDK:全称Process Design Kit,是工艺设计工具包的缩写,是制造和设计之间的沟通桥梁,是模拟电路设计的起始点。 具体来说,PDK是代工厂(FAB…

使用Docker进行Jmeter分布式搭建

大家好,随着技术的不断发展,对性能测试的要求也日益提高。在这样的背景下,如何利用 Docker 来巧妙地搭建 Jmeter 分布式成为了关键所在。现在,就让我们开启这场探索之旅,揭开其神秘的面纱。前段时间给大家分享了关于 L…

通信指挥类装备(多链路聚合设备)-应急通信指挥解决方案

现场通信指挥系统是一种功能全面的便携式音视频融合指挥通信平台,可实现现场应急救援指挥、多种通信手段融合、现场通信组网等功能,是现场指挥系统的延伸。 多链路聚合设备,是一款通信指挥类装备,具有 4G/5G,专网&…

Free RTOS中Semaphore(二值信号量)的使用介绍

目录 概述 1 使用STM32Cube 配置信号量 1.1 引子 1.2 STM32Cube中配置FreeRTOS 1.3 STM32Cube生成Project 2 cmsis_os中信号量接口函数 2.1 函数:osSemaphoreNew 2.2 函数:osSemaphoreGetName 2.3 函数:osSemaphoreAcquire 2.4 函数…

设计模式:外观模式(Facade)

设计模式:外观模式(Facade) 设计模式:外观模式(Facade)模式动机模式定义模式结构时序图模式实现在单线程环境下的测试在多线程环境下的测试模式分析优缺点适用场景应用场景模式扩展参考 设计模式&#xff1…

【Open AI】GPT-4o深夜发布:视觉、听觉跨越式升级

北京时间5月14日1点整,OpenAI 召开了首场春季发布会,CTO Mira Murati 在台上和团队用短短不到30分钟的时间,揭开了最新旗舰模型 GPT-4o 的神秘面纱,以及基于 GPT-4o 的 ChatGPT,均为免费使用。 本文内容来自OpenAI网站…

人工智能|深度学习——YOLOV8结构图

YoloV8相对于YoloV5的改进点: Replace the C3 module with the C2f module.Replace the first 6x6 Conv with 3x3 Conv in the Backbone.Delete two Convs (No.10 and No.14 in the YOLOv5 config).Replace the first 1x1 Conv with 3x3 Conv in the Bottleneck.Use…

【图神经网络——消息传递】

消息传递机制 画图先:导包:画图: 实现消息传递:例子一:例子二: 画图先: 导包: import networkx as nx import matplotlib.pyplot as plt import torch from torch_geometric.nn im…

Linux操作系统最著名的两大系列Red Hat和Debian

Linux操作系统可以根据其背后的项目或社区分为不同的系列,其中最著名的两大系列是Red Hat系列和Debian系列。 1.著名的两大系列是Red Hat和Debian Red Hat系列: Red Hat Enterprise Linux (RHEL):这是Red Hat公司推出的企业级操作系统&#…

【LAMMPS学习】十、LAMMPS辅助工具(1)

10. 辅助工具 LAMMPS 被设计为用于执行分子动力学计算的计算内核。设置和分析模拟通常需要额外的预处理和后处理步骤。此类工具的列表可以在 LAMMPS 网页上的以下链接中找到: 前/后处理 外部 LAMMPS 软件包和工具 Pizza.py 工具包 Pizza.py 的最后一个链接是桑迪…

CTFshow misc

第一题1 打开图片直接就是flag 第二题0 放入010发现文件头有png 更换后缀 获得flag 第三题1 下载之后发现是bpg后缀 用在线工具转换为png获得flag 第四题 0 把六个文件后缀都改为png即可获得flag

Visual Studio Code 扩展程序Text Edits

需求 比如把Scarzombie_Monster全部转换为大写或者小写 安装 Text Edits 直接搜索安装即可 使用 假如要把Scarzombie_Monster全部转为大写,选中右键选中 To Upper Case或者直接快捷键shiftAltU即可

DHCP动态主机配置协议

DHCP概述 DHCP是什么 DHCP:Dynamic Host Configuration Protocol:动态主机配置协议DHCP是一种集中对用户IP地址进行动态管理和配置的技术 DHCP作用: 作用:实现IP地址的动态分配和集中管理优势:避免手工配置IP地址&…

微信小程序的自定义组件

一、创建自定义组件 (1)定义: 把页面重复的代码部分封装成为一个自定义组件,以便在不同的页面中重复使用,有助于代码的维护。 (2)组成: 自定义组件的组成:json文件&a…

Elasticsearch 搜索引擎实现对文档内容进行快速检索(保姆级教程)

本文主要讲解ES如何从提取文档中提取内容(word、pdf、txt、excel等文件类型),实现快速检索文档内容实现。 特别说明一下,为什么用7.10.0版本,因为在项目中除了精确匹配的要求,也会有模糊查询(关…

Android 异常开机半屏重启代码分析

Android 的稳定性是 Android 性能的一个重要指标,它也是 App 质量构建体系中最基本和最关键的一环;如果应用经常崩溃,或者关键功能不可用,那显然会对我们的留存产生重大影响所以为了保障应用的稳定性,我们首先应该树立…

Zynq UltraScale+ RFSoC 配置存储器器件

Zynq UltraScale RFSoC 配置存储器器件 下表所示闪存器件支持通过 Vivado 软件对 Zynq UltraScale RFSoC 器件执行擦除、空白检查、编程和验证等配置操 作。 本附录中的表格所列赛灵思系列非易失性存储器将不断保持更新 , 并支持通过 Vivado 软件对其中所列…

【C语言】6.C语言VS实用调试技巧(2)

文章目录 6.调试举例17.调试举例28.调试举例3&#xff1a;数组9.编程常⻅错误归类9.1 编译型错误9.2 链接型错误9.3 运⾏时错误 – 6.调试举例1 求 1!2!3!4!…10! 的和。 int main() {int n 0;int i 0;int ret 1;int sum 0;for (n 1; n < 3; n) {for (i 1; i < …

knife4j案例

1.导入 <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId> </dependency>2.在配置类中加入 knife4j 相关配置并设置静态资源映射&#xff08;否则接口文档页面无法访问&#xff…

就这?轻轻松松在RK356X Android11适配ML307R Cat.1模组

开源鸿蒙硬件方案领跑者 触觉智能 Industio 本文基于IDO-SXB3568主板&#xff0c;介绍Android11平台上适配中移物联ML307R Cat.1 4G模组的方法。该方法适用于触觉所有RK356X的主板。 IDO-SXB3568是触觉智能推出的RK3568行业主板&#xff0c;预计6月上旬正式上架售卖。该行业主…