SLAM~CH12
·
在经典的SLAM中一旦确定了路标点的位置,就可以算作建图完成。但这种没办法完成导航、避障等功能,于是要用到稠密的地图。
建图的需求:定位,导航,避障,重建,交互。
单目稠密重建
问题为:已知每一帧的对应的轨迹(位姿),以第一幅图像为参考帧,计算每个像素的深度。
步骤:1. 假设所有像素的深度满足某个初始的高斯分布
2. 当新数据产生时,通过极线搜索和块匹配确定投影点的位置
3. 根据几何关系计算三角化后的深度及不确定性
4. 将当前的观测融合进上一次的估计中(深度滤波器)。若收敛则停止,否则返回第二步。
极线搜索和块匹配
假设:不同图像间整个小块的灰度值不变(假设性更强了)
计算小块之间的差异:

这里是相关性,接近0表示不相似,接近1表示相似。
由于沿着极线搜索通常会得到非凸函数,非线性优化耗时,所以通常使用深度滤波器。
高斯分布的深度滤波器

则由高斯分布的乘积:

问题是如何计算新数据不确定性:

通过几何关系可以得到:


代码实践:


可优化的部分
| 问题 | 解决 |
| 对梯度不明显的地方,使用块匹配时没有区分性 | 书里没有 |
| 深度的正态分布:实际场景不是对称的结构,近处不到0,但远处有无穷远 | 使用逆深度,即d^(-1) |
| 当相机发生明显旋转时,块匹配难以成立 | 在块匹配之前把当前帧与参考帧之间的运动考虑进来,算出局部范围内参考帧与当前帧的坐标变换构成的仿射变换 |
| 稠密深度图的计算费时 | 并行化(GPU) |
| 因为各像素的计算是完全独立的,可能出现深度图不平滑的情况 | 给深度估计加上空间正则性 |
| 没有显式地处理外点 | 只要NCC大于一定值就认为出现了成功地匹配 |
R-GBD稠密重建

从点云重建网格
八叉树地图
优点:灵活、能压缩、能随时更新

在八叉树里,节点中储存是否被占据的信息,当某个方块都被占据或者都不被占据时,就没有必要展开这个节点。
用概率表述是否被占据这件事

代码

更多推荐
所有评论(0)