极简单目摄像机标定理论

目录

 

前言

一:opencv自带的相机标定函数

二:单目相机标定关系详解

 1.世界坐标系到摄像机坐标系

 2.摄像机坐标系到图像坐标系

3.图像坐标系到像素坐标系


前言

摄像机标定:

在图像测量过程以及机器视觉应用中,为确定空间物体表面某点的三维几何位置与其在图像(照片)中对应点之间的相互关系,必须建立相机成像的几何模型,这些几何模型参数就是相机参数。在大多数条件下这些参数必须通过实验与计算才能得到,这个求解参数(内参、外参、畸变参数)的过程就称之为摄像机标定。

如下图,世界坐标系表示的就是现实中空间某物体的真实坐标(XwYwZw),并且单位是mm,长度单位。经过摄像机拍回来的图片呢,就变成了一个个离散的像素点(u,v),单位为pixel。两个不同的表达形式,两种单位,这是怎么转换的?这里面就涉及到H这个转换关系了,这个是神秘的H,就是我们要标定的重点内参、外参、畸变参数,后面重点就是揭开它的面纱。

一:opencv自带的相机标定函数

先简单直观的看下opencv这个数字图像处理的库是怎么对相机进行标定的。

四步骤:

1.网上下载一个标定靶图片,自己打印一个,贴起来

2.换着角度换着相机位置,拍摄多幅标定靶的图片

3.写好程序,开始标定(这里有一个,奉献出来,链接见文末)

4.输出一堆结果数据

其中程序中很重要的一块,是利用了这个一个opencv标定工具包:

cvCalibrateCamera2( object_points,

                   image_points,

                   point_counts,//指定不同视图里点的数目

                   cvSize(image_width,image_height),

                   intrinsics,

                   distortion_coeff,

                   rotation_vectors,

                   translation_vectors,

                   0);

注释:

object_points中,InitCorners3D(object_points, ChessBoardSize, NImages, SquareWidth);

1.要已知ChessBoardSize=cvSize(ChessBoardSize_w,ChessBoardSize_h); 也就是棋盘格的X方向上的角点个数和Y方向上的角点个数;

2.NImages,:所有待标定的图片数目;

3.SquareWidth = 26.1,单个黑色正方形棋盘格子的边长单位mm。(如图所示)

 

 抛弃其中繁琐的计算,细细思考一下这个过程:已知标定靶的横纵角点数量和每个黑色方格的物理长度squarewidth,就相当于知道了该标定靶棋盘格的所有物理参数,转换着位姿拍摄标定靶;然后在图像上得到各个物理世界角点所对应的像素坐标,最后生成一堆数据(内参、外参、畸变参数),即相机标定的结果H,也就是世界坐标系和像素坐标系的转换关系。

内参:顾名思义,摄像机内部的参数,是由于摄像机自身制造等原因造成独有的参数,和外部没关系,固有的。

外参:外部引入的,由于摄像机自身发生旋转,平移等的动作,就引入了外部的一些参数,是变化的。

畸变参数:理论上也归属于内参。

有了这些参数,就可以将世界坐标系和像素坐标系建立了关系,目的就是这个,后面将详细剖析这部分关系。

二:单目相机标定关系详解

如下图,就可以简述摄像机标定的整个过程了。下面我们一步一步的分析整个过程,开始吧。

 1.世界坐标系到摄像机坐标系

 

  1. Ow−XwYwZw: 世界坐标系,单位mm
  2. Oc−XcYcZc:相机坐标系,单位mm
  3. o−xy:图像坐标系,单位mm
  4. uv-:像素坐标系,单位pixel

注释:

  1. Ow---建立世界坐标系的原点位置
  2. Oc---摄像机的光心
  3. P(Xw,Yw,Zw)---世界坐标系中的一点
  4. p---图像中的成像点,在图像坐标系中的坐标(x,y),在像素坐标系中的坐标(u,v)
  5. f---相机焦距,o与Oc的距离

 言归正传,上面我们说到世界坐标系到摄像机坐标系经过的是刚体变换,何为刚体变换?

刚体变换:一幅图像中的两点间的距离,经过变换到另一幅图像中后仍然保持不变;那有什么变换形式呢?旋转,平移,镜像。

 这里面就说到的就是旋转和平移,在坐标转换里面被称之为旋转矩阵R和平移矩阵T,表达的是世界坐标系原点与摄像机光心之间的关系因其与摄像机无关,所以称这两个参数为摄像机的外参数。细细思考下,世界坐标系原点抛一个球,落在了摄像机坐标系原点上,这个球会发生了什么样子的变换呢?1.两点之间,位置变了,肯定会有距离关系,平移向量T也就是从世界坐标系的原点到光心的矢量;2.应该还会旋转。

这样就总结了两点:1.距离,因为在x,y,z的坐标系中,可以用向量形式表示空间中的任意一点;2.旋转,同样的x,y,z就绕着这三个轴进行旋转,也一样能表示任何一个旋转角度。这样就是平移矩阵T和旋转矩阵R的由来。R+T是不是就可以在三维空间中随心所欲的移动了,everywhere can go。

这里贴自己的笔记图片,丑了点,望见谅。

R=r1*r2*r3,其由三个方向的旋转角度共同决定,故具有三个自由度,也就是欧拉角(Roll, Pitch, Yaw)

注释:如果对其中绕各轴旋转矩阵具有感兴趣的,为什么采用正弦和余弦这样表示,查看这里有个视频,很清楚:旋转关系

 2.摄像机坐标系到图像坐标系

 何为透视投影(Perspective transformation):

定义:用中心投影法将形体投射到投影面上,从而获得一种较为接近视觉效果的单面投影图;

特点:近大远小,不平行于成像平面的平行线会相较于消隐点(vanish point)

举例:皮影戏

 注释:摄像机坐标系到图像坐标系转化中,图像坐标乘以Z?等于摄像机坐标,其中Z?是摄像机光心到成像平面之间的场景中真实物体之间的距离。三维世界中物体的一点,对应着二维图像坐标系中的一个坐标,而二维图像坐标系中的一个坐标,对应着Z?=N,(N为自然数)的一系列三维世界中的点。这也就是引入双面视觉,用于策略Z?,从二维图像准确对应三维空间中一点的原因。

3.图像坐标系到像素坐标系

 图像坐标系和像素坐标系的转换,是已经将物体投影到了成像平面上进行的二次转换。

回顾下:

 

 

世界坐标系中的一点,单位mm,经过R,T旋转平移矩阵后,转换到了摄像机坐标系,单位mm;摄像机坐标系经过透视变换,这一点坐标被转换到了图像坐标系,焦距f单位mm,转换后单位还是mm;下一步就是图像坐标系到像素坐标系的转换,像素坐标系下的单位是离散化的,单位pixel。这是怎么发生转换的呢?

带着这个问题,发现图像坐标系乘以另一个矩阵,就得到了像素坐标系下的坐标。其中,每个像素的物理尺寸大小为 dx * dy ,表示每一列和每一行分别代表多少mm,即1pixel=dx mm ,这样就将连续的图像坐标系转换到了离散的像素坐标系(u,v),如同这样:世界坐标系中的一个矩形框,在像素坐标系下,成了这个样子,后者也就是变成相机成像后的样子。

 

中间的所有变换矩阵呢,统称起来叫做单应性矩阵,如下图所示:

 

通常令最后一个元素h33为1或者使其F范数为1,其自由度为8;

理论上,8自由度的H我们至少需要4对对应的点(世界坐标系对应像素坐标系)才能计算出单应矩阵,至少需要四个点。这个时候知道opencv自带的相机标定函数cvCalibrateCamera2为什么需要知道标定靶的信息了吧。

vs2015的opencv相机标定:链接:https://pan.baidu.com/s/1-Gjf12sMuZHYCzqmas62Mg 
提取码:7ypm

 

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

钱多多先森

你的鼓励,是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值