相机标定:相机模型和畸变模型

一、相机标定方案

相机内参标定是确定内参和畸变参数(equidistqant畸变模型)或者(radial tangential模型)的过程。

本文首先介绍SLAM中常用的相机模型和畸变模型,随后介绍我们采用的两种内参标定方案:chessboard和Apriltag。

1.1相机模型和畸变模型

这里主要介绍pinhole模型和fisheye模型,简单涉猎omnidirection模型.

成像过程的统一投影模型可以用下图来描述

相机标定:相机模型和畸变模型_第1张图片

                                                                                            图1-1

 

为不失一般性,上图以fisheye相机的折射投影模型描述来世界坐标系下的空间点最终投影到图像平面的投影过程。记图像平面的投影点(u,v)到主点(cx,cy)的距离为r, 归一化平面上的投影点(x_c,y_c,1), 于是有r=\sqrt{(u-cx)^2+(v-cy)^2} = \sqrt{(x_c*f_x)^2 + (y_c*f_y)^2}. 这里的主点和光心的意义是相等的有点让人混淆,是因为该博文只是对投影过程做一个统一的泛化描述,为了不引起奇异,我们这里仍然区分主点和光心, 的计算在归一化平面上进行:r=\sqrt{x_c^2+y_c^2}.

 

相机搭配不同的镜头可以产生不同的镜头投影模型lens projections。

pinhole camera model是最常用的相机模型,pinhole camera以perpspective projection为主, 也称之为standard projection. 

fisheye camera model也是传统的perspective projection,只是会有若干个不同的lens projection models.这里列举常见的四种:

  • Standard/Rectlinear projection model(对应下图中绿色直线)
  • Stereographic projection(对应下图中的蓝色直线)
  • Equidistance (a.k.a. equiangular) projection(对应下图中的黑色直线)
  • Equisolid angle (a.k.a. Equal Area) projection(对应下图中的紫色直线)
  • Orthographic (a.k.a. Sine-law) projection(对应下图中的红色直线)

 

 

相机标定:相机模型和畸变模型_第2张图片

                                                                                                   图1-2

 

由上图可以看出,可以表示为焦距和入射角的函数, 具体如图三

相机标定:相机模型和畸变模型_第3张图片

                                                                                                 图1-3

 

对于这五种经典的镜头畸变模型,参考[1]给出了具体的formulate过程.这里只介绍pinhole camera和fisheye camera的projection和distortion模型的formulate过程。

x_c,y_c是归一化平面上的坐标,x_{distorted},y_{distorted}是带有畸变的图像坐标.

  • Pinhole camera

pinhole model (rectilinear projection model) + radial-tangential distortion

The Pinhole camera model is the most common camera model for consumer cameras. In this model, the image is mapped onto a plane through perspective projection. The projection is defined by the camera intrinsic parameters such as focal length, principal point, aspect ratio, and skew.

参数[k1,k2,p1,p2,k3]

       \left\{\begin{matrix} x_{distorted} = x_c(1+k_1*r^2+k_2*r^4+k_3*r^6)+ 2p_1*x_c*y_c+p_2(r^2+2x_c^2)\\ y_{distorted} = y_c(1+k_1*r^2+k_2*r^4+k_3*r^6)+2p_2*x_c*y_c+p_1(r^2+2y_c^2) \end{matrix}\right.

 

 

  • Fisheye camera

pinhole model (rectilinear projection model) + fisheye distortion

The Fisheye camera model is a camera model utilized for wide field of view cameras. This camera model is neccessary because the pinhole perspective camera model is not capable of modeling image projections as the field of view approaches 180 degrees.

参数:[k1,k2,k3,k4]

                                                     \left\{\begin{matrix} r = \sqrt{x_c^2 + y_c^2} \\ \theta = atan2(r, 1)=atan2(r) \end{matrix}\right.

                                        \theta_{distorted} = \theta(1+k_1*\theta^2+k_2*\theta^4+k_3*\theta^6 +k_4*\theta^8)

                                                    \left\{\begin{matrix} x_{distorted} = x_c*\theta_{distorted}/r\\ y_{distorted} = y_c*\theta_{distorted}/r \end{matrix}\right.

 

用得到的x_{distorted},y_{distorted}乘内参[f_x, f_y, c_x,c_y]得到的就是我们实际观测到的像素坐标了. 去畸变过程则是上述畸变过程的逆过程,一个直观的现象就是fisheye相机的图像去畸变之后,原来图像中的一个尺子从曲线变成了直线,perspective projection是能够保证直线的投影还是直线的.

 

二、标定过程

1、相机设置:

  • 光圈: 5.6. 大光圈容易导致背景虚化.
  • 帧率: 5 fps.
  • exposure_time: 10ms. 曝光时间过长会导致运动模糊.
  • gamma: 0.45. 由于降低了曝光时间,需要提高gamma来提升图像亮度,gamma值设得越小亮度越大.
  • gain: 关闭. 增益容易导致像素噪声. 

 

2、AprilTag + kalibr库

kalibr库的安装对系统环境要求比较苛刻,最好是clean的ubuntu环境,不要自行编译安装boost库,必须使用python2等等。建议使用kalibr给的二进制包CDE. 另外使用kalibr库时有个小bug:

kalibr_bagcreater --folder dataset-dir --output-bag awsome.bag

这个录制rosbag文件的程序正常运行时你会发现它输出的awsome.bag文件只有4.1K, 跟你输入的双目图像数据完全对不上, 如果你比较细心地开始查找issues你会发现有个热心人告诉你,需要在dataset-dir后面加个'.',没错就是这么可爱任性,dataset-dir/.

 

三、实验结果

软件设置exposure_time=10ms, gamma=0.45, 采240张AprilTag图像, 整体图像偏暗,用pinhole-radtan模型和pinhole-equidistance模型得到几乎一致的标定结果:

相机标定:相机模型和畸变模型_第4张图片

相机标定:相机模型和畸变模型_第5张图片

 

软件设置exposure_time=30ms, gamma=0.45, 采集125张图像,整体图像亮度明显提升,pinhole-radtan模型得到的标定结果报告:

相机标定:相机模型和畸变模型_第6张图片

相机标定:相机模型和畸变模型_第7张图片

 

 

四、Related Code

1、Supported models in Kalibr

2、Distortion Models in ROS (distortion_models.h)

  • plumb_bob: a 5-parameter polynomial approximation of radial and tangential distortion
  • rational_polynomial: an 8-parameter rational polynomial distortion model
  • equidistant (lunar)

3、hengli/camodocal

  • Pinhole camera model
  • Unified projection model
  • Equidistant fish-eye model

4、uzh-rpg/rpg_vikit/vikit_common: support pinhole, atan and omni camera

5、ethz-asl/aslam_cv2: support pinhole and unified peojection and radtan, fisheye and equidistant distortion

6、cggos/okvis_cg: support pinhole peojection and radtan and equidistant distortion

7、ptam_cg/src/ATANCamera.cc: support ATAN camera model

 

 

 

参考文献

1.Models for the various classical lens projections.

2.各相机模型综述

3.相机模型--omnidirectional camera.

你可能感兴趣的:(机器人SLAM技术,算法)