相机标定——张氏标定法

article/2025/10/22 5:40:58

目录

    • 前言
      • 动机
      • 为什么要进行相机标定
      • 什么是张氏标定法
    • 张氏标定法的原理
      • 透镜成像原理
      • 世界坐标系到相机坐标系的转换
      • 相机坐标系到图像坐标系的转换
      • 图像坐标系到像素坐标系
      • 单应性矩阵
      • 内参求解
      • 外参求解
      • Matlab实操

前言

动机

  前段时间在整机械臂的手眼标定,也就是标定3D相机到机械臂末端坐标系之间的转化关系,需要用到Matlab的相机标定工具来得到相机与标定板之间的齐次变换矩阵(也就是相机标定中的外参)。Matlab标定工具箱使用起来确实方便,不需要知道其中的标定原理,但是我认为要使用好一个工具,对原理有一定的了解是必要的,故而花了点时间研究了一下Matlab标定工具箱使用的标定算法——张氏标定法。

为什么要进行相机标定

  相机需要标定,总结起来主要有以下两点原因:

  1. 由于透镜制造精度以及组装工艺的偏差会引入畸变,导致原始图像失真,需要进行矫正

在这里插入图片描述

  1. 在进行一些视觉任务如三维重建、视觉抓取的时候,我们需要建立从世界坐标系到图像坐标系之间的映射关系。例如可以通过某一点P在图像坐标系中的位置推导出其在世界坐标系中的位置,这是进行后续工作的基础。

什么是张氏标定法

  张氏标定法是张正友博士在1999年发表在国际顶级会议ICCV上的论文《Flexible Camera Calibration By Viewing a Plane From Unknown Orientations》中,提出的一种利用平面棋盘格进行相机标定的实用方法。其后2000的这篇《A flexible new technique for camera calibration》引用数更是达到了恐怖的13885次,江湖地位可见一斑。该方法介于摄影标定法和自标定法之间,既克服了摄影标定法需要的高精度三维标定物(操作麻烦)的缺点,又解决了自标定法鲁棒性差的难题。标定过程仅需使用一个打印出来的棋盘格,并从不同方向拍摄几组图片即可(理论上3组就可以求解所有的未知数,不过一般采15~20组,用优化的方法保证求解精度较高),任何人都可以自己制作标定图案,不仅实用灵活方便,而且精度很高,鲁棒性好。因此很快被全世界广泛采用,极大的促进了三维计算机视觉从实验室走向真实世界的进程。(摘自张正友标定法-完整学习笔记-从原理到实战 - 知乎 (zhihu.com))
  张氏标定法相比于其他标定方法,在保证一定精度以及鲁棒性的情况下,操作简单、成本较低。但是有一点要注意,张氏标定法只考虑了径向畸变,没有考虑切向畸变。
  Tips(本文为了方便(简单),不考虑相机的畸变)

张氏标定法的原理

  张氏标定法的整体思路为先求出世界坐标系到像素坐标系的单应性矩阵(单应性矩阵其实就是一个图像中的像素点到另外一个图像中像素点的变换矩阵,双目相机系统中也有单应性矩阵,其是左右相机图像之间的变换矩阵),然后根据单应性矩阵得到内参矩阵,最后得到外参矩阵,不过这其中有个东西要考虑,就是尺度因子,我花了一段比较长的时间去思考这个。

透镜成像原理

  我将主要用图来呈现,比码字快而且直观,透镜成像原理如下所示:
在这里插入图片描述
  上图总的来说就是建立了从像素坐标系到世界坐标系之间的映射关系。其步骤为:先通过外参建立相机坐标系与世界坐标系之间的联系,然后通过内参与相机成像模型建立相机坐标系与图像坐标系,图像坐标系与像素坐标系之间的联系。接下来,我们对上图的步骤进行拆解与分析。

世界坐标系到相机坐标系的转换

在这里插入图片描述
  上式子中,[xc,yc,zc][xw,yw,zw] 分别为点在相机坐标系与世界坐标系下的位置(注意,这还没有投影变换,只是换了个参考坐标系,R为从世界坐标系到相机坐标系的旋转矩阵,T为平移向量,两者构成了4*4的齐次变换矩阵,这也就是标定过程中得到的外参,这个外参正常情况下可能用不上,但是在机械臂的手眼标定中这个外参是必须的参数之一。

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

  相机坐标系到图像坐标系的关系如下图所示:
在这里插入图片描述  从相机坐标系到图像坐标系经过了投影变换,图像坐标为二维坐标,没有Z轴分量,成像平面距光心的距离为焦距f,这边有个要注意的是,从相机坐标系到图像坐标系的变化会引入一个尺度因子,这个尺度因子和 Zc 相关。

图像坐标系到像素坐标系

  相机实际输出的图片是按像素进行排列的,我们最后得到的数据也是像素的位置,像素坐标系相当于对图像坐标系做了原点偏移与坐标值离散化。
在这里插入图片描述
其中,1/dx, 1/dy 分别为像素在 x , y 轴方向上的物理尺寸,u0 , v0 为主点(图像原点)在像素平面的偏移。(其实正常来说的话,在上图3*3矩阵中的第一行第二列位置还会有一个 γ ,这个参数是 x, y 轴之间的主轴偏差,因为实际透镜,两个光轴可能不是垂直的)

单应性矩阵

  接下来,我们综合上述从世界到相机、从相机到图像、从图像到像素的转化关系,可以得到如下式子:
在这里插入图片描述
  我们对式子进行化简,我们可以将世界坐标系的 XOY 平面移动到标定板上,那么标定板上的点在世界坐标系上的 z 坐标就是0,显然,这只是换了一种世界坐标系的选取方式,只会影响外参,对内参没有任何影响。在此基础上,进行合并,我们可得:
在这里插入图片描述
  其中,s 为尺度因子,其之后分别为内参矩阵与外参矩阵。这儿,我们就可以得到单应性矩阵 H 了,其表达式如下所示

在这里插入图片描述
  可以看出来,单应性矩阵同时包含外参与内参,同时还含有尺度因子,求解的一般步骤是先求单应性矩阵,然后再求内外参,求解步骤如下:
  我们先把 H 矩阵展开,如下:
在这里插入图片描述
  我们假设像素坐标系与世界坐标系对应点对齐次坐标为(x’,y’,1)和(x,y,1)(z=0),那么有
在这里插入图片描述
  展开之后,可以得到如下式子:
在这里插入图片描述
  注意,上述两个式子为齐次方程,hij 同时除以一个倍数对结果没有影响,(这也可以看出来,单应性矩阵的自由度为8,这边给出单应性矩阵自由度为8的解释:如果给定一个单应H={h_ij},给它的元素乘上同一个数a,得到的的单应aH和H作用相同,因为新单应无非把齐次点x1变成了齐次点ax1,都是一回事。因此我们可以把a换成1/h33,那么H就变成了只有8个自由元素的矩阵),注意,按上述方法求解相当于对单应矩阵做了归一化类似的操作,故而求解出来的矩阵与真正的H矩阵之间还差一个倍数关系,这个倍数关系与我们加约束相关,也就是说如果我们加约束h33=1,或者h32=1,倍数是不一样的
  由于单应矩阵有8个自由度(我们加一个约束,h33=1,其他形式的约束也可以),我们需要同一个图像上的四个点便可求解出单应性矩阵,当然,点越多越精确,求解方法如下:
在这里插入图片描述
  如果我们得到了N个点对,有:

在这里插入图片描述
可以采用最小二乘法等优化的方法求解,注意,这边求出来的 H 矩阵不可以直接用于世界坐标系与像素坐标系的对应,我们求出来的是一个做了归一化类似操作的矩阵。

内参求解

  单应性矩阵如下所示:
在这里插入图片描述
  接下来我们进行内参的求解,步骤如下:
  按元素对应关系,可以得到如下式子:
在这里插入图片描述
  这边我们得注意,r1与r2是什么,这两个是旋转向量,旋转向量有两个性质

  • 两个旋转向量之间相互正交
  • 旋转向量的模为1

   我们可以根据这两个性质构建约束
约束1:
在这里插入图片描述
约束2:
在这里插入图片描述
  为了方便,我们构造B,B的表达形式如下:
在这里插入图片描述
  可以看出来,B其实是对称矩阵,我们只需要求出上三角的六个元素便可,我们把H矩阵的列向量hi展开,有
在这里插入图片描述
   那么,代入约束1,我们可得:
在这里插入图片描述
   其实这就是把左边的式子展开,然后合并同类项就行,左边式子展开就是一个多项式,右边的展开也是一个多项式。
   为了简化表达,我们令:
在这里插入图片描述
  那么最后的约束条件可与转化成:
在这里插入图片描述

v12,v11,v22可以通过前面已经计算好的单应矩阵得到,是已经知道的,那么我们只需要采集3张以上的图片,就可以求解B矩阵,进通过如下式子求解内参:
在这里插入图片描述
  这一块我有一个疑惑,求内参需要考虑这个 λ 么,我感觉不需要考虑这个,它一直处于被消去的状态,上述公式中的λ 是不是就是1就行(望大神赐教)

外参求解

  接下来,我们对外参进行求解,外参是相对于每一张标定图片而言的,不同的图片也就对应了不同的外参。
在这里插入图片描述
  其中又由旋转矩阵性质有:
在这里插入图片描述
  则可得:
在这里插入图片描述
  那么,r1,r2r3,t便都可以求出来了。

  看论文以及其他blog的时候,主要就是内参求解的 λ 这一块我没太看懂,我不知道我上述的理解对不对,我感觉内参求解确实是不需要考虑尺度因子的

Matlab实操

  这块不想写了,网上资料很多,请看链接:MATLAB–相机标定教程
  有几个东西我解释一下吧,输入黑白格边长是为了计算像素点世界坐标用的,所以这个的准确性势必会影响到标定结果,原点的话,MATLAB会自动确定的,不过你得保证你标定的时候,所有原点都在一个点上(保证标定板长宽格子数不对称一般就不会出现这个问题),采图15~20 即可,标定板视野占图片的1/4-1/3。

期待能有机会与各位大佬交流学习,如有错误,欢迎指正!!!


http://chatgpt.dhexx.cn/article/722iDHZS.shtml

相关文章

相机标定系列(三)利用matlab进行相机标定

相机标定系列(三)利用matlab进行相机标定 文章目录 相机标定系列(三)利用matlab进行相机标定前言一、棋盘格图像的采集二、单目相机标定三、双目相机标定 前言 matlab的应用程序中含有对双目相机和单目相机的标定工具箱&#xff…

机器视觉——相机标定

1 机器视觉为什么要做相机标定 机器视觉是采用相机成像来实现对三维场景的测量、定位、重建等过程。是一个利用二维图像进行三维反推的过程,我们所处的世界是三维的,而图像或者照片是二维的,可以把相机认为是一个函数,输入量是一…

相机标定篇——相机标定

认为相机标定是三维重建的核心,研究生期间主要方向为结构光三维重建 必要的数学知识 线性方程求解 Gauss消元法;LU分解;Cholesky分解 最小二乘问题-线性方法 特征值分解;奇异值分解;超定线性方程;最小二乘…

【相机标定】相机内参

相机标定 相机在计算机视觉方面的一些应用一般需要相机标定。我们总是听到标定这个词,那么具体标定的是什么呢?相机的拍摄是一个三维到二维(透视投影)的过程,这个过程可以用数学模型去表述,标定便是计算这…

什么是相机标定

1. 相机标定的定义及作用 相机标定是指借助标定板来计算单个或多个相机的内参、外参和镜头畸变参数。 作用: 将畸变的图像恢复为正常的图像,为后续进行拼接、SLAM等奠定基础。 多相机标定可以将所有相机输出变换到同一个坐标系。 相机标定是三维视觉…

相机标定究竟在标定什么?

点击上方“小白学视觉”,选择加"星标"或“置顶” 重磅干货,第一时间送达 相机标定可以说是计算机视觉/机器视觉的基础,但是初学者不易上手,本文将给读者整理一遍相机标定的逻辑,并在文末回答评论区提出的问题…

相机标定(Camera calibration)

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

相机参数标定(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, …