openMVS深度图计算:DenseReconstruction Estimate之EVTEstimateDepthMap之深度图初始化(patchmatch)


我们在得到SFM线程传进来的稀疏点,要稠密重建,自然得对这些稀疏的三维点进行补全。也即我们需要根据稀疏点投影到当前帧的投影点的深度值去估计该投影点邻域像素点的深度值(在可用的稀疏点之间插值初始化深度图),从而得到更加准确的深度图。后续根据深度图去进行稠密重建。

1. 初始化SFM得到的稀疏点

/**
 * @brief depth计算,采用patchMatch方法 
        原理细节主要是参考论文"Accurate Multiple View 3D Reconstruction Using Patch-Based Stereo for Large-Scale Scenes", S. Shen, 2013
 *      代价计算分两种方式一种是上述论文里面的简单的直接使用NCC来作为匹配代价;
		另一种是带权重的代价参考论文"PatchMatch Stereo - Stereo Matching with Slanted Support Windows"公式3
 *		以NCC为评价标准,使用传播和随机优化来估计深度图

 *      给定同一场景的两个视图,我们将重建深度图的视图记为“参考图像”,将另一个视图记为“目标图像”。
 *      第一步:在可用的稀疏点之间插值初始化深度图;
 *      第二步:传播优化:深度图从顶部/左侧传播到底部/右侧,并在接下来的每个步骤中传递相反的方向。
        传播过程中,对于每个像素,如果邻域的NCC评分较好,首先将当前的深度估计替换为它的邻居深度值。
        然后通过尝试对当前深度值做一个随机调整来细化重建的深度,并保留得分最高的那个,通常2-3
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
点云数据转深度图像是一种常见的三维数据处理任务,O3D(Open3D)是一个开源工具库,可以帮助我们实现这个任务。 要将点云数据转换为深度图像,在O3D中,我们可以分为以下步骤: 1. 导入点云数据:首先,我们需要将点云数据导入到O3D中。可以使用O3D提供的点云数据类`o3d.geometry.PointCloud`,通过读取点云文件如PLY、OBJ等格式,或者通过编程方式创建点云。 2. 点云到深度图像转换:接下来,我们可以使用O3D的函数`o3d.geometry.PointCloud.estimate_normals`为点云估计法线。法线信息可以帮助我们计算点云上每个点的深度值。然后,我们可以使用`o3d.geometry.PointCloud.compute_nearest_neighbor_distance`函数计算每个点到最近邻点的距离。这些距离值可以作为点云的深度值。 3. 创建深度图像:我们可以使用O3D的函数`o3d.geometry.Image.create_from_depth_map`来创建深度图像。该函数可以将深度值转换为图像像素的灰度值,并生成一个2D深度图像。 4. 可视化深度图像:最后,我们可以使用O3D提供的可视化模块,如`o3d.visualization.draw_geometries`等函数,将深度图像可视化显示出来,以便我们查看转换后的结果。 通过以上步骤,我们可以使用O3D的功能将点云数据转换为深度图像。除了点云到深度图像的转换,O3D还提供了丰富的功能,如点云滤波、点云配准、点云重建等,可以帮助我们进行更多的三维数据处理任务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cashapxxx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值