【深度补全算法】基于RGBD相机的深度补全算法(非Lidar)论文与GitHub代码总结


前言

最近组里面因为项目上需要检测边缘信息,需要调研深度图的补全算法,当前的深度图补全主要集中在但目前较多研究聚焦于自动驾驶领域的Lidar深度图的补全,而对RGB-D相机涉猎较少,通过搜集GitHub,下面将对一些深度图的补全算法进行介绍。下面两张图为本文将要介绍的论文的总体概况:
在这里插入图片描述


一、经典的深度补全算法(2018-2019)

1.Deep Depth Completion of a Single RGB-D Image

Github链接DeepCompletionRelease
论文介绍:耗时长,使用rgb image作为输入预测物体表面稠密法线及遮挡区域的边缘信息。使用这些预测结果与原始的depth图像结合,通过全局优化,对原始图像中像素缺失问题进行解决。由于现有数据集中ground truth的depth图像也存在孔洞现象,为了得到ground truth,其使用数据集进行重建,渲染,然后得到获取补全后的depth图像作为真值。
实现难度:很难,虽然文档写的很详细,但是需要自己下载数据集,很难使用自己的数据集直接做推理,且代码提供C++、C、matlab等方式编写,总体上手比较复杂。
算法效果
在这里插入图片描述

2.Indoor Depth Completion with Boundary Consistency and Self-Attention

Github链接Depth-Completion
论文介绍:耗时长

实现难度:需要运行该算法需要先下载Matterport3D dataset,需要注册一个网址填写一个pdf(自己的学校导师等等)发生给台湾国立大学,之后他们会给你发一个下载数据集的链接(以上的所有操作均需翻墙),下载完它所需的数据集之后可以按照它使用的数据集的方式组织我们自己的数据集从而利用它提供的模型做推理,这里是使用这些模型生成.npy文件,然后利用matlab进行可视化,博主一直卡在了它的可视化这里,可能太久没看matlab代码了,总体来说该算法的实现较为麻烦,Pass掉!!!。
Matterport3D dataset结构

知道了这个结构之后就可以按照它的这种方式来增加制作数据集做推理。

算法效果
在这里插入图片描述

3.Disocclusion Handling Using Depth-Based Inpainting

Github链接disocclusion-inpainting
实现难度:下图为该算法的GitHub图,可以看到该算法的代码和运行命令十分简单,按照下图的方式放入我们的数据集,可以检验算法的效果,可以看出该算法虽然简单,但是效果很糟糕!!!
在这里插入图片描述

算法效果

二、近几年的深度补全算法

1.TransCG: A Large-Scale Real-World Dataset for Transparent Object Depth Completion and A Grasping Baseline

Github链接TransCG
论文介绍:透明物体在我们的日常生活中很常见,并且经常在自动化生产线中处理。针对这些对象的基于视觉的强大机器人抓取和操纵将有利于自动化。然而,在这种情况下,大多数当前的抓取算法将失败,因为它们严重依赖于深度图像,而普通的深度传感器通常由于光的反射和折射而无法为透明物体产生准确的深度信息。TransCG通过提供用于透明对象深度完成的大规模真实世界数据集来解决此问题,该数据集包含来自130不同场景的RGBD图像
TransCG数据集是第一个大规模的,真实世界的数据集,提供GroundTruth的depth图,在不同、混乱的场景的透明物体。通过消融实验表明,TransCG数据集更通用,可以使模型具有更好的泛化能力。此外,本文提出了一种端到端深度完成网络DFNet,该网络将RGB图像和不准确的深度图作为输入,并输出精确的深度图。实验证明,DFNet比以前的工作具有出色的性能,效率和鲁棒性,并且能够在有限的硬件资源下处理高分辨率的图像。
实现难度:本算法的实现较为简单,资料完善,提供了inference.py以及sample_inference.py,上手简单,但是本文训练的数据集主要是针对透明物体,所以在我们日常场景采集的数据集下最终深度补全的效果并不好,因此想要使用本文的算法的话需要我们自己来采集数据集,这样的话就很麻烦了。
数据集结构:数据集的地址为transcg,数据集结构如下:
在这里插入图片描述
算法效果

在这里插入图片描述

2.SpiderNet: Uncertainty-Driven Cross-Guided Network for Depth Completion of Transparent Objects

Github链接SpiderNet
论文介绍:SpiderNet 构造了一个双分支多级网络来推导透明物体的精确深度信息。2022.11.14该算法的原始论文尚未发布,SpiderNet 网络结构如下:
在这里插入图片描述

实现难度:实现起来较为简单,但是仅限于用它提供的数据集,如果想用自己的数据集推理,那么不仅仅需要RGB、depth图,还需要一些其他的图片和标注信息,且该算法也是针对透明物体的深度补全,针对我们的实际效果并不是很好。
算法效果:左图为原图即未经过修改的图片,右图为经过深度补全的图片。
在这里插入图片描述

3.Self-supervised-Depth-Completion

Github链接Depth-Completion
论文介绍:Self-supervised-Depth-Completion,深度传感对于许多计算机视觉应用来说是至关重要的,商品级的 RGB-D 相机往往无法感知深度在遥远的,反射和透明的区域,造成大面积的缺失。由于缺失区域深度标注的获取十分繁琐,本文提出了一种自监督方法来完成缺失区域深度值的获取任务。具体来说,我们通过自适应采样策略对不完全原始深度图进行采样,生成一个更不完全的深度图作为输入,并使用原始深度图作为训练标签。为了使网络能够传播远程深度信息来填补大面积的无效区域,我们进一步提出了训练过程中的相对一致性损失。实验验证了自监督方法的有效性,该方法的性能优于以往的无监督方法,甚至可以与一些有监督的方法竞争。
实现难度:该算法跑通起来比较简单,可以下载它的数据集,推理时需要三种图片,分别为:RGB、Depth、GroundTurth-Depth,因此在我们自己提供正确标注的图片,即GroundTurth-Depth,这个方案只能pass掉了。
算法效果
下图为代码中作者给的深度补全效果图,可以看出效果还是不错的:
在这里插入图片描述
下图为我们用自己采集的数据集进行深度深度补全效果图,由于没有正确标注的图片,即GroundTurth-Depth,我们使用将RGB图片变为灰度图来作为GT图,左图为输入的深度补全图,右图为补全之后的效果,可以看出是可以深度补全的,但是颜色很突兀,说明此时的深度补全补全是错的,只能放弃该方案:
在这里插入图片描述

4.DEN: Disentangling and Exchanging Network for Depth Completion

Github链接DEN
论文介绍:在这项研究中,提出了一种解缠结和交换网络 (DEN) 来修复由商品级深度相机捕获的 RGB-D 图像的深度通道。当环境很大、表面有光泽或强光充足时,深度通道通常是稀疏的或产生缺失数据的,而 RGB 通道仍然是密集的并存储所有有用的信息。从这个观察中,我们正在考虑从 RGB 图像中借用有用信息(例如结构信息)来完成获得的稀疏深度通道的可行性。
实现难度:本文源自论文《Deep Depth Completion of a Single RGB-D Image》,是将它的代码复现为matlab版本,所需的数据集为ScanNet dataset,该数据集十分巨大,且matlab代码并不是很友好,因此我望而却步,放弃了该算法。
算法效果
在这里插入图片描述

5.depth_completion

Github链接depth_completion
论文介绍:这是一个尚未发布的论文的GitHub,进入到GitHub中可以看到作者还在优化,
实现难度:简单,仅需RGB和depth图片即可,但是效果不佳,可能是因为算法还在优化。
算法效果
在这里插入图片描述

在这里插入图片描述

三、基于传统图像处理的深度补全算法

1.ip_basic_c

Github链接depth_completion
论文介绍:该方法来自《In Defense of Classical Image Processing: Fast Depth Completion on the CPU》。知乎有对这篇文章的翻译,大家有兴趣可以看看,总体来说通过设计不同大小的滤波器来实现的。这篇文章原始计划是针对Lidar的,知乎上有人用DSO进行了测试,效果并不是很好,我这边也针对RGBD进行了测试,效果还行,至少能提供一个相对精准初值,后续就交给优化吧。此外值得注意的是,该文章滤波仅仅考虑了深度图,如果结合RGBD的彩色图像进行类似三边联合滤波可能效果更好。该文章是有代码开源的,不过是python版本,这里我写了一个C++版本的,分享给大家,但是我写的版本并不完全。作者提供了多种模式,因为实际工程需要,我只是实现了快速方案的,
上述源自ip_basic_c的作者的CSDN原文两个SLAM相关小工具:深度图快速补全

实现难度:简单,但是需要搭建C++的编译环境,对Windows环境不友好,建议在Linux环境下运行,只需要提供深度图和RGB图像即可完成深度补全,但是由于只用CPU,处理单张图片速度慢,需要0.3s左右,适合小批量的图像集的深度补全。
算法效果
这是作者提供的自己的检测到的效果:在这里插入图片描述下方是我们实际测量的效果,可以看出:
在这里插入图片描述

2.ThreadedDepthCleaner

Github链接ThreadedDepthCleaner
实现难度:简单,但是需要在Linux下配置该项目所需的librealsense环境,有关如何配置librealsense环境的教程可以参考我之前写的博客【深度相机D435i】Windows+Ubuntu下调用D435i利用Python读取、保存RGB、Depth图片,安装完所需要的环境配置之后,安装它提供的步骤编译即可,上述操作都成功之后,即可得到视频流的深度补全,演示的结果在下方,如果需要保存的话需要对源码进行修改再编译。
算法效果
该算法的视觉效果如下图所示,左图为未补全的深度图,右边为已经补全过的深度图,场景为日常的生活场景。
在这里插入图片描述

在这里插入图片描述

部分算法待完善…


总结

最开始想到的深度补全的算法都是想着使用基于深度学习的算法,但是实际在使用的过程中发现效果并不好,并且十分的麻烦,需要的数据集有很多整体上手难度很大,之后我选择使用了利用传统方法进行深度补全,传统方法虽然看起来没有没有基于机器学习的算法高大上,但是确实可以有效快捷的解决我们的问题。

猜你喜欢

转载自blog.csdn.net/AaaA00000001/article/details/127842021