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

article/2025/10/22 8:45:50

重要更新:本文的第二次更新已发布。为了不破坏现有内容的结构,故重新开始新的一篇文章。同时本文的一些内容也会涵盖进去。

欢迎关注。

第二更,相机参数标定基础:从小孔成像开始到单双目标定

关于实践部分,可参考后续博客

《第三更,单目相机标定实践(完整过程)》

《第四更,双目相机标定实践(完整过程)》

 

一直都想写一写这个主题,但是,一直都感觉有点虚,也没有去整理。在网上搜了一下,发现大多数都是转来转去,看着也是似懂非懂的,让人很老火。所以,我就按照自己的理解,尽量简单易懂一点,也便于以后的应用。如有不足或者错误之处请指出,还请指出。

1、相机标定的意义

在机器视觉领域,相机的标定是一个关键的环节,它决定了机器视觉系统能否有效的定位,能否有效的计算目标物。相机的标定基本上可以分为两种,第一种是相机的自标定;第二种是依赖于标定参照物的标定方法。前者是相机拍摄周围物体,通过数字图像处理的方法和相关的几何计算得到相机参数,但是这种方法标定的结果误差较大,不适合于高精度应用场合。后者是通过标定参照物,由相机成像,并通过数字图像处理的方法,以及后期的空间算术运算计算相机的内参和外参。这种方法标定的精度高,适用于对精度要求高的应用场合。本文主要写一写后者,至于前者,是一个研究的难点和热点,以后有空再写。

2、坐标系的变换

2.1、小孔成像的原理

小孔成像的原理可以用下图来说明:

2.2、各个坐标系的定义

为了说明白,建议先介绍图像的坐标系,再逐步推广到世界坐标系,最后说明各个坐标系是如何变化的,从而给出相机的内参和外参。

2.2.1、像素坐标系

像素坐标就是像素在图像中的位置。一般像素坐标系的左上角的顶点就是远点,水平向右是u,垂直向下是v轴。

例如,在上图中,任意一个像素点的坐标可以表示为(ui,vi)。

2.2.2、图像坐标系

在像素坐标系中,每个像素的坐标是用像素来表示的,然而,像素的表示方法却不能反应图像中物体的物力尺寸,因此,有必要将像素坐标转换为图像坐标。

将像素坐标系的原点平移到图像的中心,就定为图像坐标系的原点,图像坐标系的x轴与像素坐标系的u轴平行,方向相同,而图像坐标系的y轴与像素坐标系的v轴平行,方向相同。

在图中,假设图像中心的像素坐标是(u0,v0),相机中感光器件每个像素的物力尺寸是dx * dy,那么,图像坐标系的坐标(x,y)与像素坐标系的坐标(u,v)之间的关系可以表示为:

写成矩阵的形式就为:

改写为齐次坐标的形式:

2.2.3、相机坐标系

相机坐标系是以相机的光轴作为Z轴,光线在相机光学系统的中心位置就是原点Oc(实际上就是透镜的中心),相机坐标系的水平轴Xc与垂直轴Yc分别于图像坐标系的X轴和Y轴平行。在图中,相机坐标系的原点与图像坐标系的原点之间的距离OcOi之间的距离为f(也就是焦距)。

上图中,如果有一个物体成像到图像坐标系,则可以用下图来表示(B点是相机坐标系中物体的点坐标,P是图像坐标系中成像的坐标):

可以知道相机坐标系与图像坐标系的关系为:

好了,那么为什么OcOi这个距离是焦距呢?下面做一些推导。大部分的文章在介绍这一点的时候,也有欠缺,为什么像素坐标系会在相机坐标系的前面呢,按道理说,相机坐标系是以相机的透镜中心为原点,那像素坐标系和图像坐标系为什么不在后面呢?这里做一个说明。

(1)本文的第一个图就是小孔成像的原理图。像平面就是成像的位置,这个是用户自己设定的,就是CCD传感器的位置,而焦平面就是镜头的焦距所在平面。当像平面刚好和焦平面重合时,此时所成的像是最清晰的。所以,这也就是为什么上面的公式中相机坐标系的原点到图像坐标系的原点的距离就是焦距。(实际上,由于物理条件的限制,像平面和焦平面是不可能完全重合的。)

(2)同样是本文的第一个图,我们可以看到像平面在光学系统的右面,而在推导相机标定的坐标系关系时,却认为光线先通过成像平面,再在相机坐标系上汇聚到一个点,实际上,如果用下图来说明,可能就更清楚一点。就是推导的时候,把像平面用虚拟像平面代替了。

2.2.4、世界坐标系

世界坐标系是图像与真实物体之间的一个映射关系。如果是单目视觉的话,主要就是真实物体尺寸与图像尺寸的映射关系。如果是多目视觉的话,那么就需要知道多个相机之间的关系,这个关系就需要在同一个坐标系下进行换算。在下图中,世界坐标系的原点是Ow,而Xw,Yw,Zw轴并不是与其他坐标系平行的,而是有一定的角度,并且有一定的平移。

当对相机坐标系安装一定的参数,分别绕着X,Y,Z轴做平移和旋转后,就得到在世界坐标系中的坐标。

平移表示:

而对于旋转,可以采用如下的方法,给定一个基本旋转矩阵和基本矩阵

对于三坐标轴旋转,当绕着X轴旋转时,保持基本矩阵的第1列不变,有如下的旋转矩阵

当绕着Y轴旋转时,保持基本矩阵的第2列不变,有如下的旋转矩阵

当绕着Z轴旋转时,保持基本矩阵的第3列不变,有如下的旋转矩阵

 

那么,整个相机坐标系到世界坐标系的变换公式为

2.3、相机的内参和外参

通过前面的几个步骤,我们已经得到了各个坐标系之间的相互转换关系,进一步的就可以得到从像素坐标系到世界坐标系的变换关系:

公式中,红色的框框就表示相机的外参,可以看到,外参就是相机相对于世界坐标系的旋转和平移变换关系。内参是相机固有的属性,实际上就是焦距,像元尺寸。同时还可以看到,公式中有一个Zc,它表示物体离光学中心的距离。这也就说明,在标定的时候,如果物体在距离相机的不同位置,那么我们就必须在不同的位置对相机做标定。简单点来理解就是,当物体离相机远的时候,在图像上就很小,那么一个像素代表的实际尺寸就大,当物体离相机近的时候,那么成像效果就大,一个像素代表的实际物体尺寸就小。因此,对于每一个位置都需要去标定。

小插曲:在介绍坐标系变换理论的时候,为什么要用齐次坐标呢?网上很多的文章在这一点上没有说明白,导致读者在看的时候糊里糊涂,莫名其妙。有的人就会问了,不就是为了使得表达的方便吗?那我只能说,太片面了啊,因为我之前在这里也有很多的困惑。所以在这里,我就按照自己的理解做一些推导。我相信,如果耐心的读者能够读到这里,希望我们都有一些启发,毕竟是我个人的理解,至于没有读到这里的,那就只能有缘再见了。

先说一说什么叫齐次坐标系:能够明显的区分点与向量,并且便于计算机做图形处理时进行仿射变换的坐标系。

在欧式空间,两条平行线是不会相交的(可以想象成两条平行的光线)。但是,再想象一下或者我们经常看到的例子,比如平行的火车轨道,如果我们站在火车轨道的正中间,向很远处观察两条轨道,是不是感觉两条轨道在很远处相交了,这就是透视空间。透视的英文单词是perspective,英文单词的解释是:the art of creating an effect of depth and distance in a picture by representing people and things that are far away as being smaller than those that are nearer the front。仔细的揣摩一下就类似于坐在那个地方画画,怎么表达轨道是无限往前走的呢,这就是一种透视的原理。

例如,在欧式空间,表示一个三维的点和一个三维的向量可以采用如下的方法

由于向量只有方向和大小,如何只给出(x,y,z),鬼知道这到底是向量还是点。好了,如何来做呢。

通过矩阵的变换

可以看到,点和向量区分的方式是最后一个数值是否为1。

(1)从普通坐标系变换到齐次坐标系

如果是点(x,y,z)则变换为(x,y,z,1)

如果是向量(x,y,z)则变换为(x,y,z,0)

(2)从齐次坐标系变换到普通坐标系

 

如果是点(x,y,z,1)则变换为(x,y,z)

如果是向量(x,y,z,0)则变换为(x,y,z)

有了这些准备之后,我们知道,相机成像的过程就类似于上面我们说的透视变换的过程(这个过程不详细说,大致理解就行,可以参考专业的书籍),也就类似于画画。因此,普通坐标系上的点,就可以通过在后面加上一个1的方式来实现。又由于标定过程中的各个坐标系的变换,实际上就是坐标系中各个点的变换关系,因此,采用齐次坐标系不仅便于区分,而且有利于后面的计算。想了一下,大致画一个相机成像的透视变换图

3、图像畸变及畸变矫正

3.1、相机的畸变模型

畸变的英文单词是distortion。从英文的意思来看就是物体看起来是不正常的,比如说形状改变了,扭曲了或者其他的变化。

造成图像畸变的原因有很多,总结起来可以分为两类:径向畸变和切向畸变。

3.1.1、径向畸变

可以这样来理解,对于透镜而言,以透镜的中心作为原点,往外是透镜的半径的方向,当光线越靠近中心的位置,畸变越小,沿着半径方向远离中心的时候,畸变越大。典型的径向畸变有桶形畸变和枕形畸变。如下图所示。

径向畸变的矫正公式如下(这里不给出推导过程,直接使用)

式中,(x,y)是理想的无畸变的坐标(图像坐标系),(xdr,ydr)是畸变后图像像素点的坐标,而且,

3.1.2、切向畸变

切向畸变可以这样理解,当透镜与成像平面不行时,就产生了畸变,类似于透视变换。打个比方的例子。

切向畸变的矫正公式如下(这里不给出推导过程,直接使用)

3.2、畸变矫正

通过上面介绍的径向畸变和切向畸变模型,可以得到两个模型最终作用于真实图像后的矫正模型。

为什么是相加呢,可以这样理解,畸变就是距离的变化,而距离的变化反映到坐标值上就是加减的关系。

4、相机参数标定到底怎么用

当求解出了相机的内参和外参后,那么如何使用这些参数呢?下面做一个大致的说明。

上面的理论部分是通用的,但是,在实际的应用过程中,却有区别。比如说,在我的项目经验中,有用到单目视觉的情况,也有用到双目视觉的情况。

对于单目视觉而言,实际上我们是没有必要知道世界坐标系的,因为,我们没必要去探究到底我这一个相机处于世界坐标坐标系的什么位置。据我了解,如果采用单目视觉的立体图像匹配,或者空间位置定位,应该需要用到空间位置信息。那么,在通常的单目视觉应用中,求得内参和畸变参数后,就可以对新拍摄的图像做变换和矫正。矫正完拍摄的图像之后,就可以对图像做其他处理了。

对于双目视觉而言,需要用到世界坐标系。对单目视觉做完内参和畸变参数的矫正之后,就可以用这些变换后的图像,同时结合世界坐标系实现定位或者其他用途了。

欢迎关注公众号

 

5、一个相机标定的实例

5.1、标定采集的数据图像

5.2、图像处理

实际上这一步就是角点提取,有很多算法,例如DoG,FAST,sift,surf等算法。不再一一列举。下图是提取角点后的结果(OpenCV函数:findChessboardCorners)。

5.3、相机参数的计算

直接调用OpenCV中的函数  来计算

calibrateCamera()

当输入一副新的拍摄的图像后,就可以用计算得到的参数,去矫正这幅图(本文只是单目视觉的矫正),用OpenCV中的函数 来实现的。

计算的参数结果如下

实际输入的图像如下

矫正后的图像如下

 

 

 

 

 


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

相关文章

相机标定详解

内参、外参、畸变参数三种参数与相机的标定方法与相机坐标系的理解 相机标定(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值可以自己设定,得到低通滤波器的传输函数后,在经过双线性变换法得到其单位脉冲响应。滤波后对原始信号的频谱和滤波…

模拟和数字低通滤波器的MATLAB实现

转自:http://blog.sina.com.cn/s/blog_79ecf6980100vcrf.html 低通滤波器参数:Fs8000,fp2500,fs3500,Rp1dB,As30dB,其他滤波器可以通过与低通之间的映射关系实现。 %%模拟滤波器 %巴特沃斯——…