三维重建Fusion中的TSDF算法通俗描述

看个视频

https://www.youtube.com/watch?v=8M_-lSYqACo
这是mobilefusion的视频,大家先了解一下,看到在三维重建的时候外面有个长方体包围盒了吗?

数据准备:

我们不同角度拍摄的RGB图、深度图和相应的pose.txt。

步骤:

1.建立长方体包围盒

要建立一个长方体包围盒。让所有的三维点都在这个长方体里面。
假设z方向垂直相机。
很明显,x,y方向上的极值就是图像的边界。
图像的边界点是就是四个角。
(0,0),(w,0),(0,h),(w,h)
z方向上深度范围是0~max_depth
组合而成的边界点就是(0,0,0),(0,0,max_depth),(w,0,0)等的2^3=8种情况,然后把这些点用相机的内参和外参换算到世界坐标系中,长方体的极点。

2.划分网格

在长方体内部划分网格
比如说我们现在求得的长方体的极点分别是(-1,-1,-1),(1,1,1)单位是米。
我们要在这个长方体内部划分网格,就是分割出一个个等体积的小的立方体,也就是所谓的体素。我们让体素的边长是0.02,也就是2厘米。
那么从-1到1,我们可以划分出100个体素,也就是说这个长方体上每个小立方体的8个顶点的坐标可以用(x,y,z)来表示,其中x,y,z都是0-100之间的,同时它们的世界坐标也可以通过(-1+0.02x,-1+0.02y,-1+0.02*z)来计算出来。
以下图片来自https://blog.csdn.net/qq_31785865/article/details/78524429
在这里插入图片描述

3.迭代更新tsdf网格

遍历每一组数据(RGB图、深度图、pose.txt)
每次把这个长方体内的所有格点的世界坐标通过逆变换到相机坐标,再投影到图片上。
再将图片上对应位置的深度与格点的在相机坐标系下的深度比较。
depth_diff = depth_val-cam_pts[2,:];
如果|depth_diff |<trunc_marin则认为有效。
用dist=depth_diff/trunc_marin去加权更新tsdf网格。
ps:tsdf网格是和2中划分的长方体一样的,每个顶点存放的是dist的加权和。(TSDF主要获得差值+权重

4.找等值面

用marching cubes算法在tsdf网格中寻找dist加权和为0的等值面。就是物体表面。

在这里插入图片描述

更多《计算机视觉与图形学》知识,可关注下方公众号:

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值