相机标定(Camera calibration)

article/2025/10/22 8:58:59

简介

摄像机标定(Camera calibration)简单来说是从世界坐标系换到图像坐标系的过程,也就是求最终的投影矩阵 P P P 的过程,下面相关的部分主要参考UIUC的计算机视觉的课件(网址Spring 2016 CS543 / ECE549 Computer vision)。

基本的坐标系:

  • 世界坐标系(world coordinate system);
  • 相机坐标系(camera coordinate system);
  • 图像坐标系(image coordinate system);

一般来说,标定的过程分为两个部分:

  • 第一步是从世界坐标系转换为相机坐标系,这一步是三维点到三维点的转换,包括 R R R t t t (相机外参)等参数;
  • 第二部是从相机坐标系转为图像坐标系,这一步是三维点到二维点的转换,包括 K K K(相机内参)等参数;

相机坐标系 转换到 图像坐标系##

坐标系介绍

相机到图片

如上图所示(图片来自UIUC计算机视觉课件),是一个小孔成像的模型,其中:

  • C C C 点表示camera centre,即相机的中心点,也是相机坐标系的中心点;
  • Z Z Z 轴表示principal axis,即相机的主轴;
  • p p p 点所在的平面表示image plane,即相机的像平面,也就是图片坐标系所在的二维平面;
  • p p p 点表示principal point,即主点,主轴与像平面相交的点;
  • C C C 点到 p p p 点的距离,也就是右边图中的 f f f 表示focal length,即相机的焦距;
  • 像平面上的 x x x y y y 坐标轴是与相机坐标系上的 X X X Y Y Y 坐标轴互相平行的;
  • 相机坐标系是以 X X X Y Y Y Z Z Z(大写)三个轴组成的且原点在 C C C 点,度量值为米(m);
  • 像平面坐标系是以 x x x y y y(小写)两个轴组成的且原点在 p p p 点,度量值为米(m);
  • 图像坐标系一般指图片相对坐标系,在这里可以认为和像平面坐标系在一个平面上,不过原点是在图片的角上,而且度量值为像素的个数(pixel);

相机 转换到 像平面

知道上面的简单知识后,如果知道相机坐标系中的一个点 X X X(现实三维世界中的点),在像平面坐标系对应的点是 x x x,要求求从相机坐标系转为像平面坐标系的转换,也就是从 X X X 点的 ( X , Y , Z ) \begin{pmatrix}X, & Y, & Z \end{pmatrix} (X,Y,Z)通过一定的转换变为 x x x 点的$\begin{pmatrix}x, & y\end{pmatrix} 。 注 意 : 。注意: \begin{pmatrix}X, & Y, & Z \end{pmatrix} ( 大 写 ) 是 在 相 机 坐 标 系 , 而 (大写)是在相机坐标系,而 \begin{pmatrix}x, & y\end{pmatrix} $(小写)是在像平面坐标系(还不是图像坐标系,原点不同。)观察第二个图,很简单的可以得到这个转换:
x = f X / Z x=fX/Z x=fX/Z y = f Y / Z y=fY/Z y=fY/Z ( X , Y , Z ) ↦ ( f X / Z , f Y / Z ) \begin{pmatrix} X, & Y, & Z \end{pmatrix} \mapsto \begin{pmatrix} fX/Z, & fY/Z \end{pmatrix} (X,Y,Z)(fX/Z,fY/Z)

可以表示为矩阵计算为(在这里用的是齐次坐标的表示方式,关于齐次坐标文章最下面有介绍):
( X Y Z 1 ) ↦ ( f X f Y Z ) = [ f 0 f 0 1 0 ] ( X Y Z 1 ) \begin{pmatrix} X \\ Y \\ Z \\ 1 \\ \end{pmatrix} \mapsto \begin{pmatrix} fX \\ fY\\ Z \\ \end{pmatrix} =\begin{bmatrix} f & & & 0 \\ & f & & 0 \\ & & 1 & 0 \\ \end{bmatrix} \begin{pmatrix} X \\ Y \\ Z \\ 1 \\ \end{pmatrix} XYZ1fXfYZ=ff1000XYZ1

可以简写为( P P P 就是所谓的投影矩阵,当然现在还不完整):
x = P X x=PX x=PX

加入偏移量

通过上面,可以把相机坐标系转换到像平面坐标系,但是像平面坐标系和图像坐标系虽然在同一个平面上,但是原点并不是同一个,而目标是要转换到图像坐标系下,所以还需要一步操作,如下图:

这里写图片描述

如上图所示(图片来自UIUC计算机视觉课件),其中主点 p p p 是像平面坐标系的原点,但在图像坐标系中的位置为$\begin{pmatrix}
p_x, & p_y
\end{pmatrix}
$,在这里,图形坐标系的原点是图片的左下角,所以可以得到:
( X , Y , Z ) ↦ ( f X / Z + p x , f Y / Z + p y ) \begin{pmatrix} X, & Y, & Z \end{pmatrix} \mapsto \begin{pmatrix} fX/Z+p_x, & fY/Z+p_y \end{pmatrix} (X,Y,Z)(fX/Z+px,fY/Z+py)

相当于在上面的基础上加了一个p点坐标的偏移量,同时可以表示为矩阵计算为(在这里用的是齐次坐标的表示方式):
( X Y Z 1 ) ↦ ( f X + Z p x f Y + Z p y Z ) = [ f p x 0 f p y 0 1 0 ] ( X Y Z 1 ) \begin{pmatrix} X \\ Y \\ Z \\ 1 \\ \end{pmatrix} \mapsto \begin{pmatrix} fX+Zp_x \\ fY+Zp_y \\ Z \\ \end{pmatrix} =\begin{bmatrix} f & & p_x & 0 \\ & f & p_y & 0 \\ & & 1 & 0 \\ \end{bmatrix} \begin{pmatrix} X \\ Y \\ Z \\ 1 \\ \end{pmatrix} XYZ1fX+ZpxfY+ZpyZ=ffpxpy1000XYZ1

整理一下得:
( f X + Z p x f Y + Z p y Z ) = [ f p x f p y 1 ] [ 1 0 1 0 1 0 ] ( X Y Z 1 ) \begin{pmatrix} fX+Zp_x \\ fY+Zp_y \\ Z \\ \end{pmatrix} =\begin{bmatrix} f & & p_x \\ & f & p_y \\ & & 1 \\ \end{bmatrix} \begin{bmatrix} 1 & & & 0 \\ & 1 & & 0\\ & & 1 & 0\\ \end{bmatrix} \begin{pmatrix} X \\ Y \\ Z \\ 1 \\ \end{pmatrix} fX+ZpxfY+ZpyZ=ffpxpy1111000XYZ1

所以最后可以得到 K K K,也就是平时所说的相机内参(Intrinsic parameters):
K = [ f p x f p y 1 ] K=\begin{bmatrix} f & & p_x \\ & f & p_y \\ & & 1 \\ \end{bmatrix} K=ffpxpy1
以及投影矩阵 P P P(在这里可以认为旋转矩阵 R R R 为单位矩阵 I I I,平移矩阵 t t t 都为0,这也是为什么要拆成这种方式),为:
P = K [ I 0 ] P=K\left[ \begin{array}{c|c} I&0 \end{array} \right] P=K[I0]

像素坐标

前面也提到了在图像坐标系中用的不是现实生活中的m来度量,而是用的 pixel 的个数,所以在上面转换到图像坐标系中还有个问题,就是坐标的表示还是m,并没有转换到像素坐标系统;在这里需要引入一个新概念就是:

  • m x m_x mx 表示在水平方向1m的长度包含的像素的个数;
  • m y m_y my 表示在竖直方向1m的长度包含的像素的个数;

可能有人奇怪为啥不是一个值,还需要分别指定 m x m_x mx m y m_y my 呀,这是因为通过上面可以得到一个像素点的大小(m度量)为:
1 m x × 1 m y \frac{1}{m_x}\times\frac{1}{m_y} mx1×my1

但是需要说明的是像素并不一定是一个正方形,有时候可能也是一个矩形,所以要分别指定。
所以可以把上面相机内参 K K K 变为更新为,转换公式把 K K K 替换即可,其他不变:
K = [ m x m y 1 ] [ f p x f p y 1 ] = [ α x β x α y β y 1 ] K=\begin{bmatrix} m_x & & \\ & m_y & \\ & & 1 \\ \end{bmatrix} \begin{bmatrix} f & & p_x \\ & f & p_y \\ & & 1 \\ \end{bmatrix} =\begin{bmatrix} α_x & & β_x \\ & α_y & β_y \\ & & 1 \\ \end{bmatrix} K=mxmy1ffpxpy1=αxαyβxβy1

一般来说,在使用相机内参K计算坐标系转换时,提供的都是已经变换后的值;例如会提供 f x f_x fx f y f_y fy c x c_x cx c y c_y cy 四个值代表相机内参 K K K,其实 f x f_x fx 就是这里的 α x α_x αx,同理 f y f_y fy α y α_y αy c x c_x cx β x β_x βx c y c_y cy β y β_y βy

世界坐标系 转换到 图像坐标系##

坐标系介绍

如上图所示(图片来自UIUC计算机视觉课件),从世界坐标系转换到相机坐标系是三维空间到三维空间的变换,一般来说需要一个平移操作和一个旋转操作就可以完成这个转换,用公式表示如下(可以理解为世界坐标系原点先平移到相机坐标系的位置然后在做一次坐标系旋转,使坐标轴对齐。):
X ~ c a m = R ( X ~ − C ~ ) \widetilde X_{cam}=R(\widetilde X - \widetilde C) X cam=R(X C )

  • R R R 表示旋转矩阵;
  • X ~ \widetilde X X 表示 X X X 点在世界坐标系中的位置;
  • C ~ \widetilde C C 表示相机原点 C C C 在世界坐标系中的位置;
  • X ~ c a m \widetilde X_{cam} X cam 表示 X X X 点在相机坐标系中的位置;

世界 转换到 相机

根据上面的公式可以得到从一个三维点从世界坐标系转换到相机坐标的变换公式如下(也是用的齐次坐标的表示方式):
X c a m = ( X ~ c a m 1 ) = [ R − R C ~ 0 1 ] ( X ~ 1 ) = [ R − R C ~ 0 1 ] X X_{cam}=\begin{pmatrix} \widetilde X_{cam} \\ 1 \\ \end{pmatrix} =\begin{bmatrix} R & -R \widetilde C \\ 0 & 1 \\ \end{bmatrix} \begin{pmatrix} \widetilde X \\ 1 \\ \end{pmatrix} =\begin{bmatrix} R & -R \widetilde C \\ 0 & 1 \\ \end{bmatrix}X Xcam=(X cam1)=[R0RC 1](X 1)=[R0RC 1]X

世界 转换到 图像

根据上面的讨论知道了怎样从世界坐标系转换到相机坐标系(平移和旋转)以及从相机坐标系转换到图像坐标系(相机内参变换),所以带入上面的矩阵计算,可以得到:
x = K [ I 0 ] X c a m = K [ R − R C ~ ] X x=K\left[ \begin{array}{c|c} I&0 \end{array} \right]X_{cam} =K\left[ \begin{array}{c|c} R & -R \widetilde C \end{array} \right]X x=K[I0]Xcam=K[RRC ]X

这样就得到了最终的投影矩阵 P P P
P = K [ R t ] P=K\left[ \begin{array}{c|c} R & t \end{array} \right] P=K[Rt]

其中:
t = − R C ~ t=-R \widetilde C t=RC

在这里, K K K 一般称为相机内参(intrinsic parameters),描述了相机的内部参数,包括焦距 f f f、主点 p p p 的位置、以及像素与真实环境的大小比例等,这个是固有属性,是提供好的; R R R t t t 称为相机外参(extrinsic parameters), R R R 在这里是旋转矩阵,可以转换为三维的旋转向量,分别表示绕 x x x y y y z z z 三个轴的旋转角度, t t t 目前就是一个平移向量,分别表示在 x x x y y y z z z 三个方向上的平移量。

畸变参数(distortion parameters)

在几何光学和阴极射线管(CRT)显示中,畸变(distortion) 是对直线投影(rectilinear projection)的一种偏移。简单来说直线投影是场景内的一条直线投影到图片上也保持为一条直线。那畸变简单来说就是一条直线投影到图片上不能保持为一条直线了,这是一种光学畸变(optical aberration)。可能由于摄像机镜头的原因,这里不讨论,有兴趣的可以查阅光学畸变的相关的资料。
畸变一般可以分为两大类,包括径向畸变和切向畸变。主要的一般径向畸变有时也会有轻微的切向畸变。

径向畸变(Radial distortion)###

径向畸变的效应有三种,一种是桶形畸变(barrel distortion),另一种是枕形畸变(pincushion distortion),还有一种是两种的结合叫做胡子畸变(mustache distortion),从图片中可以很容易看出区别,具体见下图(图片来自wikipedia):

径向畸变可以用如下公式修正:
x c o r r = x d i s ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) x_{corr}=x_{dis}(1+k_1r^2+k_2r^4+k_3r^6) xcorr=xdis(1+k1r2+k2r4+k3r6)

y c o r r = y d i s ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) y_{corr}=y_{dis}(1+k_1r^2+k_2r^4+k_3r^6) ycorr=ydis(1+k1r2+k2r4+k3r6)

切向畸变(tangential distortion)###

切向畸变是由于透镜与成像平面不严格的平行,其可以用如下公式修正:
x c o r r = x d i s + [ 2 p 1 x y + p 2 ( r 2 + 2 x 2 ) ] x_{corr}=x_{dis} + [2p_1xy+p_2(r^2+2x^2)] xcorr=xdis+[2p1xy+p2(r2+2x2)]

y c o r r = y d i s + [ p 1 ( r 2 + 2 y 2 ) + 2 p 2 x y ] y_{corr}=y_{dis} + [p_1(r^2+2y^2)+2p_2xy] ycorr=ydis+[p1(r2+2y2)+2p2xy]

其中:

  • x d i s x_{dis} xdis y d i s y_{dis} ydis 表示有畸变的坐标;
  • x c o r r x_{corr} xcorr y c o r r y_{corr} ycorr 表示修复后的坐标;
  • k 1 k_1 k1 k 2 k_2 k2 k 3 k_3 k3 表示径向畸变参数;
  • p 1 p_1 p1 p 2 p_2 p2 表示切向畸变参数;

所以最终得到5个畸变参数:
D = ( k 1 , k 2 , p 1 , p 2 , k 3 ) D=\begin{pmatrix} k_1, & k_2, & p_1, & p_2, & k_3 \end{pmatrix} D=(k1,k2,p1,p2,k3)

相机标定

那么可以利用这些来进行最终的任务相机标定,简单的过程可以描述为通过标定板,如下图,可以得到n个对应的世界坐标三维点 X i X_i Xi 和对应的图像坐标二维点 x i x_i xi,这些三维点到二维点的转换都可以通过上面提到的相机内参 K K K,相机外参 R R R t t t,以及畸变参数 D D D 经过一系列的矩阵变换得到。现在就用这些对应关系来求解这些相机参数。最后就是用线性方法求解方程式,这里就不做讨论了。

那为什么要做相机标定呢?
每个镜头的畸变程度各不相同,通过相机标定可以校正这种镜头畸变。其实可以认为用这种标定的方式来求解相机内参和畸变参数,相当于一种相机校准,然后这些参数就可以用于后面的求解。例如求解新拍的两幅图片相对的 R R R t t t,求解这个外参用到就是标定得到的相机内参和畸变参数。

齐次坐标
就是将一个原本是n维的向量用一个n+1维向量来表示。
许多图形应用涉及到几何变换,主要包括平移、旋转、缩放。以矩阵表达式来计算这些变换时,平移是矩阵相加,旋转和缩放则是矩阵相乘,综合起来可以表示为 x = R ∗ X + t x = R*X+ t x=RX+t(注:因为习惯的原因,实际使用时一般使用变化矩阵左乘向量)( R R R 旋转缩放矩阵, t t t 为平移矩阵, X X X 为原向量, x x x 为变换后的向量)。引入齐次坐标的目的主要是合并矩阵运算中的乘法和加法,表示为 x = P ∗ X x = P*X x=PX 的形式。即它提供了用矩阵运算把二维、三维甚至高维空间中的一个点集从一个坐标系变换到另一个坐标系的有效方法。和上面的计算过程是对应的。


http://chatgpt.dhexx.cn/article/gE4IUJIF.shtml

相关文章

相机参数标定(camera calibration)及标定结果如何使用

重要更新:本文的第二次更新已发布。为了不破坏现有内容的结构,故重新开始新的一篇文章。同时本文的一些内容也会涵盖进去。 欢迎关注。 《第二更,相机参数标定基础:从小孔成像开始到单双目标定》 关于实践部分,可参…

相机标定详解

内参、外参、畸变参数三种参数与相机的标定方法与相机坐标系的理解 相机标定(Camera calibration)原理、步骤 相机标定详解 最近做项目要用到标定,因为是小白,很多东西都不懂,于是查了一堆的博客,但没有…

相机标定-机器视觉基础(理论推导、Halcon和OpenCV相机标定)

相机标定是获得目标工件精准坐标信息的基础。首先,必须进行相机内参标定,构建一个模型消除图像畸变;其次,需要对相机和机器人的映射关系进行手眼标定,构建一个模型将图像坐标系上的点映射到世界坐标系。主要分为背景知…

计算机视觉——相机标定

相机标定 1. 相机标定1.1相机内外参数(重点)1.2 为什么要做相机标定 2. 相机标定的意义3. 相机成像模型3.1 像素坐标系3.2 图像坐标系3.3 相机坐标系3.4 世界坐标系 4.坐标系转换4.1 世界坐标到相机坐标4.2 相机坐标到图像坐标4.3 像素坐标到世界坐标的变…

相机标定、双目相机标定(原理)、三维重建效果展示

1.相机标定的目的: (1)通过单目相机标定分别求出左右相机的内参数和外参数。 (2)矫正由于镜头畸变造成的图片的变形,例如,现实中的直线,拍摄成图像后会外凸或内凹,进行相…

相机标定(Camera calibration)原理及步骤

这已经是我第三次找资料看关于相机标定的原理和步骤,以及如何用几何模型,我想十分有必要留下这些资料备以后使用。这属于笔记总结。 1.为什么要相机标定? 在图像测量过程以及机器视觉应用中,为确定空间物体表面某点的三维几何位置…

计算机视觉—— 相机标定

目录 简介 一、相机模型 1.坐标系 2.坐标系变化 3.相机畸变模型 二、相机标定原理 三、张正友黑白棋盘格标定 2.1.算法思想 2.2.求解内参和外参的积 2.3.求解内参矩阵 2.4.求解外参矩阵 2.5.得到相机畸变矫正参数 2.6.L-M算法参数优化 三、实验 3.1 实验要求…

相机标定的原理及实现

本文参考文档: 原理部分:https://blog.csdn.net/honyniu/article/details/51004397 代码部分:https://www.cnblogs.com/wildbloom/p/8320351.html ;https://blog.csdn.net/firemicrocosm/article/details/48594897# 1、相机标定的…

计算机视觉-相机标定(Camera Calibration)

1.相机标定基本原理 1.1 简介 在图像测量过程以及机器视觉应用中,为确定空间物体表面某点的三维几何位置与其在图像中对应点之间的相互关系,必须建立摄像机成像的几何模型,这些几何模型参数就是摄像机参数。在大多数条件下这些参数必须通过实验与计算才…

相机标定(Camera calibration)原理、步骤

这已经是我第三次找资料看关于相机标定的原理和步骤,以及如何用几何模型,我想十分有必要留下这些资料备以后使用。这属于笔记总结。 1.为什么要相机标定? 在图像测量过程以及机器视觉应用中,为确定空间物体表面某点的三维几何位置…

采用Matlab的Filter Designer设计低通滤波器并对信号进行低通滤波

今天在使用Filter Designer设计低通滤波器进行低通滤波发现滤波总是得不到理想中的结果,经过一番折腾后终于解决了问题,特写博文供大家学习参考。 1、找到工具箱中的Filter Designer并打开: 2、按照如下图所示设计参数,注意Fs最好…

利用Matlab filterDesigner 工具生成FIR滤波器函数,并调用实现低通滤波

本文使用的开发环境为:Win10 Matlab2018a 版本。 在matlab命令窗口输入:filterDesigner命令,即可打开filterDesigner设计工具。 按照下图调整FIR低通滤波器的参数: 我们设计的是采样频率100Hz,截止频率10Hz的8阶FIR低…

matlab由滤波的系数得到传输函数 设计带通滤波器 design fdatool设计IIR带通滤波器

写在前面的话: 由滤波器系数得到传输函数: 使用matlab fdatool设计滤波器,得到幅频响应,得到滤波器系数,由系数如何得到滤波器的参数? 我的方法是 使用:点击Filt-Export to simulink Model, …

带通滤波器的设计

一、滤波器:滤波器按照频带划分可以分为:低通滤波器(LPF)、高通滤波器(HPF)、带通滤波器(BPF)、带阻滤波器(BEF)。其中射频天线领域主要采用带通滤波器(BPF)。 二、带通滤波器(BPF): ①:RF BPF:从天线中取出期望频带的…

【matlab图像处理】理想低通滤波器

实验原理: 在一幅图像中,低频部分对应图像变化缓慢的部分即图像大致外观和轮廓,高频部分对应图像变化剧烈的部分即图像细节,图像噪声也属于高频部分。低通滤波器的功能是让低频率通过而滤掉或衰减高频,效果是图像去噪平…

Matlab滤波器的设计

在IIR滤波器设计过程中,通常利用模拟滤波器来设计数字滤波器,首先要根据滤波器的性能指标设计出相应的模拟滤波器的系统传递函数G(s),然后由传递函数G(s)经Z变换得到所需要的数字滤波器的离散型传递函数。常用的Z变换方法有冲激响应不变法和双…

[Matlab]巴特沃夫滤波器设计:低通、高通、带通和带阻(1)

[Matlab]巴特沃夫滤波器设计:低通、高通、带通和带阻-------(1) ​ 巴特沃斯滤波器(Butterworth filter)称作最大平坦滤波器。巴特沃斯滤波器的特点是通频带内的频率响应曲线最大限度平坦,没有纹波&#x…

基于MATLAB的Filter使用,低通、带通和高通滤波器的MATLAB程序分享

基于MATLAB的Filter使用,低通、带通和高通滤波器的MATLAB程序分享 完整程序如下: clear all close all clc %% Parameter Interface Frequence0 60; %单位:Hz Frequence1 130; %单位:Hz F…

MATLAB —— 低通滤波器设计与信号滤波

百度百科 - 简介: 低通滤波器是容许低于截止频率的信号通过, 但高于截止频率的信号不能通过的电子滤波装置。 (1)提取滤波器(系数矩阵) 打开工具: MATLAB - APP - Filter Designer 参数设置&am…

低通滤波-matlab低通滤波程序

本例程展示了信号处理中低通滤波的作用,首先生成一个高斯白噪声,然后对其进行低通滤波。低通滤波器的截止频率和Q值可以自己设定,得到低通滤波器的传输函数后,在经过双线性变换法得到其单位脉冲响应。滤波后对原始信号的频谱和滤波…