如果乍一看,比较奇怪的就是 D2net的 interpolate_depth的代码了,这里就进行我的粗浅的理解分析。
首先是这部分代码:

如果我用一句话概括,就这这里进行了简单的坐标是否合法的筛选, 因为按照前面教程,咱们输入的 pos 是一个小数的坐标。 这里得到的 valid_corners 其实就是 判断 例如 (3.5 7.5 )这个坐标的左上,左下,右上,右下是不是合法的坐标。 3.5 7.5 的四个角那肯定是没问题的啊。 但是你说 0,0 这个位置,他的左上角就是不存在的,所以说需要筛选一下,就是这回事。
这里得到的 valid_corners 就是一个 True False 的Mask。 指示每个坐标是不是合法的。
紧接着呢, 是把所有合法的四个角,分成四份 取出来。 如下所示。
然后直接index 在深度图上,看看深度图的这些角处,是不是合法的深度。从而再次生成一个 depth_mask。 代表depth中每个点是不是合法的。

直接看最终的结果,你只用记住下面的东西:
假如输入的 pos 是60 x 80 的, 而 最原始的depth是 480x640 的。
理论上来说,很难得到 下采样 1/8 的特征图,每个点的真实深度值对吧。因为这里的特征图,是60x80的根本和原始的深度值 480x640对不上号啊对吧。 但是,我们就是要通过 480x640的深度图插值出, 特征图每个点对应的4800个深度!!!注意这4800个点,可不是每个点都有深度的,可能有深度的只有 4700个点
知道了上面的东西后, 接着看代码的三个返回结果。 分别是:

本文解析了D2net中interpolate_depth函数,通过实例说明如何从高分辨率深度图中为低分辨率特征图插值深度值,解释了坐标筛选、深度检查和返回结果的重要性。涉及的关键概念包括坐标合法性、下采样深度匹配和索引操作。
最低0.47元/天 解锁文章
1020

被折叠的 条评论
为什么被折叠?



