相机模型的内参、外参

相机模型的内参、外参

文章目录

  • 相机模型的内参、外参
      • 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,一经查实,立即删除!

相关文章

JVM线程和内存溢出问题排查思路

一、工具 Arthas:Arthas 是一款能在线查看应用 load、内存、gc、线程 等状态信息,并对业务问题进行诊断的工具,支持 JDK 6 和 Linux/Mac/Windows 系统。 jstack:jstack是JVM自带的Java堆栈跟踪工具,它用于打印出给定…

PDK安装及简介

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

使用Docker进行Jmeter分布式搭建

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

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

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

Golang开发:切片的两种创建方式及区别

在Go语言中,var和make都可以用来初始化切片(slice),但它们之间有一些重要的区别。 初始化方式: 使用var关键字声明的切片会被初始化为nil,即没有底层数组,长度为0,容量为0。使用make…

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 函数…

hashmap数据结构为什么是链表

HashMap 数据结构中,链表通常用于解决哈希冲突。当不同的键映射到相同的哈希桶时,就会发生哈希冲突。链表是一种简单而有效的解决方法。 在 JDK 8 之前的 HashMap 实现中,当发生哈希冲突时,冲突的元素会被存储在同一个哈希桶中&a…

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

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

C++STL(queue和list)

3.6 queue 容器 3.6.1 queue 基本概念 概念:Queue是一种先进先出(First In First Out,FIFO)的数据结构,它有两个出口 队列容器允许从一端新增元素,从另一端移除元素队列中只有队头和队尾才可以被外界使用,因此队列不允许有遍历…

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

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

大数据面试 --- 六

1、Flink中的三种时间,哪一个性能会比较好 在Flink中主要分成三种时间: 事件时间(Event Time)注入时间(Process Time)、摄入时间(Ingestion Time) 事件时间指的是事件产生的时间…

课时126:awk实践_进阶知识_内置函数1

1.2.5 内置函数1 学习目标 这一节,我们从 基础知识、简单实践、小结 三个方面来学习。 基础知识 简介 在awk内部预制了一些函数,借助于这些函数,我们可以实现相关场景的快速操作。这些内置函数的常见类型有:数值类内置函数int…

人工智能|深度学习——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即可

使用yolov8 训练coco 和自己的关键点识别数据集的参考

使用yolov8 训练关键点配置理解 1. coco-pose.yaml 修改关键参数kpt_shape: [17, 3]flip_idx: [0, 2, 1, 4, 3, 6, 5, 8, 7, 10, 9, 12, 11, 14, 13, 16, 15]2. yolov8n-pose.yaml 修改kpt_shape3. 编写 train文件4.一个封装的推理代码1. coco-pose.yaml 修改关键参数 kpt_sha…

DHCP动态主机配置协议

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