Skip to content

Project for 3D Geometry Reconstruction based on the open-source project - Easy3D.

License

Notifications You must be signed in to change notification settings

zfengyan/Reconstruct_3D_Geometry

Repository files navigation

Reconstruct_3D_Geometry

Project for 3D Geometry Reconstruction based on the open-source project - Easy3D.

linear_triangulation

Easy3D is a lightweight, easy-to-use, and efficient open-source C++ library for processing and rendering 3D data. IF YOU WANT TO USE IT please be aware of the following information:

COPYRIGHT:

Copyright (C) 2015 Liangliang Nan liangliang.nan@gmail.com

https://3d.bk.tudelft.nl/liangliang/

CITATION INFO:

@article{easy3d2021,
  title = {Easy3{D}: a lightweight, easy-to-use, and efficient {C}++ library for processing and rendering 3{D} data},
  author = {Liangliang Nan},
  journal = {Journal of Open Source Software},
  year = {2021},
  volume = {6},
  number = {64},
  pages = {3255},
  doi = {10.21105/joss.03255},
  url = {https://doi.org/10.21105/joss.03255}
}

More info about Easy3D please refer to: https://github.com/LiangliangNan/Easy3D.

HOW TO USE

Build and run this project, a viewer should pop up automatically, press space and the reconstructed model is shown.

Note:

After 3d reconstruction, move the mouse and the model can be seen from different positions using zoom in/out

triangulation_withwindow triangulation_zoomout_withwindow

Meanwhile some helpful information should be printed to the console.

GOOD TO KNOW

Evaluation

Method:

After retrieving the 3D points, they can be re-projected back to image planes(image_0 and image_1 respectively), the following equation is used to evaluate the results:

$\frac{\sum \sqrt{\left ( \Delta x \right )^2 + \left ( \Delta y \right )^2}}{N(points)}$

$\Delta x$: obtained x coordinate $-$ original x coordinate

$\Delta y$: obtained y coordinate $-$ original y coordinate

average difference for image 0 (points_0) is: 1.04006

average difference for image 1 (points_1) is: 0.912123

Non-linear least-squares refinement

After having the 3D points using linear-method, non-linear lease-squares refinement is used to optimize the results, specifically the Levenberg-Marquardt method.

the average difference after refinement:

average difference for image 0 is: 0.902694

average difference for image 1 is: 1.03088

Since only two images are used in this implementation, there is no big difference before/after the non-linear adjustment.

Note: the non-linear refinement can be time-consuming, if you want to turn it off you can comment the following #define directive in triangulation_method.cpp file (line 32):

#define _LM_OPTIMIZE_

COLLABORATORS

Yitong: xiayitong0630@gmail.com -> Her GitHub

Leo Kan: leo.kan01@gmail.com -> His GitHub.

SPECIAL THANKS

Special thanks go to LiangLiang, his kindly given code framework(easy3D) is the basis of this work, without which the implementations are impossible to carry out.

Special thanks go to Nail Ibrahimli, his patience and guidance on nonlinear optimization are very important, without which the non-linear method can't be correctly delivered.