相机模型的内参、外参

相机模型的内参、外参

文章目录

  • 相机模型的内参、外参
      • 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.rhkb.cn/news/328042.html

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

相关文章

架构设计入门(Redis架构模式分析)

目录 架构为啥要设计Redis 支持的四种架构模式单机模式性能分析优点缺点 主从复制(读写分离)结构性能分析优点缺点适用场景 哨兵模式结构优点缺点应用场景 集群模式可用性和可扩展性分析单机模式主从模式哨兵模式集群模式 总结 本文主要以 Redis 为例&am…

记一次跨域问题

线上跨域问题,在自己配置确认没问题下,要及时找运维看看是不是nginx配置问题。 两个方面: 项目代码 nginx配置 SpringBoot 解决跨域问题的 5 种方案! SpringBoot解决CORS跨域问题 SpringBoot-实现CORS跨域原理及解决方案

【linux-IMX6ULL-定时器-GPT-串口配置流程-思路】

目录 1. 定时器配置流程1.1 EPIT定时器简介1.2 定时器1(epit1)的配置流程1.3 配置代码(寄存器版本)1.4 定时器-配合按键消抖1.4.1 实现原理1.4.2 代码实现(寄存器版) 2. GPT定时器实现高精度延时2.1 延时原理分析2.2 代码实现 3. UART串口配置流程3.1 UA…

WebRTC 的核心:RTCPeerConnection

WebRTC 的核心:RTCPeerConnection WebRTC 的核心:RTCPeerConnection创建 RTCPeerConnection 对象RTCPeerConnection 与本地音视频数据绑定媒体协商ICE什么是 Candidate?收集 Candidate交换 Candidate尝试连接 SDP 与 Candidate 消息的互换远端…

OpenAI GPT-4o - 介绍

本文翻译整理自: Hello GPT-4o https://openai.com/index/hello-gpt-4o/ 文章目录 一、关于 GPT-4o二、模型能力三、能力探索四、模型评估1、文本评价2、音频 ASR 性能3、音频翻译性能4、M3Exam 零样本结果5、视觉理解评估6、语言 tokenization 六、模型安全性和局限…

相机模型,坐标变换,畸变

小孔成像模型 墨子就记录了小孔成像是倒立的。这从几何光学的角度是很好理解的:光沿直线传播,上方和下方的光线交叉,导致在成像平面位置互换。 小孔的大小有什么影响? 小孔越大,进光量变大了,但是成像平…

Stable Diffusion入门使用技巧及个人实例分享--大模型及lora篇

大家好,近期使用Stable Diffusion比较多,积累整理了一些内容,得空分享给大家。如果你近期正好在关注AI绘画领域,可以看看哦。 本文比较适合已经解决了安装问题,(没有安装的在文末领取) 在寻找合…

智能防疫电梯模拟控制系统设计-设计说明书

设计摘要: 本设计是基于单片机的智能防疫电梯模拟控制系统,主要实现了多项功能。首先,系统进行无接触测温,如果温度正常则可以启动电梯运行,如果温度异常则电梯会报警提示有乘客体温异常,电梯不会运行。其…

04、Kafka集群安装

1、准备工作 首先准备一台虚拟机,centos7系统,先在一台上配置安装后,最后克隆成多台机器。 1.1 安装JDK (1)下载JDK,上传到 /root/software 路径 下载地址:https://www.oracle.com/cn/java/…

Node.js 学习笔记 express框架

express express 使用express下载express 初体验 express 路由什么是路由1路由的使用验证的方法 2获取请求报文参数3获取路由参数4响应设置响应报文 express 中间件5中间件全局中间件路由中间件 6静态资源中间件注意事项案例 7请求体数据8防盗链实现防盗链 9路由模块化router E…

【解决】Unity Build 应用程序运行即崩溃问题

开发平台:Unity 2021.3.7f1c1   一、问题描述 编辑器 Build 工程结束,但控制台 未显示 Build completed with a result of Succeeded [时间长度] 信息。该情况下打包流程正常,但应用程序包打开即崩溃。   二、问题测试记录 测试1&#xf…

CSS-flex布局

目录 flex布局组成 (flexible box弹性布局) display属性值:flex justify-content (主轴对齐方式) flex-start flex-end ​编辑 flex-center space-between 侧轴对齐方式 stretch center flex-end flex-direction (修改…

【C语言】4.C语言数组(1)

文章目录 1. 数组的概念2. 一维数组的创建和初始化2.1 数组创建2.2 数组的初始化2.3 数组的类型 3. 一维数组的使用3.1 数组下标3.2 数组元素的打印3.3 数组的输⼊ 4. 一维数组在内存中的存储5. sizeof计算数组元素个数 1. 数组的概念 数组是一组相同类型元素的集合。 数组分…

我和jetson-Nano的故事(10)——安装OpenCV3.2.0

1. 仓库地址 opencv https://opencv.org/releases/page/6/opencv_contrib https://github.com/opencv/opencv_contrib/tree/3.2.0 2. cmake-gui安装 安装指令 sudo apt-get install cmake-qt-gui如果安装过程中入到下面的问题 可以按照以下方法解决 sudo apt --fix-broke…

BakedSDF: Meshing Neural SDFs for Real-Time View Synthesis 论文阅读

(水一篇博客) 项目主页 BakedSDF: Meshing Neural SDFs for Real-Time View Synthesis 作者介绍 是 Mildenhall 和 Barron 参与的工作(都是谷歌的),同时一作是 Lipman 的学生,VolSDF 的一作。本文引用…

旧手机-基于Termux配置服务器(不用拿去换钢盆了)

Hi,大家好,我是抢老婆酸奶的小肥仔。 大家用手机这么多年了,手上或多或少都有一两个被替换下来的旧手机,也不用拿去换啥钢盆了,使用Termux可以将旧手机改造成一个服务器。 不多说,直接开干。 1、安装app…

基于springboot+vue+Mysql的在线答疑系统

开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:…

经纬恒润助力AR-HUD市场发展,国产供应商共筑行业新篇章

根据盖世汽车研究院数据显示,1-2月经纬恒润AR-HUD出货量已达到国产供应商前五。未来,经纬恒润将持续努力,推动AR-HUD发展,共筑行业新篇章! 了解更多: 请致电 010-64840808转6115或发送邮件至market_depthi…

MySQL创建索引报错 Specified key was too long;max key length is 1000 bytes.

MySQL对创建索引的大小有限制,一般索引键最大长度总和不能超过1000个字节。 问题描述 MySQL创建索引时报错 Specified key was too long;max key length is 1000 bytes. 解决办法 (1) 修改存储引擎 InnoDB的索引字段长度限制大于MyISAM,可以尝试改成…

【面试必看】MySQL部分

MySQL 1. 基础 1. 什么是关系型数据库? 一种建立在关系模型的基础上的数据库。关系模型表明了数据库中所存储的数据之间的联系(一对一、一对多、多对多)。各种表中(比如用户表),表中的每一行就存放着一条…