相机标定(一)-原理及内参、外参

相机标定(一)-原理及内参、外参在图像测量过程以及机器视觉应用中,为确定空间物体表面某点的三维几何位置与其在图像中对应点之间的相互关系,必须建立相机成像的几何模型,这些几何模型参数就是相机参数。在大多数条件下这些参数必须通过实验与计算才能得到,这个求解参数的过程就称之为相机标定(或摄像机标定)。无论是在图像测量或者机器视觉应用中,相机参数的标定都是非常关键的环节,其标定结果的精度及算法的稳定性直接影响相机工作产生结果的准确性。…

大家好,又见面了,我是你们的朋友全栈君。

>>>文章索引<<<

相机标定(一)-原理及内参、外参
相机标定(二)-畸变校正,张正友标定法
相机标定(三)-相机成像模型


在图像测量过程以及机器视觉应用中,为确定空间物体表面某点的三维几何位置与其在图像中对应点之间的相互关系,必须建立相机成像的几何模型,这些几何模型参数就是相机参数。在大多数条件下这些参数必须通过实验与计算才能得到,这个求解参数的过程就称之为相机标定(或摄像机标定)。无论是在图像测量或者机器视觉应用中,相机参数的标定都是非常关键的环节,其标定结果的精度及算法的稳定性直接影响相机工作产生结果的准确性。因此,做好相机标定是做好后续工作的前提,提高标定精度是科研工作的重点所在。

1 坐标系基础

理解四个坐标系是进行相机标定的基础,它们是:

  • 图像像素坐标系
  • 图像物理坐标系
  • 相机坐标系
  • 世界坐标系

1.1 图像像素坐标系、图像物理坐标系

在这里插入图片描述

  • 图像像素坐标系:是一个二维直角坐标系,反映了相机CCD芯片中像素的排列情况。其原点 O O O位于图像的左上角, u u u v v v坐标轴分别余图像的两条边重合。像素坐标为离散值(0,1,2,…),以像素(pixel)为单位。
  • 图像物理坐标系:为了将图像与物理空间相关联,需要将图像转换到物理坐标系下。原点 O O O位于图像中心(理想状态下),是相机光轴与像平面的交点(称为主点)。 X X X Y Y Y坐标轴分别与 u u u v v v轴平行。两坐标系实为平移关系,平移量为 ( u 0 , v 0 ) (u_0,v_0) (u0,v0)

假设相机感光器件中单个像素的物理尺寸为 d X × d Y dX \times dY dX×dY,有:

{ u = x d X + u 0 v = y d Y + v 0 (1) \begin{cases} u=\frac{x}{dX}+u_0 \\ v=\frac{y}{dY}+v_0 \end{cases} \tag{1} {
u=dXx+u0v=dYy+v0
(1)

把上式写成齐次形式,有:

[ u v 1 ] = [ 1 d X 0 u 0 0 1 d Y v 0 0 0 1 ] [ x y 1 ] (2) \begin{bmatrix} u \\ v \\ 1 \end{bmatrix} = \begin{bmatrix} \frac{1}{dX} & 0 & u_0 \\ 0 & \frac{1}{dY} & v_0 \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \\ 1 \end{bmatrix} \tag{2} uv1=dX1000dY10u0v01xy1(2)

公式(2)完成了图像物理坐标系图像像素坐标系的转换。

1.2 相机坐标系

相机坐标系(camera coordinate) ( X c , Y c , Z c ) (X_c,Y_c,Z_c) (Xc,Yc,Zc),也是一个三维直角坐标系,原点位于镜头光心处, X c X_c Xc Y c Y_c Yc轴分别与像面的两边平行,z轴为镜头光轴,与像平面垂直。

在这里插入图片描述

P ( X c , Y c , Z c ) P(X_c,Y_c,Zc) P(Xc,Yc,Zc)为空间中任意一点,其通过投影中心的光线投影到图像平面上,在图像物理空间的投影点为 p ( x , y ) p(x,y) p(x,y),扩展到相机坐标系下其坐标为 ( x , y , f ) (x,y,f) (x,y,f)。根据相似三角形原理,有:

Z c f = X c x = Y c y ⇒ { x = f X c Z c y = f Y c Z c (3) \frac{Z_c}{f}=\frac{X_c}{x}=\frac{Y_c}{y} \Rightarrow \begin{cases} x=f\frac{X_c}{Z_c} \\ y=f\frac{Y_c}{Z_c} \end{cases} \tag{3} fZc=xXc=yYc{
x=fZcXcy=fZcYc
(3)

转为齐次形式为:

Z c [ x y 1 ] = [ f 0 0 0 0 f 0 0 0 0 1 0 ] [ X c Y c Z c 1 ] (4) Z_c \begin{bmatrix} x \\ y \\ 1 \end{bmatrix}= \begin{bmatrix} f & 0 & 0 & 0\\ 0 & f & 0 & 0\\ 0 & 0 & 1 & 0 \end{bmatrix} \begin{bmatrix} X_c \\ Y_c \\ Z_c \\ 1 \end{bmatrix} \tag{4} Zcxy1=f000f0001000XcYcZc1(4)

公式(4)完成了相机坐标系图像物理坐标系的转换。

1.3 世界坐标系

世界坐标系(world coordinate) ( X w , Y w , Z w ) (X_w,Y_w,Z_w) (Xw,Yw,Zw),也称为测量坐标系、参考坐标系,是一个三维直角坐标系,以其为基准可以描述相机和待测物体的空间位置。世界坐标系的位置可以根据实际情况自由确定。

在这里插入图片描述

世界坐标系到相机坐标系的变换,实际上就是一个刚体变换,可以由旋转矩阵 R R R和平移矢量 t t t来表示。设 ( X w , Y w , Z w ) T (X_w,Y_w,Z_w)^T (Xw,Yw,Zw)T表示世界坐标系中的点, ( X c , Y c , Z c ) T (X_c,Y_c,Z_c)^T (Xc,Yc,Zc)T表示相机坐标系中的点,则它们之间的转换可由下式表示:

[ X c Y c Z c ] = R [ X w Y w Z w ] + t (5) \begin{bmatrix} X_c \\ Y_c \\ Z_c \end{bmatrix}= R \begin{bmatrix} X_w \\ Y_w \\ Z_w \end{bmatrix} +t \tag{5} XcYcZc=RXwYwZw+t(5)

即:

[ X c Y c Z c 1 ] = [ R 3 × 3 t 3 × 1 0 1 × 3 1 1 × 1 ] [ X w Y w Z w 1 ] (6) \begin{bmatrix} X_c \\ Y_c \\ Z_c \\ 1 \end{bmatrix}= \begin{bmatrix} R_{3\times3} & t_{3\times1}\\ 0_{1\times3} & 1_{1\times1} \end{bmatrix} \begin{bmatrix} X_w \\ Y_w \\ Z_w \\ 1 \end{bmatrix} \tag{6} XcYcZc1=[R3×301×3t3×111×1]XwYwZw1(6)

公式(6)完成了世界坐标系相机坐标系的转换。

1.4 世界坐标系到像素坐标系

联立上面的(2)、(4)、(6)式,可以得到世界坐标系与像素坐标系之间的转换关系,有:

Z c [ u v 1 ] = [ 1 d X 0 u 0 0 1 d Y v 0 0 0 1 ] [ f 0 0 0 0 f 0 0 0 0 1 0 ] [ R t 0 T 1 ] [ X w Y w Z w 1 ] = M 1 M 2 [ X w Y w Z w 1 ] = M [ X w Y w Z w 1 ] (7) \begin{aligned} Z_c \begin{bmatrix} u \\ v \\ 1 \end{bmatrix} &= \begin{bmatrix} \frac{1}{dX} & 0 & u_0 \\ 0 & \frac{1}{dY} & v_0 \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} f & 0 & 0 & 0\\ 0 & f & 0 & 0\\ 0 & 0 & 1 & 0 \end{bmatrix} \begin{bmatrix} R & t\\ 0^T & 1 \end{bmatrix} \begin{bmatrix} X_w \\ Y_w \\ Z_w \\ 1 \end{bmatrix} \\ &=M_1M_2 \begin{bmatrix} X_w \\ Y_w \\ Z_w \\ 1 \end{bmatrix} \\ &=M \begin{bmatrix} X_w \\ Y_w \\ Z_w \\ 1 \end{bmatrix} \end{aligned} \tag{7} Zcuv1=dX1000dY10u0v01f000f0001000[R0Tt1]XwYwZw1=M1M2XwYwZw1=MXwYwZw1(7)

M 1 = [ 1 d X 0 u 0 0 1 d Y v 0 0 0 1 ] [ f 0 0 0 0 f 0 0 0 0 1 0 ] = [ f x 0 u 0 0 0 f y v 0 0 0 0 1 0 ] (8) M_1= \begin{bmatrix} \frac{1}{dX} & 0 & u_0 \\ 0 & \frac{1}{dY} & v_0 \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} f & 0 & 0 & 0\\ 0 & f & 0 & 0\\ 0 & 0 & 1 & 0 \end{bmatrix}= \begin{bmatrix} f_x & 0 & u_0 & 0 \\ 0 & f_y & v_0 & 0 \\ 0 & 0 & 1 & 0 \end{bmatrix} \tag{8} M1=dX1000dY10u0v01f000f0001000=fx000fy0u0v01000(8)

M 2 = [ R t 0 T 1 ] (9) M_2= \begin{bmatrix} R & t\\ 0^T & 1 \end{bmatrix} \tag{9} M2=[R0Tt1](9)

其中:

  • M 1 M_1 M1称为相机的内部参数矩阵
  • M 2 M_2 M2称为相机的外部参数矩阵
  • M M M称为投影矩阵
  • f x f_x fx f y f_y fy分别为相机在x、y轴方向上的归一化焦距,单位为像素,具体解释可以参考这里
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/140391.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • EPPlus使用

    EPPlus使用看看我公式计算excel中离不开各种各样的公式计算,在Epplus中运用公式有两种方式,你都可以尝试一下:worksheet.Cells[“D2:D5″].Formula=”B2*C2”;//这是乘法的公式,意思是第二列乘以第三列的值赋值给第四列,这种方法比较简单明了worksheet.Cells[6,2,6,4].Formula=string.Format(“SUBT…

    2022年6月16日
    51
  • mysql联合索引有什么好处_联合索引和单个索引

    mysql联合索引有什么好处_联合索引和单个索引B树、联合索引、性能分析

    2025年9月7日
    6
  • 【带你入门】java网络编程

    【带你入门】java网络编程网络编程网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编程的大门而放弃了对于该部分技术的学习。在学习网络编程以前,很多初学者可能觉得网络编程是比较复杂的系统工程,需要了解很多和网络相关的基础知识,其实这些都不是很必需的。首先来问一个问题:你会打手机吗?很多人可能说肯定会啊,不就是按按电话号码,拨打电话嘛,很简单的事情啊!其实初学者如果入门网

    2022年6月12日
    42
  • matlab 稀疏矩阵 乘法,Matlab 矩阵运算[通俗易懂]

    matlab 稀疏矩阵 乘法,Matlab 矩阵运算[通俗易懂]Copyright2008说明:这一段时间用Matlab做了LDPC码的性能仿真,过程中涉及了大量的矩阵运算,本文记录了Matlab中矩阵的相关知识,特别的说明了稀疏矩阵和有限域中的矩阵。Matlab的运算是在矩阵意义下进行的,这里所提到的是狭义上的矩阵,即通常意义上的矩阵。目录内容第一部分:矩阵基本知识(只作基本介绍,详细说明请参考Matlab帮助文档)矩阵是进行数据处理和运算的基本元素。在M…

    2022年6月25日
    46
  • Docker安装RabbitMQ并安装延时队列插件

    Docker安装RabbitMQ并安装延时队列插件一、RabbitMQ简介RabbitMQ是由erlang语言开发,基于AMQP(AdvancedMessageQueue高级消息队列协议)协议实现的消息队列,它是一种应用程序之间的通信方法,消息队列在分布式系统开发中应用非常广泛。二、docker安装RabbitMQ1、搜索镜像dockersearchrabbitmq2、拉取并运行容器dockerrun-dit–namerabbitmq-eRABBITMQ_DEFAULT_USER=guest-eR

    2022年5月10日
    95
  • 接口测试简介以及接口测试用例设计思路

    接口测试简介以及接口测试用例设计思路接口测试简介1.什么是接口接口就是内部模块对模块,外部系统对其他服务提供的一种可调用或者连接的能力的标准,就好比usb接口,他是系统向外接提供的一种用于物理数据传输的一个接口,当然仅仅是一个接口是不能进行传输的,我们还的对这个接口怎么进行传输进行进行一些设置和定义。开发所谓的接口是模块模块之间的一种连接,而测试眼中的接口是一种协议(对接口的功能的一种定义)2.接口的种类和分类外部接…

    2022年6月28日
    28

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号