最近由于项目需要,简单学习了一下针孔模型与基本的投影几何,在这里做个记录,便于日后快速查阅。主要参考了《学习OpenCV》,胖大星越来越胖的博客--单目相机标定 和peggyryo的博客--OpenGL图形管线和坐标变换等,感谢相关作者的分享。
1 针孔摄像机模型
对于假想的针孔摄像机,从针孔到图像平面的距离就是焦距。如下图1所示,f是焦距,Z是物体到摄像机平面的距离,X是物体长度,x是图像平面上物体的像。由三角形相似性得到,
图1 针孔摄像机模型
如果我们交换针孔和图像平面,如下图2所示,针孔被当成投影中心,从远处物体发出的光线,到达投影平面的中心,光轴与图像平面的交点被称为主点。这样目标的投影不再是倒立的,形成了新的相似关系,
图2 等价形式的针孔模型
理论上主点即是成像仪的中心,但实际上,由于制作工艺等原因,芯片的中心通常不在光轴上。
2 基本投影几何
2.1 透视投影
透视投影的目的是将物理空间的点映射到投影表面上。注意: 相机的透视投影和opengl的原理相似,但实际过程还是有很大差别(例如,opengl需要设置远近裁剪面,而相机有物理焦距。opengl的透视投影包含规范化和裁剪)两者的投影矩阵不同,注意不要搞混。
2.1.1 相机坐标-->图像物理坐标
2.1.2 图像物理坐标-->图像像素坐标
如上图,(u,v)表示以像素为单位的图像坐标,(x,y)表示以mm为单位的图像坐标。假设XO1Y坐标系的原点O1在UO0Y坐标系下的位置为(u0,v0),每个像素的物理尺寸为dx*dy,则可以得到
2.1.3 世界坐标-->相机坐标
摆放摄像机的过程,等价于一个坐标系到另一个坐标系的平移、旋转。