Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

How to keep the original resolution in MVS #335

Closed
XudongYong opened this issue Jun 6, 2018 · 3 comments
Closed

How to keep the original resolution in MVS #335

XudongYong opened this issue Jun 6, 2018 · 3 comments

Comments

@XudongYong
Copy link

XudongYong commented Jun 6, 2018

Hi @cdcseacave ,

Thanks a lot for your great job! I have a question about the reconstructed resolution and hope you can give me some suggestions.
Currently, my input images are with high resolution(6000 * 4000), so in order to keep balance of process speed, memory usage and final result, I resize these images to 1500 * 1000 in openMVG and then use these down-sampled images to generate final result in openMVS. Now, This pipeline (generate sparse point cloud >> densify >> reconstruct mesh >> texture mesh) works normally.
However, I have no good idea how to keep the original resolution in the final reconstructed result after doing following attempts:

  1. Directly use original images, and then the process speed become very low and it's easy to face memory leak problem.
  2. Generate sparse point cloud with down-sampled images, and then use original-resolution images to densify point cloud, reconstruct mesh and texture mesh. The result is just the same as above.
  3. Generate sparse point cloud with down-sampled images, and then directly generate mesh by using sparse point cloud, and finally texture the mesh. This method can greatly improve the speed but the quality of final result is not good, since often there are some regions have no texture and lots of regions cannot be reconstructed in the mesh.

So, do you have any suggestions to keep the original resolution in openMVS?

@cdcseacave
Copy link
Owner

the full resolution images should always be used, right from the beginning (SfM stage) and at each step you have the possibility to control the maximum resolution at which that module can work; for example if u want to compute the dense point cloud at half the original resolution you simply pass --resolution-level 1 to DensifyPointCloud module; in this way you can distribute the works as you see fit, use lower resolution where not needed, and higher where needed, like texturing

@XudongYong
Copy link
Author

XudongYong commented Jun 7, 2018

Hey @cdcseacave ,

Thanks for your quick reply! I understand your method, which is somewhat similar to previous my attempt 1, and it will introduce speed and memory problems. I have done the following test today, and do you think it is what you mean?
Step1: In SfM stage, I use full resolution images and generate the sparse point cloud but the speed is slower. Then, I use openMVG2openMVS to generate the scene.mvs and undistorted images with full resolution.
Step2: In DensifyPointCloud, I compute the dense point cloud at 1/8 of the original resolution by using --resolution-level 3;
Step3: In ReconstructMesh, generate the mesh scene based on scene_dense.bin;
Step4: In TextureMesh, if I use full resolution the thread will be killed owing to out of memory. But this step works normally when I set --resolution-level to 1 or 2.

Currently, I am always considering one thing, that if I have known the DEM of a place, maybe I can skip step2 and just update the generated texture each time, some ideas?

@cdcseacave
Copy link
Owner

not sure I know the problem u want to solve; I think the resolution issue is clear though; pls open a different issue if you have an other one

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants