Project for 3D Geometry Reconstruction based on the open-source project - Easy3D.
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.
-
Clone this project at: https://github.com/SEUZFY/Reconstruct_3D_Geometry.git
-
Or download the code and open the CMakeLists.txt file in an IDE.
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
Meanwhile some helpful information should be printed to the console.
-
The triangulation method is described in details here and here. IT SHOULD BE NOTED that this explanation comes from the course notes, if you want to use it in a scientific work, you are kindly asked to mention the ORIGINAL author:
< Liangliang Nan liangliang.nan@gmail.com >
-
The
triangulation implementation
is in triangulation_method.cpp, all the other files are kindly given by Liang Liang. -
The
workflow
is illustrated with some code examples here.
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:
x
coordinate x
coordinate
y
coordinate y
coordinate
average difference for image 0 (points_0)
is:
1.04006
average difference for image 1 (points_1)
is:
0.912123
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_
Yitong: xiayitong0630@gmail.com -> Her GitHub
Leo Kan: leo.kan01@gmail.com -> His GitHub.
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.