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)乘以,是将沿着射线的距离转化到沿着光轴的距离,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求解中是用的*Camz(x)-D(Ix)、*t(x)-D(Ix),我也很迷糊,但是吧,这对结果的影响无非就是体素的sdf/sdf在表面的哪一边为正哪一边为负的问题罢了。

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

PSDF和TSDF对比相关推荐

  1. KinectFusion基于深度的实时稠密三维重建TSDF开山之作

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨安如夏@知乎 来源丨https://zhuanlan.zhihu.com/p/281482545 ...

  2. 三维重建:深度相机方案对比-KinectFusion的基本原理(尺度)

    KinectFusion算法原理依据2011年发表的Fusion重建的论文,主要重建方法为TSDF算法,并在GitHub上开源了相关代码,可以直接编译使用.Github: https://github ...

  3. 不同编程语言之间的具体实现对比

    不同语言之间的具体实现对比 官网地址:https://programming-idioms.org/ 这个网站的核心存储部分代码是开源的,使用 Go 语言实现.源码地址: https://github ...

  4. 正向最大匹配 和逆向最大匹配对比比较

    正向最大匹配法 &逆向最大匹配法 原理对比 下面介绍的分词算法中最简单的正向最大匹配和反向最大匹配. 这种两种方法都是机械分词方法,它是按照一定的策略将待分析的汉字串与一个"充分大的 ...

  5. JDBC与数据库连接工具对比分析

    JDBC 使用步骤: 注册数据库驱动 通过DriverManager获取数据库连接 通过Connection对象获取Statement对象 使用Statement执行SQL语句 操作ResultSet ...

  6. GeforceRTX系列参数对比

    GeforceRTX系列参数对比

  7. YOLO、SSD、FPN、Mask-RCNN检测模型对比

    YOLO.SSD.FPN.Mask-RCNN检测模型对比 一.YOLO(you only look once) YOLO 属于回归系列的目标检测方法,与滑窗和后续区域划分的检测方法不同,他把检测任务当 ...

  8. RCNN系列、Fast-RCNN、Faster-RCNN、R-FCN检测模型对比

    RCNN系列.Fast-RCNN.Faster-RCNN.R-FCN检测模型对比 一.RCNN 问题一:速度 经典的目标检测算法使用滑动窗法依次判断所有可能的区域.本文则预先提取一系列较可能是物体的候 ...

  9. TCP/UDP对比总结

    在计算机网络中,有三种体系结构划分方式,第一种是OSI七层协议体系结构,由上到下分别是:应用层,表示层,会话层,运输层,网络层,数据链路层,物理层:第二种是TCP/IP四层协议,由上到下分别是:应用层 ...

最新文章

  1. 对多态变形引擎背后方法的概述
  2. 数据结构与算法之二分查找法
  3. JAX-WS开发webservice示例详解
  4. Git-分布式版本控制系统
  5. [SHELL]监控LINUX目录文件变化
  6. 补习系列(18)-springboot H2 迷你数据库
  7. 计算机网络操作系统课件,计算机网络操作系统课件(张浩军版).ppt
  8. 【数据结构笔记04】线性结构:线性表及其实现
  9. 总结_____大二上
  10. poj 3468 A Simple Problem with Integers 线段树!!!!
  11. 智能优化算法应用:基于GWO优化的最小交叉熵图像多阈值分割 - 附代码
  12. 文件不能超过200k_为什么答题时上传的文件大小不允许
  13. 第一至第七次人口普查县级人口普查GIS数据集(1953-2010)
  14. Photoshop插件-奥顿效果(梦幻柔焦)-脚本开发-PS插件
  15. 如何在word中的图片上画圈标注_教你如何轻松在图片上画圈圈、画箭头、写注释...
  16. React-笔记整理
  17. 顶尖作者介绍 | 心理学领域研究“情绪”的大牛们有哪些?
  18. C语言经典一百题(六)用*号输出字母C的图案。
  19. matlab命令批量重命名,MATLAB中预定义对话框之文件打开对话框以及如何批量重命名...
  20. Paper系列的查重和知网维普的查重对比

热门文章

  1. 请用Python语言写一个巨潮资讯网批量下载PDF的程序
  2. 7/8~馈线接头的制作
  3. R语言|for循环————R语言入门到入土系列(八)
  4. java计算机毕业设计基于安卓Android的运动健身打卡管理软件 uniapp
  5. 斗地主智能(AI)出牌算法
  6. vulnstack红日-4
  7. L0范数,L1范数,L2范数的详解(很详细,转载)
  8. html5跨域获取页面元素,iframe嵌套页面 跨域
  9. 阿蒙:程序员创业如何寻找优秀的合作伙伴?
  10. Need For Speed: Underground - 0/111