DSO-2-跟踪与建图
跟踪
运动假设
上面说的旋转运动各有3种:
- 绕x轴: 逆时针转,顺时针转,不转 (3种)
- 绕y轴: 逆时针转,顺时针转,不转 (3种)
- 绕z轴: 逆时针转,顺时针转,不转 (3种)
最终,有 3x3x3-1=26种 ,因为3个轴都不做旋转的时候,就相当于匀速模型了。
激活点跟踪
- 从顶层开始,向底层遍历:
- 如果某一层的大于能量阈值的点>60%,(有用的点太少了),则放大外点阈值,然后使用LM来优化,该层再进行优化一次,一共2次
- 如果某一层能量值>1.5倍能量最小值,认为跟踪失败
- 直到遍历到第0层(原图)
- 第0层的优化结果<小于阈值的时候,就停止优化,把目前最好的优化结果作为下一次跟踪的阈值?(相当于使用动态阈值,提高鲁棒性)
需要注意的是:
- 在
第一节-初始化
的时候,对光度参数求导,由于参考帧的光度参数\(t_i e^{a_i},b_i\)和当前帧的光度参数\(t_j e^{a_j},b_j\)都是不知道的,于是在初始化的时候把两帧的光度参数看做是一个整体来进行求导
初始化时对光度参数的求导(最终求得的是相对的光度参数的导数):
- 在跟踪的时候,参考关键帧的光度参数\(t_i e^{a_i},b_i\)是已知的(通过初始化进行固定,然后通过初始化得到的相对光度参数计算得到?),我们只希望得到关于当前帧j的光度参数的导数,而不是作为一个整体的相对光度参数导数,于是有:
关键帧筛选
建图
候选点跟踪
如果新的一帧被认为是关键帧,并且在这一帧提取了一些点出来,但是这些点的逆深度是不知道的,这些点都被作为Immatture未成熟点,一般的做法是使用后面的帧如(t+1)帧来对这些点进行跟踪优化,得到这些Immatture未成熟点的逆深度。
- 上面的步骤得到了Immatture未成熟点在后一帧(t+1)帧的匹配点的像素坐标,现在需要反求出逆深度
下面是极线筛选的原理
候选点激活
- 上面是距离地图
- 为了控制激活候选点的密度和均匀性,如果某个候选点所在的距离地图的值很小(表明与某个激活点很近了),就不激活这个候选点了
- 上面的极线搜索、激活都只是得到了候选点逆深度的范围\([d_{min},d_{max}]\)
- 下面需要使用LM算法来得到具体的逆深度值