PSDF和TSDF对比

1.Overview

两者的原理几乎一模一样,只不过是在不同坐标系下进行的

TSDF:Truncated Signed Distance Function-在世界坐标系下求解体素中心到表面的距离的截断值

PSDF:Projective TSDF-在相机坐标系下求解体素中心到表面的距离的截断值

2.PSDF

 1.计算体素x的世界坐标:设体素x中心在立体块中的坐标(vx,vy,vz),那么在世界坐标系下的位置是:

 注:一开始构建立体块-PSDF模型时会计算立体块原点世界坐标和体素块的世界坐标系下的长度

2.将体素x的世界坐标转化到相机坐标系下:

 注:即用该帧的相机位姿的逆矩阵左乘世界坐标

3.由相机成像模型得到体素中心和相机中心的在相机坐标系下的距离-camz(x):

 注:Ix表示体素x投影在相机成像平面下的像素坐标

4.则体素x的SDF值为(PSDF为截断的SDF-Truncated):

5.则T素x的PSDF为:

注:当− t ≤ sdf ( x ) ≤ t时,psdf ( x ) = sdf ( x ) / t ∈ [ − 1 , 1 ]。当sdf ( x ) > t或者sdf ( x ) < − t时,psdf ( x ) = 1或者− 1 。其实这个表达式是有物理意义的。t可以看作是体素x和截面对应点P深度差值的阈值。当体素x距离截面对应点P非常远的时候,它的psdf值等于正负一。当体素x距离截面对应点P比较近的时候,它的psdf值[ − 1 , 1 ]之间,是有意义的。用更为通俗的话说,当体素离表面非常近的时候,它的psdf值接近于零;当体素离表面非常远的时候,它的psdf值趋于正一或者负一

3.TSDF

1.计算体素的世界坐标:设体素x中心在立体块中的坐标(vx,vy,vz),那么在世界坐标系下的位置是:

2.将体素x的世界坐标转化到相机坐标系下:

 即用该帧的相机位姿的逆矩阵左乘世界坐标3.得到对应的像素坐标:

3.计算体素x的sdf值,用像素坐标的深度值 D(Ix) 减去体素中心和相机中心的在世界坐标系下的距离t(x)

注:

Ix表示体素x投影在相机成像平面下的像素坐标;

t(x)乘以\lambda,是将沿着射线的距离转化到沿着光轴的距离,D(Ix)不乘这个系数是因为它本身就是像素点对应的沿着光轴的深度值.

4.体素x的tsdf值为:

4.Conclusion and questions

所以我们看完PSDF、TSDF的计算,会发现两者区别就在sdf的那里,PSDF是D(Ix) -Camz(x),TSDF是D(Ix) - t(x),Camz(x)是相机坐标系下的体素与相机中心的距离,t(x)是在世界坐标系下直接求得的,而相机到表面点距离用的都是D(Ix)。

注:有的版本的sdf求解中是用的\lambda*Camz(x)-D(Ix)、\lambda*t(x)-D(Ix),我也很迷糊,但是吧,这对结果的影响无非就是体素的sdf/sdf在表面的哪一边为正哪一边为负的问题罢了。 

注:还有一个问题就是有时候计算sdf时,我们不是沿着射线(相机光心出发到各个表面点的方向)计算距离之差的,而是转化到沿光轴方向(垂直于成像平面的方向)计算深度之差,如下图。这时候就需要乘个系数将其转化为沿光轴的深度,但是不管时沿射线还是沿光轴其实算出来的sdf没有太大差别(来自kinect-fusion论文原话),这里有个问题,在kinect-fusion中我们乘的系数只是在t(x)上乘并没有对D(Ix)乘,那就说明kinect相机获得的每个像素的深度信息是沿着光轴方向上的深度

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值