sweepNet\omnimvs
一、论文简介
这个团队连续发了几篇论文,这几篇都是鱼眼相机全景重建的,用四个鱼眼相机进行全景重建,这里的鱼眼相机要注意的是,相机的重叠视野(而非视野,因为计算深度价至少需要两个相机)必须覆盖360°才可以实现全景重建。重建精度超过了现有的所有算法。文章网络基本参照GC-Net,只是在构建代价空间时使用Sweep的方式,将图像投影到多个平行的球面上构建代价空间。
二、网络结构
1、SweepNet
直接将原图投影到球面,再提取深度特征计算代价空间,再进行代价聚合,代价优化,最后通过sigmoid进行代价回归,获得球面索引,也就获得了深度信息
网络具体细节如下表所示
2、OmniMVS
OmniMVS 是SweepNet的升级版本 先提取深度特征,再将特征map投影到球面,计算代价卷,采用3D UNet进行代价聚合、进行代价优化最后根据soft argmax进行亚像素的代价回归,获得深度信息
网络细节如下图所示
omni-mvs主要参照了GC-Net的网络结构,网络大致结构保持一致,回归方式也保持一致,都是softargmin。只是在代价卷的构建上有所不同,GC-Net直接使用残差层形成的unary feather拼接得到,而omni-mvs是将特征投影到球面,再进行拼接,代价卷的计算方法如下:
三、生成代价空间
球面图像
对于球面图像,如上图所示这里是用角度θ和Ф进行表示,整个半球面被表示为-π<θ<π, -π/2<Ф<π/2,根据角度投影到一张2πХπ大小的图像上,至于角度的间距,也就对应了图像的分辨率,比如投影到640x320的图像上,那θ每2π/640就要取一个值,Ф每π/320就要取一个值,然后将像素投影到这个点上,就生成了球面图像。
代价计算的方法
第二部分是sphere sweep,这个很有意思,在坐标中心往外开始假设n个等距球面,如上右图所示,从最小深度处到最大深度处均匀分布。然后把前面提取到的特征映射投影到各个球上面去,再将所有的球上的投影图像组合起来,形成代价块。这里每次有四张图像要像球面投影,然后取四张图像的均值。每次每张图像都要投影到所有假设的球面上,再把这些球面图像组合起来。
投影方法
这是头投影公式,他不是直接将图投影过去,而是将球面上的点(矢量点)投影到每个相机的像素坐标系下,建立像素坐标系和球面图像之间的映射关系,再投影上去。这里和相机图像畸变矫正有点像,畸变矫正也是正向畸变得到畸变前和畸变后的映射关系,再进行畸变矫正。
上面这个公式应该从右往左看,中括号里面的ρ§是球面上的矢量,除以dn表示将这个矢量投影到单位球(半径为1)上面来,此时的坐标系是在四个相机中间的O下。中间的M(θ*i)是将坐标系从中心坐标系O转换到每个相机坐标系Oi,Πi使用每个相机的内参(像元尺寸、主点坐标、畸变参数)将相机坐标系下的矢量投影到像素坐标系下。最外面的Ii表示第i个相机的图像,意思是取前面计算的那个像素坐标下的像素值。这样就将图像投影到了球面。
投影上去后再计算匹配代价,注意,这里是每两个相机算一次匹配代价,这两个相机一定是有重合视野的,在重合视野内才能将同一点投影到球面图像上,如果在这个区域内部有多个匹配代价,就计算均值作为匹配代价。
第三部分是代价块的处理,经过encoder-decoder将代价块处理