http://jiakaizhang.com/project/real-time-3d-reconstruction/

Real-time 3D Reconstruction using Kinect

Real-time 3D Reconstruction

Jiakai Zhang, Prof. Davi Geiger
New York University
July 2012 – September 2012

In order to reconstruct an indoor scene using a moving Kinect camera, I first needed toalign point clouds of different frames, then integrate them and rebuild the surface, and finally realize the real-time reconstruction using CUDA language.

More details are in my report.

Here is the pipeline:

Figure 1 pipeline

1. Input raw data – depth image

The figure 2 shows the raw data from Kinect which is RGB Image and Depth Image.

Figure 2 Raw Data from Kinect

The Kinect Camera has 30 FPS. The resolution for the depth image is 640 by 480.

2. Noise reduction – bilateral filtering

The raw depth data from the Kinect is pretty noisy. It’s hard to use for camera tracking. If I apply the Phong-shading to represent the normal map, the noisy normal vectors make the objects irregularity.

Figure 3 Raw Normal Map

Thus we implement a bilateral filtering which is used to smooth the depth image and remove noise while still preserving edges. The details of this algorithm shows on this Web Page. The figure 4 shows the result by choosing different parameters of filtering

 

Figure 4 bilateral filtering process results

3. Camera Pose Estimation – ICP

The input of ICP is the consecutive cloud points and normal vectors in different frames. The output is the 6DOF transformation matrix T which indicates the pose of camera. The figure 5 shows the results before and after applying ICP. The two images are obtained from two different viewports but the same scene.

Figure 5 ICP Result

6. Update reconstruction – TSDF and Ray Casting

Once I know the position and rotation relations between frames, I can use TSDF to merge all frame depth map into one. Here I use truncated signed distance function (TSDF) to save merged data. TSDF actually a 3d tensor or I call it a cube, which represents the space I are measuring. The value of each volume in the cube is the distance to closest surface. And this distance is signed and truncated. If the volume is behind the surface in the view of camera, then I set distance a negative value. If the distance between volume and surface is too long, then I set the distance equal to 1 or -1. I use truncation to efficiently get parallel surfaces.

After updating the TSDF cube, I choose the particular camera position to cast ray to the volume of the TSDF cube. If we find the sign of the TSDF value changes, it means we find a point on the surface. And we calculate the normal vector by calculating the gradient of TSDF at this point. The figure 6 shows the result of ray casting.

Figure 6 Ray Casting

7. Reference

[1] KinectFusion: Real-Time Dense Surface Mapping and Tracking. Microsoft Research
[2] B. Curless and M. Levoy. A volumetric method for building complex models from range images.
[3] M. Harris, S. Sengupta, and J. D. Owens. Parallel prefix sum (scan) with CUDA. In H. Nguyen, editor, GPU Gems 3, chapter 39, pages 851–876.
[4] C. Tomasi and R. Manduchi. Bilateral filtering for gray and color images. In Proceedings of the ICCV, 1998.
[5] C. Rasch and T. Satzger. Remarks on the O(N) implementation of the fast marching method.
[6] Y. Chen and G. Medioni. Object modeling by registration of multiple range images. Image and Vision Computing (IVC), 10(3):145–155,1992
[7] Kok-Lim Low Linear Least-Squares Optimization for Point-to-Plane ICP Surface Registration

最新文章

  1. 都昌 DCWriter电子病历编辑器演示文档截屏
  2. Bootstrap3.0学习第八轮(工具Class)
  3. nova.conf部分参数解析
  4. Java Excel POI
  5. hdoj 2097 Sky数
  6. 一个很简单的SqlServer生成常用C#语句工具的诞生
  7. SSD Buffer Pool Extension
  8. 细说java系列之HashMap原理
  9. GhostScript应用一例:使用GhostScript强行修改加密PDF
  10. 如何利用Grunt生成对应的Source Map文件,线上代码压缩使用chrome浏览器便于调式
  11. Codeforces Round #515 (Div. 3)
  12. Centos6.5使用yum安装mysql——快速上手必备(转)
  13. AD添加LOGO的方法
  14. N个不同球取出M个的组合个数求解
  15. docker下 klee第一个测试
  16. mycat性能调优
  17. Deploying Cloud Foundry on OpenStack Juno and XenServer (Part II)
  18. 开发者和系统管理者最喜爱的开源工具Vim 起步学习的五个技巧
  19. WPF 中依赖属性的继承(Inherits)
  20. Yii 利用layer删除数据

热门文章

  1. cbv
  2. OD基本汇编指令
  3. VMWare虚拟机下CentOS 配置网络实现远程连接,提供Web访问
  4. 详解Android基本布局
  5. 解决 git push Failed to connect to 127.0.0.1 port 45463: 拒绝连接
  6. WindowsPhone&Windows8.1&Windows8&Unity3d 填坑日记
  7. Tasker to detect and vibrate once the ougoing call is being answered
  8. maven打包出错: Failed to clean project: Failed to delete
  9. leetcode第一刷_Gray Code
  10. struts2 iterator 迭代标签只显示前五条记录