In Defense of Classical Image Processing: Fast Depth Completion on the CPU
这篇文章解决的问题是从CPU实现深度补全,这篇是AVOD(暂未有简介)以及Syn-Multi-view的前置.
并不是最好的算法,不过是一个代码使用难度不高(基本只有基本的numpy 与 opencv运算),速度快(90HZ)且精确度尚可的算法.更关键是完全没有使用图像数据
总体流程
此图总览了整个算法的完整流程,下面从问题的数学定义以及算法步骤进行介绍。
问题数学定义
对于一张图片,一个稀疏的深度图,找到一个, 其中,问题可以描述为:
流程介绍
Depth Inversion
从数据特性上,kitti中的点的距离从0到80m,不过,空像素同样为0,这不利于基础OpenCV的计算。因此进行一个操作,对非空像素计算,会形成20m的缓冲区。方便形成一个valid or not 的mask.
自定义Dilation
首先尝试让空像素被附近的有效像素覆盖(dilation),最终采用的是diamand kernel
小洞填补
先计算一个non-empty mask,使用 full 核进行dilation,non-empth的点不改变。
Extension
为了补充比较高的物体,比如树和天空,将每列最高的有效点直接连接到最外部。
大洞补充
最后一步填补前文完全没有补充的点,由于没有图片数据,使用一个的核,寻找最靠近的未填补点。
Blur
连续使用一个中位数模糊,以及一个高斯模糊。
Depth Inversion
将第一步的深度转回来。