基础内容,本来没想写,但很重要还是复习下。
一、概念
1、世界坐标系
2、相机坐标系
小孔成像的孔,即相机的光心建立起的坐标系。(小孔模型可以把三维图形投影到2D平面)
3、归一化相机坐标系
把相机坐标系(x, y, z)三个数除以z进行归一化处理,最后一维的数值是该点距离相机成像平面的深度。这个体系不存在。
4、像素坐标
在物理成像平面上固定着一个像素平面 o - u -v, 像素坐标 [u, v]^T。
二、针孔相机模型
1、实际:
物理成像平面P‘ --(焦距f)-- 光心O – 深度(Z)-- 现实空间点P
得到P’和P的转换关系:
X‘ = fX / Z; Y’ = fY / Z.
2、针孔模型:
物理成像平面P‘ --(焦距f)-- 光心O --(焦距f)-- 物理成像对称平面 – 深度(Z)-- 现实空间点P
由于相机最后要得到一个个像素,引出像素坐标。这里我的理解是像素坐标是物理成像平面的转换(缩放和原点的平移),得到像素坐标的关系:u = αX‘ + Cx, v = βY’ + cy
最后带入得到:
通俗来讲: 该点距离相机成像平面的深度(Z) 乘 像素坐标 = 相机的内参数(K) 乘 相机坐标系下的坐标(P)
3、外参
相机坐标系下的坐标(P)是 世界坐标(Pw) 根据相机的当前位姿变换到相机坐标系下的结果。位姿由R和t描述,这是外参。下式T是转换矩阵。外参会随着相机运动发生改变,也是SLAM中待估计待目标,代表机器人的轨迹。
三、单目相机成像过程
分为桶形畸变和枕形畸变,还有切向畸变。至此总结单目相机成像过程。
世界坐标系Pw --> 得到相机坐标 --> 归一化,投影到Z=1的平面上 --> 如果有畸变就把畸变参数带进去 --> 把归一化坐标经过内参得到像素坐标。
四、双目相机模型
原理:通过同步采集左右相机的图像,计算图像间视差,以估计每一个像素的深度。高博说这个由于计算量的原因,需要使用GPU和FPGA,后期介绍。
五、RGB-D相机模型
分为结构光和脉冲光主动测量每个像素的深度:红外结构光(Kinect 1代等),飞行时间(Kinect 2代等)。
无论哪种类型都会发射红外光,其中飞行时间(ToF)方法和激光传感器的方法很接近,激光传感器是逐点扫描获取距离,ToF相机是获得整个图像的像素深度。
总之RGD-D数据还可以生成点云,还可以对点云数据进行处理。但缺点很多,太贵了,光被干扰,材质问题等等。
六、OpenCV的基本操作
1、熟悉opencv对图像的处理
报错一堆,不急慢慢搜:
这个错误是因为引用的东西是C++14,cmakelist文件里列得是11,把11改成14