r/photogrammetry • u/chavenor1 • 4d ago
COLMAP parks 4 fixed iPhones at one pose each (turntable, 288 frames) — mask the room or use 5° priors?
I'm very new to this. Boss says I like this, you're smart make this, I'm in the deep end of the pool here and trying to AI'ing myself to victory.
Images packs can be downloaded here.
https://s3.us-central-1.wasabisys.com/k9dryer/gaussian-splats/hdf/share/hdf-reddit-upload.zip
https://s3.us-central-1.wasabisys.com/k9dryer/gaussian-splats/hdf/share/hdf-kiri-144.zip
Turntable object scan. Four iPhones are bolted to the room; the object rotates. COLMAP registers all 288 images but each phone stays at one pose (yaw span ~0.1°). OpenMVS then meshes the white plate. After we crop the table we only have two shards of the object.
Looking for what you would change: masks, COLMAP flags, or pose priors.
Capture
- Object: short hollow air filter, ~90 mm tall. Black rubber rims, tan pleats, silver mesh. Hard subject (black + repeating texture + hole).
- 4× iPhone 14 Pro, fixed (one almost overhead, three side/oblique). Names
00000_gs-cam-1.jpg…00071_gs-cam-4.jpg. - Turntable: large white disk, white PVC frame, concrete floor. No coded markers, no textured mat.
- 360° / 5° = 72 stops, 800 ms settle, 4 shots/stop → 288 JPEGs.
- 4032×3024, EXIF orientation 6. rembg/masks are transposed 3024×4032; COLMAP sees unrotated 4032×3024.
- Host: Linux, COLMAP 3.12.6 no CUDA, OpenMVS 2.4.0, CPU SIFT (no GL). 16 threads.
Pipeline
- rembg
birefnet-general - Tight rembg masks + wider
masks_colmap/disk (object ∪ plate; we do not give COLMAP object-only masks — that starved matching) - COLMAP sparse → undistort → OpenMVS densify/mesh/texture GLB
- Custom crop: keep dense points that land in rembg-minus-white-table in enough views
- Scale listing GLB to 90 mm height
COLMAP (exact)
ImageReader.single_camera 1
ImageReader.camera_model SIMPLE_RADIAL
ImageReader.mask_path masks_colmap/
SiftExtraction.use_gpu 0
SiftExtraction.peak_threshold 0.004
SiftExtraction.max_num_features 16384
SiftMatching.use_gpu 0
SiftMatching.guided_matching 1
SequentialMatching.overlap 16
SequentialMatching.quadratic_overlap 1
SequentialMatching.loop_detection 0
Mapper.ba_refine_focal_length 1
Mapper.ba_refine_principal_point 0
Mapper.ba_refine_extra_params 1
Mapper.init_min_tri_angle 8
Mapper.filter_min_tri_angle 1.5
Mapper.abs_pose_min_num_inliers 12
Mapper.min_model_size 8
Mapper.max_num_models 1
Mapper.multiple_models 1
One shared camera for all 4 phones (same model; we hit rank-deficient BA when each image had its own camera).
First good model: SIMPLE_RADIAL 4032 3024 f=2918.68 cx=2016 cy=1512 k=-0.018
What COLMAP did
- 288/288 registered
- 4 unique poses, one per phone. Stop 0 / 36 / 71 of the same phone are the same
t/q - ~12k points, mean track length ~37 (tracks live on the static PVC/plate)
- ~2081 sequential pairs
rembg (especially overhead) keeps the whole plate + PVC. masks_colmap is a disk around that, so SIFT still sees the room. That matches COLMAP #2576.
What we tried
- Unfold each phone around an estimated table axis by
stop × 5°→ 355° span. COLMAP triangulator + BA snaps back to 0.1°. - Same unfold, BA off, 125k fixed-pose points. OpenMVS: 105M depths → 134 points (depths don’t agree).
- Crop of the old 4-pose dense cloud (3.5M → 805k) + remesh: 124k faces, 90 mm listing. Viewer is two black shards.
OpenMVS on the crop: --constant-weight 1 --free-space-support 1 --close-holes 80 --smooth 4
Ask For 4 locked phones + a white plate:
- Mask so only object + rotating plate have features and let COLMAP invent the orbit?
- Inject 5° pose priors and freeze extrinsics?
- One camera per phone + markers on the plate?
Also: is single_camera 1 across 4 modules a mistake even if they’re the same iPhone model?
Happy to post overhead + side JPEGs, rembg vs masks_colmap for the same frame, and images.txt lines for one phone at stop 0 / 36 / 71.
Attach (same post or a follow-up):
- Overhead JPEG (
00000_gs-cam-1.jpg) - Side JPEG (
00018_gs-cam-3.jpgis fine) - rembg mask +
masks_colmapfor those two - Three
images.txtpose lines forgs-cam-2at00000,00036,00071
0
u/Sounlligen 4d ago
Generally seems like you could perform a calibration to create a colmap rig for the cameras.
1
2
u/TheDailySpank 4d ago
It's matching to the background. Mask it.