Anttwo / SuGaR

[CVPR 2024] Official PyTorch implementation of SuGaR: Surface-Aligned Gaussian Splatting for Efficient 3D Mesh Reconstruction and High-Quality Mesh Rendering
https://anttwo.github.io/sugar/
Other
2.04k stars 147 forks source link

convert.py (colmap) only produces 2 images for reconstruction after undistortion #153

Open alexjulianleeds opened 5 months ago

alexjulianleeds commented 5 months ago

When using images taken from a turntable, where the camera is stationary and the object is rotating, after running the convert.py script to generate the colmap output files/images, it is only generating two undistorted images for reconstruction. Here is an example from the input data set, there are 128 input images . when i run in the colmap gui the camera poses, sparse, and dense reconstructions look good, but I can't get this script to produce similar results. I have tried using the SIMPLE_RADIAL camera instead of the default OPENCV but that did not help either. I did try with a data set from a video where the object is stationary and the camera is moving around the object, the background was also noisier, and this produced the expected quantity or output images (more than two). This blog post makes it seem as though it should be possible to use turntable images as input but I can't figure out why my dataset wont work - https://www.reshot.ai/3d-gaussian-splatting 063A7986_converted

homee-dennis commented 5 months ago

The Author had already given tips in README section as follow :

Sometimes COLMAP fails to reconstruct all images into the same model and hence produces multiple sub-models. The smaller sub-models generally contain only a few images. However, by default, the script convert.py will apply Image Undistortion only on the first sub-model, which may contain only a few images.

If this is the case, a simple solution is to keep only the largest sub-model and discard the others. To do this, open the source directory containing your input images, then open the sub-directory /distorted/sparse/. You should see several sub-directories named 0/, 1/, etc., each containing a sub-model. Remove all sub-directories except the one containing the largest files, and rename it to 0/. Then, run the script convert.py one more time but skip the matching process:

python gaussian_splatting/convert.py -s <location> --skip_matching Note: If the sub-models have common registered images, they could be merged into a single model as post-processing step using COLMAP; However, merging sub-models requires to run another global bundle adjustment after the merge, which can be time consuming.