帮助文档:
同样提供
md
文件,在doc
文件夹中,可以下载下来,用Typora打开即可,
单目相机的标定是所有三维重建算法的基础,所以,大致明白单目相机的成像原理,以及基于OpenCV的标定流程,对于我们后序深入地学习三维重建算法至关重要。
相机标定的具体原理比较复杂,但好在OpenCV很多过程都帮我们封装好了,基于张正友标定发的单目相机标定具体步骤如下:
- 准备标定图片(不同位置、角度、姿态下拍摄,至少需要3张,以10~20张为宜)
- 对每一张标定图片,提取角点信息,并进行亚像素角点优化(绘制相应图像)
- 调用张正友标定方法,对相机进标定,也就是计算内参和畸变系数
- 对标定结果进行评价(重投影误差)
- 利用标定结果(内参、畸变系数),对任何输入的图像进行矫正
相信在明白了理论之后,阅读我们的代码应该非常容易:尽量命名做到望文知义、封装做到了面对对象、增加了额外注释。
- OpenCV安装与配置(尽量不需要选择特别新的OpenCV版本,很难编译通过)
- Clion安装与配置(Ubuntu是相类似的)
- 修改相应的配置路径
CMakeList.txt
,主要是OpenCV包的路径main.cpp
,里面标定图片文件夹路径,以及测试图片路径
之后点击运行即可(reload cmake project),当然你也可以用Visual studio来运行,因为是Cmake来管理环境变量的,所以迁移较为方便。代码已经在Windows、Ubuntu18.04下测试,能够运行。
简要的原理回顾如下:相机模型如下,主要包含四个坐标系:
四个坐标系的转换关系如下:
而我们主要关心的是从世界坐标系到像素坐标系的变换,它们的公式如下:
而相机成像过程中存在着径向畸变和切向畸变,合并后:
为了之后三维重建算法的精确性,我们必须对这些畸变进行矫正。我们可以通过张正友标定法得到相机的畸变系数,除此之外还有它的内参。获得了这两个参数,我们就能对相机的整个成像过程建立较为准确的映射关系(至少是单向的)。
标定用的图片搜集自互联网,感谢原作者!邮箱:[email protected],有问题欢迎提问!