老师让我用Realsense和Kinect对金属物体进行三维重建,分析对比它们重建效果。

写下这个实验过程和结果记录一下。

实验设备:Kinect v2,Intel RealSense D435
软件:RecFusionPro,3D Scan,Kinect SDK

首先介绍一下两个相机的原理,原理不同三维重建的效果也不同。

Kinect v2:

光飞行时间法(TOF)
测量光飞行时间来取得距离,具体而言就是通过给目标连续发射激光脉冲,然后用传感器接收从反射光线,通过探测光脉冲的飞行往返时间来得到确切的目标物距离。简单来说就是,发出一道经过处理的光,碰到物体以后会反射回来,捕捉来回的时间,因为已知光速和调制光的波长,所以能快速准确计算出到物体的距离。
TOF 的优点主要有:
1)检测距离远。在激光能量够的情况下可达几十米。
2)受环境光干扰比较小。
但是 TOF 也有一些显而易见的问题:
1)对设备要求高,特别是时间测量模块。
2)资源消耗大。 该方案在检测相位偏移时需要多次采样积分,运算量大。
3)边缘精度低。
4)限于资源消耗和滤波,帧率和分辨率都没办法做到较高。

Intel RealSense D435:

结构光(Structured-light)
基本原理是,通过近红外激光器,将具有一定结构特征的光线投射到被拍摄物体上,再由专门的红外摄像头进行采集。这种具备一定结构的光线,会因被摄物体的不同深度区域,而采集不同的图像相位信息,然后通过运算单元将这种结构的变化换算成深度信息,以此来获得三维结构。通常采用特定波长的不可见的红外激光作为光源,它发射出来的光经过一定的编码投影在物体上,通过一定算法来计算返回的编码图案的畸变来得到物体的位置和深度信息。
结构光的优点主要有:
1)方案成熟,相机基线可以做的比较小,方便小型化。
2)资源消耗较低,单帧 IR 图就可计算出深度图,功耗低。
3)主动光源,夜晚也可使用。
4)在一定范围内精度高,分辨率高,分辨率可达 1280x1024,帧率可达 60FPS。
结构光的缺点:
1)容易受环境光干扰,室外体验差。
2)随检测距离增加,精度会变差。

结构光与TOF的对比

对比来看,结构光技术功耗更小,技术更成熟,更适合静态场景。而TOF方案在远距离下噪声较低,同时拥有更高的FPS,因此更适合动态场景

目前,结构光技术主要应用于解锁以及安全支付等方面,其应用距离受限。而TOF技术主要用于智能机后置摄影,并在AR、VR等领域(包括3D拍照、体感游戏等)有一定的作用。

结构光和TOF两者其实各有优劣势。结构光最大的优势是发展的较为成熟,成本比较低,劣势是只适合中短距离使用。ToF优势是抗干扰性较好,视角较宽,缺陷是功耗高,造价贵,精度及深度图分辨率较低。

本实验分别采用两个典型的不同方法的深度相机进行三维重建的实验,对比TOF方法和结构光深度相机在三维重建上的差异。同时分别对普通物体(保温杯)和光滑物体(不锈钢杯)进行重建,对比它们的结果。

三种主流深度相机介绍

接下来开始进行三维重建

基于Kinect v2的三维重建

分别通过Kinect SDK和微软自带的3D Scan连接Kinect v2相机进行三维扫描重建。Kinect SDK中通过Kinect Fusion Explorer进行三维重建,需要缓慢移动Kinect相机且需要保持相机的稳定,重建时间较长,移动相机易于丢失原先的深度位置信息,导致重建效果不理想。
3D Scan不需要缓慢移动Kinect,手持相机旋转一周能够基本重建出物体的表面,对较大体积的物体重建效果较好。
本实验对保温杯和不锈钢杯进行重建,重建效果图如下:



第一张图是Kinect SDK中Kinect Fusion Explorer的重建效果,第二张是用3D Scan扫描的结果。

可以看出,Kinect v2的三维重建效果并不理想,边缘较模糊且容易丢失位置信息。这也是TOF深度相机的特点所导致的边缘精度低,帧率和分辨率都没办法做到较高,所以三维重建效果也较差。

基于Intel RealSense D435的三维重建

通过RecFusion软件连接D435相机进行三维重建,手持相机,绕物体旋转一周,即可重建出物体表面。
重建效果如下:

重建效果较好,表面完整且较光滑,这也是结构光相机的优点,更适合静态场景和三维重建。

对金属物件的三维重建



上图第一张是Kinect重建效果,第二张是RealSense的重建效果。对不锈钢杯的重建效果都不好,但RealSense D435结构光深度相机重建结果能够看出基本轮廓,而基于TOF的Kinect v2相机重建结果则无法识别出是一个杯子。

结果与分析

针对RealSense D435和Kinect v2深度相机三维重建结果,基于结构光的RealSense D435相机重建效果更好,轮廓清晰且完整,而基于TOF的Kinect v2相机则边缘模糊且易于丢失深度数据。这是深度相机的不同原理导致的,结构光更适合静态场景,TOF更适合动态场景,比如运动跟踪和VR/AR。
针对不锈钢杯重建效果都较差的现象,作出以下分析:
下图分别是Kinect v2三维重建的实时图像和RealSense D435的编码的红外光图像:


在不锈钢杯表面,Kinect v2中黑色的像素点,代表没有深度信息,而RealSense D435的红外激光点只有一部分在不锈钢杯上。
其原因与物体表面光滑度有关。当物体表面超过一定的光滑程度时,深度相机测量精度会急剧下降,甚至测量失败(没有深度值)。
漫反射是物体可以清晰成像的基础,因此我们从不同角度看同一物体,都能看的比较清楚。因此,深度相机中的成像端能够接收到足够的光线,从而清晰的成像。
镜面反射发生在物体表面(接近)绝对光滑的情况下,比如水面、镜子、抛过光的金属表面等。当物体表面发生镜面反射时,只有当被测物体位于深度相机的发射端和接收端(成像端)的中垂线时,才能接收到反射光线,并且强度很集中,容易发生过度曝光;而其他情况下能够接收到的反射光线非常少,无法成像。

参考博客:深度相机的坑

Kinect v2和Intel RealSense D435的三维重建对比相关推荐

  1. SLAM之camera(Intel RealSense D435)调试第一弹:Win10平台下getting started

    参见官方的getting started文档 https://software.intel.com/en-us/realsense/d400/get-started,这个quick start gui ...

  2. python如何拟合三维平面(拟合Intel Realsense D435深度数据点)

    文章目录 拟合Intel Realsense D435深度数据点 参考文章:[MQ笔记]超简单的最小二乘法拟合平面(Python) import numpy as np import matplotl ...

  3. python Intel Realsense D435 多线程资源分配问题(卡住、卡死)

    在使用python多线程调用Intel Realsense D435多个摄像头时,发现pyrealsense的例如pipeline.start().context.query_devices()函数会 ...

  4. 为什么Intel Realsense D435深度摄像头在基于深度的水平方向障碍物检测(避障)方案中,摄像头不宜安装太高?

    补一句,为啥R与b对比就要比R与a对比更容易区分? 因为a与b的右端和障碍物R属同一深度,但b左端明显比a左端深度大,总体比a拥有差异性更大的深度范围,因此b与a相比,对R拥有差异性更大的深度范围, ...

  5. Tensorflow_yolov3 Intel Realsense D435奇怪的现象,多摄像头连接时一旦能检测到深度马上就会卡(卡住)

    两个摄像头连接时一旦能检测到深度马上就会卡(小于30公分),,单个摄像头没事,这是使用了多线程传输后的现象,不知咋回事... 后来加了这句验证全局变量是否存在,好像好点了,有待验证 20200401 ...

  6. Intel Realsense D435 python multiprocessing 摄像头多进程流传输

    参考文章1:python 测试multiprocessing多进程 参考文章2:Intel Realsense D435 多摄像头目标识别架构

  7. Intel Realsense D435 是否启动pipeline.start()就开始传输帧,还是只有我们调用wait_for_frames()函数时它才会传输帧?(任务管理器USB带宽内存测试)

    我猜想Intel Realsense D435摄像头只要启动pipeline.start()函数,就会开始传输帧,无论我们是否调用wait_for_frames()或者poll_for_frames( ...

  8. 20200314 SQ Intel Realsense D435 USB 线长、转接线个数测试数据表

    测试名称 Intel Realsense D435 摄像头USB线支持最大线长.转接线个数测试 测试参数 Platform:win10x64 系统内存:32G 测试程序:tensorflow_yolo ...

  9. Tensorfow_yolov3 Intel Realsense D435 图像整合(合并)输入GPU计算耗时测试

    以前我们六个摄像头轮询依次输入视频帧给识别函数,识别函数放到GPU计算,640×360下每帧识别耗时为60-80ms,轮一圈下来识别就很慢了,约360-480ms 后来我们讨论这个问题时,我说之前我测 ...

最新文章

  1. 我的一天:时间都去哪了?
  2. struts2之请求参数接收
  3. 谈谈redis,memcache的区别和具体应用场景
  4. 测试软件ipc,IPC整机测试工具
  5. uva 138——Street Numbers
  6. 吴恩达机器学习笔记十三之推荐系统
  7. Selenium 与PhantomJS
  8. linux 多进程 同步,Linux内核同步,进程,线程同步
  9. Java教程:Java是什么?Java的特点有哪些?
  10. 第五章:【UCHome二次开发】模板解析
  11. docker简单介绍----存储
  12. mysql 常用日期,时间函数
  13. c语言中转义字符efg,c语言的转义字符与空白符
  14. MYSQL读写性能测试
  15. 古月居ROS入门21讲——10-12.Publisher和Subscriber的编程实现 话题消息的定义与使用
  16. A callback was made on a garbage collected delegate of type...
  17. 按照账号定位持续发视频,数据不会太差!
  18. 社团活动报名简要代码
  19. 2020计算机会计初级,2020年初级会计官网登录入口
  20. 大道至简之一:如何准确把握趋势

热门文章

  1. 【SAP Abap】记录一次增强开发之销售交货开票VF04增强
  2. 诺基亚n1平板电脑刷机教程_诺基亚N1平板电脑做工如何?诺基亚N1拆机图解评测...
  3. VMWare 移动Linux CentOS 7虚拟机后连不上网怎么办
  4. Windows 7下硬盘安装Ubuntu 14.04图文教程
  5. 空间存储公链的5G商用路径-共建TB级大数据存储商机
  6. Ubuntu18.04 cuda安装
  7. 前端学习笔记(一)HTML5
  8. 我奋斗了18年不是为了和你壹起喝咖啡
  9. 洛谷P1868 饥饿的奶牛 题解
  10. corex9服务器组装攻略,超频极速散热 Tt Core X9水冷最佳拍档