相机内参坐标系及其在MATLAB 中的表示

一、概述

本文主要介绍相机针孔模型的基本原理,包括相机坐标系、成像坐标系以及像素坐标系之间的转换关系——内参矩阵(Camera intrinsics),在此基础上介绍该矩阵在MATLAB中的表示以及与其他相关软件中的表示的异同,最后给出相关MATLAB中的相关类、函数的表示和使用方法。

二、相机模型

2.1 针孔模型

针孔相机模型是用于表示相机将三维坐标转化为平面坐标的最常用的模型,数学物理原理非常简单,各种相关书籍和文章中也多有详细的介绍,借用MATLAB帮助(《What Is Camera Calibration?》)中的图片,可以表示如下。
在这里插入图片描述
从世界坐标系转换到相机坐标系有一个旋转和平移叠加的过程,可以用一个正交矩阵表示,又称为相机的外参矩阵(Camera Extrinsics),该矩阵的参数与相机位姿和世界坐标系的定义有关,而与相机本身的参数(焦距、畸变等)无关,因此本文不作细述,这里主要讨论从相机坐标系下的物体点位置到成像和像素坐标系的转换关系。

2.2 相机坐标系到成像坐标系

从三维空间的点 P = ( X , Y , Z ) P=(X,Y,Z) P=(X,Y,Z)变换到成像平面的过程也称射影变换。该点到成像平面的距离为 f f f,将点P投影到成像坐标系(平面),利用相似三角形原理,可得:
{ x = f X Z y = f Y Z z = f \left\{ \begin{array}{l} x = f\frac{X}{Z} \\ y = f\frac{Y}{Z} \\ z = f \end{array} \right. x=fZXy=fZYz=f
其中 ( x , y ) (x,y) (x,y)为P点在成像坐标系下的坐标点。

2.3 成像平面坐标系到像素坐标系

成像坐标系的中心点通常在成像平面中心,而像素坐标系则通常在图像左上角,因此需要作平移,同时,像素坐标系和成像坐标系的下单位不同,因此还有缩放。综合如下:

将坐标 ( x , y ) (x,y) (x,y)水平缩放α倍,在竖直方向缩放β倍,同时平移 ( c x , c y ) (c_x,c_y) (cx,cy),可得对应的像素坐标 ( μ , ν ) (μ,ν) (μ,ν)
u = α ⋅ x + c x v = β ⋅ y + c y \begin{array}{c} u = \alpha\cdot x+ c_x \\ v = \beta \cdot y + c_y \end{array} u=αx+cxv=βy+cy
从而得到
{ u = f x X Z + c x v = f y Y Z + c y \left\{\begin{array}{c} u = f_x\frac{X}{Z}+ c_x \\ v = f_y\frac{Y}{Z} + c_y \end{array}\right. {u=fxZX+cxv=fyZY+cy
其中, f x = α ⋅ f , f y = β ⋅ f f_x = \alpha \cdot f,f_y = \beta \cdot f fx=αf,fy=βf

写成矩阵形式:
[ μ ν 1 ] = 1 Z [ f x 0 c x 0 f y c y 0 0 1 ] [ X Y Z ] \left[\begin{array}{c}\mu\\\nu\\1\end{array}\right] = \frac{1}{Z}\left[ \begin{array}{ccc}f_x&0&c_x\\0&f_y&c_y\\0&0&1\end{array}\right]\left[\begin{array}{c}X\\Y\\Z\end{array}\right] μν1=Z1fx000fy0cxcy1XYZ
把以上矩阵称为内参矩阵。

三、相机模型在MTLAB中的表示

3.1 内参矩阵

MATLAB中内参矩阵表示如下:
在这里插入图片描述
首先可以看出,形式上是我们常规表示的转置形式,这是因为常规表示中变幻时是由内参矩阵左乘待变换点,也是我们比较习惯的形式。但是在MATLAB中使用的是坐标点向量左乘矩阵的形式,个人理解是因为在MALTAB中表示或初始化坐标向量时更习惯用类似aVec = [1 2 3]这样的表示形式而不是aVec = [1 2 3]’。
其次增加了一个系数 s s s,表示水平方向的歪斜度。相关参数解释以及 s s s f x f_x fx的关系如下:
在这里插入图片描述

3.2 关于畸变

实际相机并没有上述那么理想,实际在成像过程中会出现畸变,严格来讲需要考虑,但本文不涉及,这里不再细述。
在这里插入图片描述

3.3 函数与类介绍

3.3.1 类 cameraIntrinsics

先初始化相机参数:

    focalLength    = [800, 800];  % fx和fy
    principalPoint = [320, 240];  % cx和cy
    imageSize      = [480, 640];  % 图像大小

然后用构造函数实例化一个相机内参对象:

    intrinsics = cameraIntrinsics(focalLength,principalPoint,imageSize)

intrinsics =
cameraIntrinsics with properties:

         FocalLength: [800 800]
      PrincipalPoint: [320 240]
           ImageSize: [480 640]
    RadialDistortion: [0 0]
TangentialDistortion: [0 0]
                Skew: 0
     IntrinsicMatrix: [3x3 double]

这里有畸变以及弯斜的参数,但是这里没有参数,默认为0。

3.3.2 其他相关

相关类:monoCamera、cameraParameters等。后续进一步介绍。

参考

MATLAB官网《What Is Camera Calibration?》:https://www.mathworks.com/help/vision/ug/camera-calibration.html)
《相机模型与相机标定原理》:https://www.cnblogs.com/narjaja/p/9486407.html

感谢阅读

  • 5
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
MATLAB相机内参可以使用相机内参矩阵来表示相机内参矩阵包括焦距、主点坐标和像素的尺度因子等参数。在相机标定过程可以通过使用已知的校准物体来计算这些参数。 在MATLAB,可以通过使用相机标定工具箱来进行相机内参的计算。这个工具箱提供了一系列函数和类来进行相机标定和处理相机内参。具体的使用方法可以参考MATLAB官方文档的《What Is Camera Calibration?》(https://www.mathworks.com/help/vision/ug/camera-calibration.html)的相关内容。 相机内参的计算过程主要涉及到相机坐标系、成像坐标系和像素坐标系之间的转换关系。相机坐标系到成像坐标系的转换可以通过相机的外参矩阵(Camera Extrinsics)来实现。而成像坐标系到像素坐标系的转换则可以通过相机内参矩阵(Camera Intrinsics)来实现。 总之,MATLAB相机内参可以通过相机标定工具箱来计算,具体的计算过程和使用方法可以参考MATLAB官方文档的相关内容。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [相机内参坐标系及其在MATLAB 表示](https://blog.csdn.net/zhoucoolqi/article/details/105335730)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值