张氏标定法原理详解

举报
秃头小苏 发表于 2022/05/22 10:49:43 2022/05/22
【摘要】  🍊作者简介:秃头小苏,致力于用最通俗的语言描述问题🍊往期回顾:卡尔曼滤波系列1——卡尔曼滤波    CMake 入门教程🍊近期目标:拥有2000粉丝🍊支持小苏:点赞👍🏼、收藏⭐、留言📩@[toc] 张氏标定法 🌴写在前面  在读这篇之前建议大家对四系坐标系之间的转换有一个较为清晰的认识,如若有不了解的可参考我之前的博文:相机模型与几何关系推导+四系坐标转...

 

🍊作者简介:秃头小苏,致力于用最通俗的语言描述问题

🍊往期回顾:卡尔曼滤波系列1——卡尔曼滤波    CMake 入门教程

🍊近期目标:拥有2000粉丝
🍊支持小苏:点赞👍🏼、收藏⭐、留言📩

@[toc]

张氏标定法

🌴写在前面

  在读这篇之前建议大家对四系坐标系之间的转换有一个较为清晰的认识,如若有不了解的可参考我之前的博文:相机模型与几何关系推导+四系坐标转换


🌴原理详解

🍉🍉🍉四系坐标转化时我们已经得到了如下公式:

image-20220413210609050

通过上述公式,我们易得到:

image-20220413210707351

  其中m表示图像平面的像素坐标(u,v,1),M表示世界坐标系的坐标点( xw ,yw ,zw )。R,T表示旋转和平移矩阵、s表示尺度因子(只是为了方便运算,对于齐次坐标,尺度因子不会改变坐标值的) 、A表示相机的内参矩阵,表达式如下:

image-20220413211324806

其中 τ \tau 代表像素点在x,y方向上尺度的偏差。


🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀

这里插入介绍一个概念:单应性变换

  单应性变换是将一个平面内的点映射到另一个平面内的二维投影变换。(平面是指图像或者三维中的平面表面),对应的变换矩阵称为单应性矩阵 。

  在进行张氏标定的时候,我们所选择的标定物是平面(往往是棋盘格),所以我们可以把世界坐标系构造在Z=0的平面上。然后进行单应性计算。令Z=0可以将上文公式转换为如下形式:

image-20220413211838395

  上述变化属于单应性变化,那么 A [ r 1 r 2 r 3 T ] A\left[ {\begin{array}{c} {{r_1}}&{{r_2}}&{\begin{array}{c} {{r_3}}&T \end{array}} \end{array}} \right] 即为单应性矩阵。并令 H = A [ r 1 r 2 T ] H = A\left[ {\begin{array}{c} {{r_1}}&{{r_2}}&T \end{array}} \right] ,则有:

image-20220413212203890

  H是一个3x3的矩阵,一共有9个元素。但上式是一个齐次坐标,因此,H有8个未知量待解。

  这里是不是有疑问了呢?为什么只有8个未知量呢?其实这个在之前也讲到过,就是齐次方程的伸缩不变性。下面通过这个例子再次叙述一遍。我们看如下方程:

image-20220413212444177

其中H为3x3的矩阵:

image-20220413212506066

则:

image-20220413212526484

上式可表述为:

image-20220413212546928

也即:

image-20220413212606896

将上式写成AH=0的形式:

image-20220413212630859

下面我们再来看这样的方程:

image-20220413212657917

则:

image-20220413212717065

  可以发现单应性矩阵H和aH是完全一样的,即点(X,Y)无论经过H还是aH映射,变化后都是(u,v)。此时我们取 ,则有:

image-20220413212741482

  可以看出H只有8个未知量待解。

  明白了H有八个未知量,那么要想解出这八个未知量,我们就需要八个方程。通过上面的分析可知,我们通过一组对应的(x,y)-(u,v)可以获得两个方程。其中(x,y)作为标定物的坐标,可以由设计者人为控制,是已知量。(u,v)是像素坐标,我们可以直接通过摄像机获得。那么这样的话要想解出八个未知量,就需要四个对应点,也就是说我们只要给出四组点,就可以算出图像平面到世界平面的单应性矩阵H。这也是张氏标定采用四个角点的棋盘格作为标定物的一个原因。

  好了,通过上面的分析,我们可以通过四组点来获得单应性矩阵H了。我们最终的目标是要求出外参和内参。但是呢, H = A [ r 1 r 2 T ] H = A\left[ {\begin{array}{c} {{r_1}}&{{r_2}}&T \end{array}} \right] 是内参矩阵和外参矩阵的结合。这就要求我们采取一些方法,先把内参求出来,之后就能顺势求出外参。具体步骤如下:

  首先把H改写成三个列向量的形式,即 H = [ h 1 h 2 h 3 ] H = \left[ {\begin{array}{c} {{h_1}}&{{h_2}}&{{h_3}} \end{array}} \right] ;接下来我们看下面的公式:

image-20220413213032345

上式有两个约束条件,分别为:

image-20220413213402773

上面两个约束均为旋转矩阵的性质。

我们由公式1可得:

image-20220413213425409

image-20220413213521389

  现在我们重点关注公式3和公式4,从这两个公式中可以发现,h1 ,h2 是我们上一步求单应性矩阵可求出的量,那么现在的未知数就集中在矩阵A中了,A为内参矩阵,其中有五个参数,分别为: 1 d x , 1 d y , τ , u 0 , v 0 \frac{1}{{{d_x}}},\frac{1}{{{d_y}}},\tau ,{u_0},{v_0} 。现在我们想要解出这五个参数,就需要三个单应性矩阵(一个矩阵可以有两组方程,三个可以产生6个方程,从而可以解出五个参数)【注:也可以用两个单应性矩阵,这样就舍弃掉一个内参 τ \tau ,也即让 τ = 0 \tau = 0 现在可以想一下,我们如何得到三个不同的单应性矩阵呢?其实也很简单,我们可以拍摄三张标定物平面的图片来实现,当然这三张图片我们需要改变相机和标定板之间的相对位置,这样我们才能获取到不同的单应性矩阵。这里也就解释了张氏标定法需要得到不同拍摄角度的标定板图片的原因了。


​  上面我想已经把求解相机内参的过程描述清楚了,接下来是对上面的公式的一些数学变化,没有什么物理上的含义。

首先另:

image-20220413214037093

  可以看出 B T = ( A T A 1 ) T = A T A 1 = B {B^T} = {({A^{ - T}}{A^{ - 1}})^T} = {A^{ - T}}{A^{ - 1}} = B , B B 是一个对称阵,所以B的有效元素只剩下六个(因为有三对对称的元素是相等的,所以只要解得下面的6个元素就可以得到完整的B了),让这六个元素构成向量b。

image-20220413214246045

接下来有:

image-20220413214335211

其中,

image-20220413214408340

结合公式3、公式4、公式5可得:

image-20220413214428564

进一步写成矩阵的形式如下:

image-20220413214447241

公式6其实是和公式3、4所表达的含义是一样的。


  通过上面的一系列运算,我们算是把相机的内参矩阵求出来了,对于外参矩阵,我们很容易通过下面的矩阵进行求解:

image-20220413214529167

得:

image-20220413214547151

至此,我们就求出了相机的内外参数。

🌴最后唠唠

  这部分的内容其实写了很久了,但由于是word编辑的并含有大量的公式,放到博客中会乱码,于是就没有整理,这次稍微整理了一下,但是大多数公式放的是图片,这样不知道会不会影响大家的观感,如果想要公式不是图片的,可以留言获取📝📝📝

 
 
如若文章对你有所帮助,那就🛴🛴🛴

咻咻咻咻~~duang~~点个赞呗

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。