real-time scalable dense surfel mapping:基于surfel的全局一致稠密建图系统

基于surfel的
使用稀疏方法追踪
全局一致的模型
动态处理策略:
通过建立不稳定的surfel,如果一定时间内被观测/融合次数不达标则作为离群值删除。

系统总览

在这里插入图片描述
我们的系统融合深度和强度(灰度)图像,到一个由surfels组成的全局一致的地图。其中使用Localization System(ORB-SLAM2)做定位、闭环优化、生成位姿图(pose graph)。系统的关键是1基于超像素的surfel,2基于位姿图的surfel融合,3在定位系统完成闭环优化后,对地图进行快速形变以满足全局一致。

记号

每一个surfel S = [ S p , S n , S c , S w , S r , S t , S i ] T S=\left[S_{\mathbf{p}}, S_{\mathbf{n}}, S_{c}, {S}_{w}, S_{r}, S_{t}, S_{i}\right]^{T} S=[Sp,Sn,Sc,Sw,Sr,St,Si]T包含属性:
S p ∈ R 3 S_{\mathbf{p}} \in \mathbb{R}^{3} SpR3 位置
S c ∈ R S_{c} \in \mathbb{R} ScR强度(颜色)
S w ∈ R + S_{w} \in \mathbb{R}^{+} SwR+
S r ∈ R + S_{r} \in \mathbb{R}^{+} SrR+半径
S t ∈ N S_{t} \in \mathbb{N} StN更新次数。
S i ∈ N S_{i} \in \mathbb{N} SiN关联的关键帧索引
系统的输入包括
强度图像(灰度图)
深度图像
相机的运动估计和位姿图(pose graph) (来自与ORBSLAM2)

定位系统和位姿图

使用了ORBSLAM用于相机跟踪和闭环优化。
对于每个输入帧(当前帧),SLAM系统会输出相机位姿估计 T w , i ∈ S E ( 3 ) \mathbf{T}_{w, i} \in \mathbb{S} \mathbb{E}(\mathbf{3}) Tw,iSE(3),并给出当前帧的参考关键帧 F r e f F_{ref} Fref(沿用了ORBSLAM2中的概念,是与当前帧共视程度最高的关键帧)。
位姿图,即ORBSLAM2中的共视图,顶点是关键帧,边是关键帧共享的特征点数量。

快速地图变形

如果SLAM系统中的位姿图进行了更新,那么我们也会变形所有的surfel(位姿和法向)以保证全局一致,在进行当前帧的surfel初始化和融合之前。
我们以surfel的参考帧作为依据进行变形。对每一个surfel S S S,其参考帧为 F F F,我们使用变换 T w , F ^ T w , F − 1 \mathbf{T}_{w, \hat{F}} \mathbf{T}_{w, F}^{-1} Tw,F^Tw,F1来对 S S S的法向和位姿进行处理,其中, T w , F ^ \mathbf{T}_{w, \hat{F}} Tw,F^ T w , F − 1 \mathbf{T}_{w, F}^{-1} Tw,F1分别为关键帧 F F F优化前后的位姿。

超像素提取

首先通过初始化聚类中心,然后在分配步骤和更新步骤之间交替,根据像素的强度,深度和空间位置对其进行聚类。
这种超像素分割适用于存在空缺深度的图像。
通过在图像上建立网格,初始化簇中心 C i = [ x i , y i , d i , c i , r i ] T C_{i}=\left[x_{i}, y_{i}, d_{i}, c_{i}, r_{i}\right]^{T} Ci=[xi,yi,di,ci,ri]T
x i , y i x_{i}, y_{i} xi,yi是该簇像素的平均位置,初始化为位置中心(网格中心)。
d i d_{i} di是平均深度,初始化为[xi,yi]像素的深度,或者为NaN。
c i c_{i} ci是平均强度值,初始化为[xi,yi]像素的强度。
r i r_{i} ri超像素半径(定义为簇内点的最大距离)。

分配

我们定义像素 u = { u x , u y , u d , u i } u=\{u_x, u_y,u_d,u_i\} u={ux,uy,ud,ui}和一个候选簇中心 C i = { x i , y i , d i , c i } C_i=\{x_i,y_i,d_i,c_i\} Ci={xi,yi,di,ci}之间的距离
D = ( x i − u x ) 2 + ( y i − u y ) 2 N s 2 + ( c i − u i ) 2 N c 2 D d = D + ( 1 / d i − 1 / u d ) 2 N d 2 \begin{array}{c} D=\frac{\left(x_{i}-\mathbf{u}_{x}\right)^{2}+\left(y_{i}-\mathbf{u}_{y}\right)^{2}}{N_{s}^{2}}+\frac{\left(c_{i}-\mathbf{u}_{i}\right)^{2}}{N_{c}^{2}} \\ D_{d}=D+\frac{\left(1 / d_{i}-1 / \mathbf{u}_{d}\right)^{2}}{N_{d}^{2}} \end{array} D=Ns2(xiux)2+(yiuy)2+Nc2(ciui)2Dd=D+Nd2(1/di1/ud)2
D D D D d D_d Dd分别是在当前像素无有效深度和有有效深度值时的距离值。
N s 2 , N c 2 , N d 2 N_{s}^{2},N_{c}^{2},N_{d}^{2} Ns2,Nc2,Nd2是为在求和之前标准化距离、强度和深度。
遍历图像的每个像素,每个像素寻访周围四个候选聚类中心,如果目标像素和候选簇中心具有有效的深度值,则基于 D d D_d Dd进行比较并分配;否则采用 D D D

更新

一旦所有像素得到分配,更新簇中心。 x i , y i , c i x_i,y_i,c_i xi,yi,ci由属于该簇的所有像素均值获得。而深度 d i d_i di可以通过最小化一个Huber误差获得:
E d = ∑ u L δ ( u d − d i ) E_{d}=\sum_{\mathbf{u}} L_{\delta}\left(\mathbf{u}_{d}-d_{i}\right) Ed=uLδ(uddi)
u u u是属于该簇的像素,且拥有有效深度, u d u_d ud是其深度。
可以使用高斯牛顿迭代求解簇深度 d i d_i di

Surfel 初始化

对于一个拥有足够多像素的簇 C i = { x i , y i , d i , c i } C_i=\{x_i,y_i,d_i,c_i\} Ci={xi,yi,di,ci},我们初始化surfel S = [ S p , S n , S c , S w , S r , S t , S i ] T S=\left[S_{\mathbf{p}}, S_{\mathbf{n}}, S_{c}, {S}_{w}, S_{r}, S_{t}, S_{i}\right]^{T} S=[Sp,Sn,Sc,Sw,Sr,St,Si]T
S c S_c Sc强度初始化为簇的平均强度 c i c_i ci
S i S_i Si是当前帧(当前图像)在ORB-SLAM2中跟踪线程获得的参考关键帧的索引。
S t S_t St更新次数为0(代码里面为1)
S n S_n Sn法向首先初始化为所有像素的平均的法向,然后再最小化下式获得最终法向:
E S = ∑ u L δ ( S n ⋅ ( p u − p ‾ ) + b ) E_{S}=\sum_{\mathbf{u}} L_{\delta}\left(S_{\mathbf{n}} \cdot\left(\mathbf{p}_{\mathbf{u}}-\overline{\mathbf{p}}\right)+b\right) ES=uLδ(Sn(pup)+b)
其中 p u \mathbf{p_u} pu是像素 u u u在三维空间的投影, p ‾ \overline{\mathbf{p}} p是3D点的平均位置。
S p = π − 1 [ x i , y i ] S_p=\pi^{-1}[x_i,y_i] Sp=π1[xi,yi]位置,满足以下方程:
S n ⋅ ( S p − p ‾ ) + b = 0 S_{\mathbf{n}} \cdot\left(S_{\mathbf{p}}-\overline{\mathbf{p}}\right)+b=0 Sn(Spp)+b=0
可以由下式解得:
S p = S n ⋅ p ‾ − b S n ⋅ ( K − 1 [ x i , y i , 1 ] T ) K − 1 [ x i , y i , 1 ] T S_{\mathbf{p}}=\frac{S_{\mathbf{n}} \cdot \overline{\mathbf{p}}-b}{S_{\mathbf{n}} \cdot\left(K^{-1}\left[x_{i}, y_{i}, 1\right]^{T}\right)} K^{-1}\left[x_{i}, y_{i}, 1\right]^{T} Sp=Sn(K1[xi,yi,1]T)SnpbK1[xi,yi,1]T
其中, K K K是相机内参。
S r S_r Sr半径,需要能够覆盖超像素:
S r = S p ( z ) ⋅ r i ⋅ ∥ K − 1 ⋅ [ x i , y i , 1 ] T ∥ f ⋅ S n ⋅ ( K − 1 ⋅ [ x i , y i , 1 ] T ) S_{r}=\frac{S_{\mathbf{p}}(z) \cdot r_{i} \cdot\left\|K^{-1} \cdot\left[x_{i}, y_{i}, 1\right]^{T}\right\|}{f \cdot S_{\mathbf{n}} \cdot\left(K^{-1} \cdot\left[x_{i}, y_{i}, 1\right]^{T}\right)} Sr=fSn(K1[xi,yi,1]T)Sp(z)riK1[xi,yi,1]T
S p ( z ) S_p(z) Sp(z)是surfel的深度, f f f是相机的focal length 焦距。
S w S_w Sw权与surfel的深度有关:
S w = b 2 f 2 S p ( z ) 4 σ 2 S_{w}=\frac{b^{2} f^{2}}{S_{\mathbf{p}}(z)^{4} \sigma^{2}} Sw=Sp(z)4σ2b2f2
其中 σ 2 \sigma^2 σ2是variane of disparity estimation ,视差估计的方差。

局部地图提取

重建一个大规模的环境地图需要百万量级的surfel。但是,每次进行surfel融合时,只需要根据位姿图提取一小部分的surfels即可。
我们基于假设:the keyframes with the number of minimum edges to the current keyframe F r e f F_{ref} Fref below G δ G_\delta Gδ are locally consistent.我们提取这些keyframe关联的surfel作为lcoal map。局部一致的keyframes可以在位姿图上通过广度优先搜索获得。

Surfel融合

这一步,融合局部地图local map和通过当前图像新建的surfels。
我们将世界坐标系下的localmap中的surfel变换到当前相机坐标系下,并投影到像素平面上,获得一个像素位置 u = π ( S p l ) \mathbf{u}=\pi\left(S_{\mathbf{p}}^{l}\right) u=π(Spl)
因为任一一个新建surfel都由图像中的一个超像素创建,如果某超像素创建了surfel S n S^n Sn,且包含像素 u u u,那么将建立 S n S^n Sn S l S^{l} Sl的对应关系。
通过 ∣ S p n ( z ) − S p l ( z ) ∣ < S p l ( z ) 2 / ( b f ) ⋅ 2 σ \left|S_{\mathbf{p}}^{n}(z)-S_{\mathbf{p}}^{l}(z)\right|<S_{\mathbf{p}}^{l}(z)^{2} /(b f) \cdot 2 \sigma Spn(z)Spl(z)<Spl(z)2/(bf)2σ S n n ⋅ S n l > 0.8 S_{\mathbf{n}}^{n} \cdot S_{\mathbf{n}}^{l}>0.8 SnnSnl>0.8验证匹配的位置和法向关系。如果不满足则放弃该匹配关系。
如果满足匹配关系,那么更新surfel S l S^l Sl
S p l ← S p l S w l + S p n S w n S w l + S w n , S c l ← S c n S n l ← S n l S w l + S n n S w n S w l + S w n , S i l ← S i n S t l ← S t l + 1 , S w l ← S w l + S w n S r l ← min ⁡ ( S r n , S r l ) \begin{aligned} &\begin{array}{l} S_{\mathbf{p}}^{l} \leftarrow \frac{S_{\mathbf{p}}^{l} S_{w}^{l}+S_{\mathbf{p}}^{n} S_{w}^{n}}{S_{w}^{l}+S_{w}^{n}}, S_{c}^{l} \leftarrow S_{c}^{n} \\ S_{\mathbf{n}}^{l} \leftarrow \frac{S_{\mathbf{n}}^{l} S_{w}^{l}+S_{\mathbf{n}}^{n} S_{w}^{n}}{S_{w}^{l}+S_{w}^{n}}, S_{i}^{l} \leftarrow S_{i}^{n} \end{array}\\ &S_{t}^{l} \leftarrow S_{t}^{l}+1, \quad S_{w}^{l} \leftarrow S_{w}^{l}+S_{w}^{n}\\ &S_{r}^{l} \leftarrow \min \left(S_{r}^{n}, S_{r}^{l}\right) \end{aligned} SplSwl+SwnSplSwl+SpnSwn,SclScnSnlSwl+SwnSnlSwl+SnnSwn,SilSinStlStl+1,SwlSwl+SwnSrlmin(Srn,Srl)
那些没有被融合的新建surfel也填入地图中。为了处理离群值,我们剔除 ∣ S i − F r e f ∣ > 10 \left|S_{i}-F_{r e f}\right|>10 SiFref>10(即当前时间距离surfel被创建时间,已经经过了10张关键帧),但是surfel的融合次数少于5此,删去该surfel。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值