1.PSMNet
2.双目测距
3. PlaneRCNN 单幅图像的三维平面检测与重建
4.ARCore SDK for Android
5.菜鸟全球科技挑战赛「智能体积测量」
6.基于vSLAM的方法
7.基于SFM的MVSNet
1.PSMNet
最新的研究表明,利用一对立体图像来估算深度信息可以格式化为一个有监督的学习任务,进而通过卷积神经网络来解决。然而,当前基于图块匹配的Siamese网络的架构,缺少利用环境信息取寻找不适定区域(遮挡区域,弱纹理区域等)一致性的能力。为了解决这个问题,本文提出了PSMNet,一个金字塔立体匹配网络,它主要由两个模块组成:金字塔池化和3D卷积神经网络。金字塔池化模块通过聚合不同尺度和不同位置的环境信息构建匹配代价卷(cost volume)来充分利用全局环境信息。3D CNN通过将多个堆叠的沙漏网络(hourglass network)与中间监督(intermediate supervision)结合起来,去调整匹配代价卷。
深度信息估计的目标就是计算参考图像上每一个像素点的视差值d。视差值就是左右两幅图像上对应点之间在水平方向上的位置差。对于左图中的像素点(x,y),它在右图中对应点的坐标为(x-d,y),这个点的深度值可以通过fB/d来计算,其中f是摄像机的焦距,B是两个摄像头之间的距离。
需要设备比较复杂:详见KITTI数据采样
https://blog.csdn.net/solomon1558/article/details/70173223
2.双目测距
原理:
如图,P是待测物体上的某一点,OR与OT分别是两个相机的光心,点P在两个相机感光器上的成像点分别为P和P’(相机的成像平面经过旋转后放在了镜头前方),f为相机焦距,B为两相机中心距,Z为我们想求得的深度信息,设点P到点P’的距离为dis,则:
双目测距实际操作分4个步骤:相机标定——双目校正——双目匹配——计算深度信息。
相机标定:摄像头由于光学透镜的特性使得成像存在着径向畸变,可由三个参数k1,k2,k3确定;由于装配方面的误差,传感器与光学镜头之间并非完全平行,因此成像存在切向畸变,可由两个参数p1,p2确定。单个摄像头的定标主要是计算出摄像头的内参(焦距f和成像原点cx,cy、五个畸变参数(一般只需要计算出k1,k2,p1,p2,对于鱼眼镜头等径向畸变特别大的才需要计算k3))以及外参(标定物的世界坐标)。而双目摄像头定标不仅要得出每个摄像头的内部参数,还需要通过标定来测量两个摄像头之间的相对位置(即右摄像头相对于左摄像头的旋转矩阵R、平移向量t)。
双目校正:双目校正是根据摄像头定标后获得的单目内参数据(焦距、成像原点、畸变系数)和双目相对位置关系(旋转矩阵和平移向量),分别对左右视图进行消除畸变和行对准,使得左右视图的成像原点坐标一致(CV_CALIB_ZERO_DISPARITY标志位设置时发生作用)、两摄像头光轴平行、左右成像平面共面、对极线行对齐。这样一幅图像上任意一点与其在另一幅图像上的对应点就必然具有相同的行号,只需在该行进行一维搜索即可匹配到对应点。
双目匹配:双目匹配的作用是把同一场景在左右视图上对应的像点匹配起来,这样做的目的是为了得到视差图(disparity map)。双目匹配被普遍认为是立体视觉中最困难也是最关键的问题。得到视差数据,通过上述原理中的公式就可以很容易的计算出深度信息。
视差(disparity )是同一个空间点在两个相机成像中对应的x坐标的差值,它可以通过编码成灰度图来反映出距离的远近,离镜头越近的灰度越亮:
双目测距的优点与难点
双目系统优势:(1)成本比单目系统要高,但尚处于可接受范围内,并且与激光雷达等方案相比成本较低;(2)没有识别率的限制,因为从原理上无需先进行识别再进行测算,而是对所有障碍物直接进行测量;(3)直接利用视差计算距离,精度比单目高;(4)无需维护样本数据库,因为对于双目没有样本的概念。
双目系统的难点:
(1)计算量非常大,对计算单元的性能要求非常高,这使得双目系统的产品化、小型化的难度较大。所以在芯片或FPGA上解决双目的计算问题难度比较大。国际上使用双目的研究机构或厂商,绝大多数是使用服务器进行图像处理与计算,也有部分将算法进行简化后,使用FPGA进行处理。
(2)双目的配准效果,直接影响到测距的准确性。
(3)对环境光照非常敏感。双目立体视觉法依赖环境中的自然光线采集图像,而由于光照角度变化、光照强度变化等环境因素的影响,拍摄的两张图片亮度差别会比较大,这会对匹配算法提出很大的挑战。
(4)不适用于单调缺乏纹理的场景。由于双目立体视觉法根据视觉特征进行图像匹配,所以对于缺乏视觉特征的场景(如天空、白墙、沙漠等)会出现匹配困难,导致匹配误差较大甚至匹配失败。
(5)计算复杂度高。该方法需要逐像素匹配;又因为上述多种因素的影响,为保证匹配结果的鲁棒性,需要在算法中增加大量的错误剔除策略,因此对算法要求较高,想要实现可靠商用难度大,计算量较大。
(6)相机基线限制了测量范围。测量范围和基线(两个摄像头间距)关系很大:基线越大,测量范围越远;基线越小,测量范围越近。所以基线在一定程度上限制了该深度相机的测量范围。
https://blog.csdn.net/piaoxuezhong/article/details/79016615
3. PlaneRCNN 单幅图像的三维平面检测与重建
可以检测平面区域并从单个RGB图像重建分段平面深度图。 从左到右,依次为输入图像,分段平面区域,估计深度图和重建平面表面。
PlaneRCNN由三部分组成。
第一部分是建立在 Mask R-CNN 基础上的平面检测网络。除了每个平面区域的实例掩膜之外,我们还估计平面法线和每个像素的深度值。利用已知的相机内在函数,我们可以从检测到的平面区域进一步的重建3D平面。这个检测框架更加的灵活,可以处理一张图片里任意数量的平面区域。据我们所知,本论文是第一个将目标识别中常见的检测网络引入深度图重构任务中的。第二部分是一个分割细化网络,联合优化提取到的分割掩膜,以便于更加连贯一致的解释整个场景。这个细化网络通过设计一个简单但有效的神经模块来处理任意数量的平面。第三部分是翘曲损失模块,在训练中强制让同一个场景中不同视角观察的重建平面保持一致,在端到端的检测网络中提高平面参数和深度图的精度。
数据:
本论文还为分段平面深度图重建任务提出了一个新的基准。我们从 ScanNet (一个拥有标注过 3D 室内场景重构信息的大规模 RGB-D 数据集。)中搜集了100000张图像,并利用相关的3D扫描来生成对应的真实样本。这个新的基准平均每张图像可以提供14.7个平面实例,而现有的基准大致上一张图像才6个实例。
https://blog.csdn.net/wgshun616/article/details/88569405
难点:标注标签需要深度信息进行训练,论文还没有全部了解
4.ARCore SDK for Android
https://github.com/google-ar/arcore-android-sdk
运动跟踪:
ARCore 可以在手机移动的过程中知道,相对于真实世界手机所在的位置和方向(姿势)。
ARCore能检测到Camera捕获的图像在视觉上的不同特征,称为特征点。它使用这些点计算其位置变化。随着时间的推移,通过视觉信息与来自IMU设备的惯性测量,ARCore就可以估算出Camera相对于真实世界的姿态(位置和方向)。通过将渲染的3D虚拟内容与物理Camera的姿势对齐,开发人员就可以从正确的角度渲染虚拟内容。 再通过将虚拟物品的图像渲染到从Camera获得的图像之上,这样看起来就好像虚拟内容是真实世界的一部分似的。
环境理解:
ARCore可以让手机检测出一块水平面的位置和大小。如地面、桌子、书架等等。ARCore通过检测特征点和平面不断改善对现实世界环境的理解。ARCore会查找常见水平表面(如桌面)上的特征点集群,除此之外,ARCore还可以确定每个平面的边界,并将以上信息提供给您的应用程序。 这样,开发人员就可以使用这些信息,并将虚拟物体放置在平坦的表面上了。由于ARCore使用特征点检测平面,因此可能无法正确检测到没有纹理的平坦表面(如白色桌面)。
光线评估:
ARCore 可以让手机估算出当前环境的光线强度,这样可以让虚拟物理显示在真实环境中更加逼真。
难度:
ARCore目前只有几款机型可能做测试,而这几款机型在国内用的人不多,所以对于大多数人来说没法做实验,这也增加了学习的难度。ARCore中大量使用了 OpenGL的相关知识。而OpenGL又是一门很深的学问,所以学习的难度更加陡峭了。
5.菜鸟全球科技挑战赛「智能体积测量」
通过 visual SLAM(即时定位与地图构建)重建 3D 点云,再结合惯性测量单元(IMU)或标志物而获得 3D 点云的实际尺度;也有选手通过被测物体和标志物重建出深度图,然后融合不同的深度图而构建真实尺度的 3D 点云。这两类方法都可根据 3D 点云计算最小外接立方体。
算法一:
算法2:
先感知被测物体在像素空间中的位置与大小,然后建立像素世界与现实世界之间的联系。将这种思想带入到任务中时,就需要设计两个模块:利用目标检测获取边界框,从而快速算出像素上的长和宽;利用 ARKit 内嵌的方法,开发者可以得到屏幕中一个点在现实世界中的大致坐标位置,即建像素与现实尺度的桥梁。
选手自行标注了 1700 多张真实图片和 2800 多张合成图片。这些图片模拟了真实场景下利用手机测量体积会拍到的样子,我们可以用来检测目标的边界框。该队选手表示,这 4500 张图片可用来精调预训练的 MobileNet V2,它可作为主干网络来预测左上和右下两个关键点。因为 MobileNet 是一种非常精简的架构,所以计算力和准确率都能有比较好的保证。最终,开发者设计方案结合了计算机视觉和 ARKit 技术,所有的测量和计算都发生在手机端,不需要网络和额外的计算资源。
6.基于vSLAM的方法
其中 vSLAM 在鲁棒性上有很多劣势,即使在位移和旋转都比较小的情况下,它还是会丢弃一些无纹理物体。这主要是因为 vSLAM 并不追求重建精度,它是一种稀疏重建
SLAM (simultaneous localization and mapping),即时定位与地图构建。vSLAM技术作为SLAM技术的一种,被公认为是最具商业价值的种类。VSLAM的技术框架主要包括传感器数据预处理、前端、后端、回环检测、建图。
传感器数据:
传感器数据预处理。这里的传感器包括摄像头、惯性测量单元(Inertial measurement unit,简称IMU)等,涉及传感器选型、标定、多传感器数据同步等技术。
前端:
VSLAM中,前端主要涉及计算机视觉相关的算法。典型做法一般是:首先提取每帧图像特征点,对相邻帧进行特征点粗匹配,然后利用RANSAC(随机抽样一致)算法去除不合理的匹配对,然后得到位置和姿态信息。整个过程涉及到特征提取、特征匹配、对极几何、PnP、刚体运动、李代数等多视图几何知识。但是,视觉里程计只计算相邻帧的运动,进行局部估计,这会不可避免的出现累积漂移,这是因为每次估计两个图像间的运动时都有一定的误差,经过相邻帧多次传递,前面的误差会逐渐累积,轨迹漂移(drift)的越来越厉害。
解决轨迹漂移的方法有两个:后端优化、回环检测。
后端:
主要是对前端的结果进行优化,得到最优的位姿估计。主要有两种方法:
一种是基于滤波理论的优化,主要有 EKF, PF, RBPF, UKF等方法,其中EKF(扩展卡尔曼滤波)在早期是主流的方法。它的思路是将状态估计模型线性化,并用高斯分布近似其噪声,然后按照卡尔曼滤波进行预测来更新。但是实际上,这种对噪声的高斯分布大部分情况下是不成立的,此外,线性化过程中丢失了高阶项。
另一种就是非线性优化(图优化)。它的基本思想是将优化的变量作为图的节点,误差项作为图的边,在给定初值后,就可以迭代优化更新。由于图优化的稀疏性,可以在保证精度的同时,降低计算量。
后端优化涉及到的数学知识比较多,具有较高的难度。总的来说,从状态估计的角度来讲,SLAM是一个非线性非高斯系统。因此传统的滤波理论已经逐渐被抛弃,而图优化已经成为主流方法。
回环检测:
主要目的是让机器人能够认识自己曾经去过的地方,从而解决位置随时间漂移的问题。视觉回环检测一般通过判断图像之间的相似性完成,这和我们人类用眼睛来判断两个相同的地点是一样的道理。因为图像信息丰富,因此VSLAM在回环检测中具有很大的优势。
建立地图
SLAM根据不同的传感器类型和应用需求建立不同的地图。常见的有2D栅格地图、2D拓扑地图、3D点云地图等。3D点云地图在VSLAM中用的比较多,主要用于真实场景的视觉重建,重建的地图非常直观漂亮。但是点云地图通常规模很大,比如一张VGA分辨率(640 x 480)的点云图像,就会产生30万个空间点,这会占据非常大的存储空间,而且存在很多冗余信息。
用到的技术多是传统的计算机视觉算法,尤其是多视角几何相关知识。与当前大热的深度学习“黑箱模型”不同,SLAM的各个环节基本都是白箱,能够解释得非常清楚。但SLAM算法并不是上述各种算法的简单叠加,而是一个需要相互折中、密切配合的复杂系统工程。
7.基于SFM的MVSNet