三维重建学习之旅(二)相机标定之(1)
2016-06-25 20:28
239 查看
1、相机的标定之一
我们为什么要进行相机的标定?相机标定的原理是什么?
相机的标定在三维重建过程中所起到的作用是什么?
一般使用什么方法来进行相机的标定?
这些问题都是笔者在刚接触标定时产生的疑问。。。笔者作为新手知道新手想要了解到什么,怎么解释才更通俗易懂。
我们先想象一下,相机是如何将现实中的物体呈现在二维图片上的?
概括一下一般分为三个步骤(以针孔摄像机为例):
刚体变换(regidbody motion)
在三维空间内,当物体不发生形变时,对几何物体做旋转平移操作,称之为刚体变换。
通俗点说,刚体变换就是将物体从世界坐标系(XW,YW,ZW)到摄像机坐标系(XC,YC,ZC)的过程。
对应的数学表达式如下:
首次出现数学表达式,一开始会有点头疼,这种矩阵形式的表达式在三维重建中将十分常见,仔细看其实也没什么,R代表旋转矩阵,T代表平移向量;X代表物体上的点在空间坐标系中的坐标,Xc代表其在相机坐标系对应的点。因刚体变换本身不会发生形变,所以只需要进行旋转平移就可以将世界坐标系与摄像机坐标系联系起来。
说得很多很啰嗦,有图!
[b] R=r1*r2*r3:[/b]其由三个方向的θ控制,故具有三个自由度。
[b]透视投影[/b]
用中心投影法将形体投射到投影面上,从而获得的一种较为接近视觉效果的单面投影图。
这一步是将刚体变换到摄像机坐标系(XC,YC,ZC)的物体投影到空间图像坐标(X,Y)
图中的 f 即OcP就是摄像机的焦距,相机内参;
Oc是摄像机的光心;
Zc是摄像机的主光轴。
假设在摄像机坐标系有一B(XB,YB)点,根据相似三角形,很容易得到投影在空间图像坐标b点的坐标(x,y):
[b]离散化
[/b]
众所周知,我们拍摄的图片是以像素为单位的,我们看到的图片其实是一个个小的像素点组合而成,像素越高,图像越清晰。
生成图片的最后一步就是将投影到空间图像坐标(x,y)转换成离散坐标(u,v);
(u,v)坐标系的原点在图片的左上角(其实是存储器的首地址)如下图所示,单位为数量单位(个);
下图O点是光轴图投影平面的焦点(V0,U0)。
对应的变换:
其中dx代表x轴方向一个像素的宽度,dy代表y轴方向上一个像素的宽度(很多摄像机拍出来的照片像素点都不是正方形的)。dx、dy为摄像机的内参数。(u0,v0)称为图像平面的主点,也是摄像机的内参数。其实相当于对x轴和y轴的离散化。其可以运用齐次坐标,将上式写成矩阵形式,如下:
到这里以针孔摄像机为例,从空间到图像对应的三个变换就阐述到这里,不知道笔者有没有说的明白;
下面是将三个变换对应的矩阵结合起来,即将三个变换矩阵相乘,得到世界坐标系(XW,YW,ZW)和图像坐标系(u,v)的对应关系
下图是大神博客中画的示意图,一目了然。
说明:
1、上述红体字是我们做标定所要得到的相机的内参,这就解释了我们为什么要做标定。
2、上述矩阵中很多都是其次的,很显然用其次坐标是为了运算的方便。
3、此博文对世界坐标系,图像坐标系没有进行说明。具体可参照 http://blog.csdn.net/pinbodexiaozhu/article/details/43303983博客的内容,其讲得挺详细的。
相关文章推荐
- 51nod 1095 Anigram单词
- cookie vs session
- 普通表到分区表转换
- 在 CentOS7 上安装 MongoDB
- AJAX之JSON
- Ubuntu下使用skynet笔记(1)
- 【Computing Geometry --计算几何】初级篇 <一>
- Mysql备份和恢复
- 在 CentOS7 上安装 MySQL5.7
- JAVA中的策略模式
- C# Lambda表达式
- 机房收费—日结报表
- CGRectGetHeight 等得作用
- leetcode.354. Russian Doll Envelopes
- js基础知识总结
- Hibernate的批量插入(&&JDBC)
- Sublime Text 3 Conclusion
- 在 CentOS7 上安装 Tomcat9
- Androidstudio安装genymotion插件
- eclipse不自动弹出提示(alt+/快捷键失效)