合规国际互联网加速 OSASE为企业客户提供高速稳定SD-WAN国际加速解决方案。 广告
# 10. 相机标定 相机标定的目的,就是得到相机内参矩阵和畸变矩阵,以便于消除畸变和目标测距,矩阵如下: ```[tex] \texttt{cameraMatrix:} \quad \bf{A} = \left[ \begin{matrix} f_x & 0 & c_x\\ 0 & f_y & c_y\\ 0 & 0 & 1 \end{matrix} \right] ``` ```[tex] \\ \texttt{distCoeffs: } (k_1, k_2, p_1, p_2, [,k_3[,k_4,k_5,k_6[,s_1,s_2,s_3,s_4[,\tau_x,\tau_y]]]) \text{of 4, 5, 8, 12 or 14 elements} ``` 先说明什么叫做相机畸变,如下图。 | ![distcoeff](https://img.kancloud.cn/fa/e5/fae5f9b25135dffbe3c205bc3b8178d9_378x175.png) | | :----------------------------------------: | | *枕形畸变(左) 与 桶形畸变(右)* | 此处先引入一个概念叫做鱼眼相机。 鱼眼相机可以被用于里程计(odometry)以及vslam(simultaneous localization and mapping)。其他应用中,有包括监控系统(surveillance system),GoPro,虚拟现实(VR)要求捕获360度视场角(fov),和一些拼接算法中。这些camera使用了一些列用了复杂的镜头扩大了相机的fov,使它能够捕获广阔的全景(panoramic)或者半球形(hemispherical)图像。但是,镜头是通过扭曲图像中的视线来实现这种超广角视角。所谓相机畸变,则要从相机成像说起,相机成像原理会使相片呈鱼眼形状蜷曲, | ![fisheye](https://img.kancloud.cn/35/55/35552f2b21a599ce8225510d08c1968f_720x225.jpg) | | :------------------------------------------------------: | | *鱼眼模型成像图片(左) 与 消除鱼眼效应图片(右)* | 由于鱼眼镜头会产生极大的变形,因此针孔模型无法为鱼眼镜头建模。为此,我们需要进行相机标定来消除鱼眼模型的影响,进行测距 Camera Calibration是计算Camera的extrinsic(外参)和 intrinsic(内参)的过程。一旦你标定完成了一个camera,你即可从2维图像中去恢复3维图像。你同样可以在在一个鱼眼相机中获得未失真的图像。 相机标定可以使用 OpenCV code,也可以使用 matlab工具箱,下面我们介绍用OpenCV code进行相机标定。 为得到相机的 cameraMatrix 和 distCoeffs 两个矩阵,我们进行相机标定,采用OpenCV例程代码,详情见文件夹:opencv\samples\cpp\tutorial_code\calib3d\camera_calibration | 文件名 | 作用 | | ---------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | camera_calibration.cpp | 程序源文件 | | in_VID5.xml | 程序的输入参数文件,将程序编译后改名为 default.xml (要求和编译的可执行二进制程序同级目录),每一个参数都有很好的注释。包含输入图片、视频、还是直接调用摄像头,标定板类型、标定板大小、输出文件等等。 | | VID5.xml | 如果输入为图片,在此处键入图片路径。 | | out_camera_data.yml | 以yml格式导出的标定内容,可以自行修改得到相机内参矩阵和畸变矩阵 | 需要使用标定板 | ![标定板](https://img.kancloud.cn/c8/e8/c8e8dede36769a52732b784931621af3_1754x1240.png) | | :-----------------------------: | | *棋盘标定板* | 注意事项: - 如果使用视频进行标定,有热键 ‘u’ 和 ‘g’ 。 - 输入尺寸影响标定结果。 - 在标定好后焦距不要变化。