一、三个坐标系(世界坐标、相机坐标、图像坐标)
1、一个定则(右手定则):
注:图片来源http://www.zybang.com/question/35583619443d2163d5dd731826c47f1a.html
2、三个坐标系图解:
3、两个变换
- 刚体变换(世界坐标【x,y,z】->相机坐标【Xc,Xc,Xc】)
透视变换 (相机坐标->图像坐标【Xu,Xv】)
-
- 公式:
- Xu = Xc * f / Zc
- Xv = Yc * f / Zc
- 推倒过程:
- 将xz面、yz面分开看
- 公式:
-
二、线性回归
概念:当Ax = B无解时,需要通过最小化误差的平方和(即最小二乘)找最优解
三、OpenCV图像配准:没有ICP算法?
内容:匹配两帧之间的特征点( ∈R3 ∈ R 3 )
1、一个最终目的:
- 最小化对应点的变化误差(即
Min∑i=1n=||q−(Rp+t)||2 M i n ∑ i = 1 n = | | q − ( R p + t ) | | 2)
- 最终计算出相机位姿
2、两个方法:
- 直接法
- 特征法
|2017.2.10.23.04
参考资料:http://www.cnblogs.com/gaoxiang12/
3、匹配流程
1. 读取图片(包括RGB和DEP)-> imread
2. 构造特征点提取器和描述子提取器(SIFT)-> cv::FeatureDetector\DescriptorExtractor::create
3. 提取关键点detect(rgb,cv::KeyPoint)
4.计算描述子compute(rgb,cv::KeyPoint,cv::Mat)
5.匹配描述子
vector< cv::DMatch > matches;
cv::FlannBasedMatcher matcher;
matcher.match( desp1, desp2, matches );
6. 筛选匹配关系->去掉距离太远的匹配
|2017.2.19.11.21
四、视觉里程计(visual odometry)
1、概念:匹配两帧->估计运动->累加运动
2、流程:
- 计算两帧的关键点和特征描述子
- 匹配两帧的关键点和特征描述子(PnP)
- 如果inliers太少,则丢弃该帧,否则融合点云
- 重复第一步
五、ICP(iterative closest point 迭代最近点)-> PCL
->求相机位姿,ps:PnP->OpenCV
- 目的:求出两个点云集之间的R、t
- 通过迭代最近点
- 两种方法:
- SVD(线性代数)
- 非线性优化
- 【NOTE】
- 与相机无关,没有出现相机模型。
六、两个方程
1、运动方程:描述机器人的运动 -> 朝那边走(含有噪点)
2、观测方程:描述关键点怎么来 -> 朝那边看(含有噪点)
⋆ ⋆ 为了求机器人的位置和关键点的位置
七、三个概念
∗ ∗ 机器人位姿:旋转+平移
∗ ∗ 优化图:包含节点和边,节点代表关键帧,边代表位姿约束
∗ ∗ 位姿约束(ps:类比位移约束->如果给定某个值,相应的几何会按照指定的方向和值移动)
八、多种地图
- 路标地图(采用滤波器方法,包括EKF、PF(粒子滤波))
- 度量地图(2D/3D->平面/点云)
- 拓扑地图(可与图类比)
| 2017.2.20.10.16
- 地图又可分为局部和全局地图:
- 局部地图描述附近的特征点信息,这些特征点用来和当前帧匹配来求相机位置。
- 全局地图则用来表达整个环境。