GhiXu / ACMMP

Multi-Scale Geometric Consistency Guided and Planar Prior Assisted Multi-View Stereo (TPAMI 2022)
MIT License
173 stars 28 forks source link

I tried it on my own dataset, but the depth maps look bad #17

Open jlartois opened 11 months ago

jlartois commented 11 months ago

Thank you very much for providing this code. I was able to get it running pretty smoothly with the instructions provided, and (important) by setting -gencode arch=compute_75,code=sm_75 in the CMakeLists.txt for my RTX 2080TI. However, the depth maps look very bad.

For anyone curious of what the ACMMP results look like on an example, real-world dataset, see this issue. I took 46 1920x1080 images around a bench. I have experience with MVS, so I take extreme care to fix any camera sensor parameters and minimize motion blur. The 46 images can be seen/downloaded here.

The colmap camera calibration looks fine: colmap_cameras

The colmap fused.ply confirms that the calibration is good: colmap_fused_ply

For completeness, instant-ngp (NeRF) also is able to correctly reconstruct the scene using the camera params from colmap: nerf_bench

These are the results of ACMMP:

pair.txt looks perfect, so this is not an issue.

fused.ply looks okay, with some grass floating around the bench: acmmp_fused_ply

but the depth maps look far from state-of-the-art. Here is an example (some other depth maps are better, some worse, I choose a medium quality result here): acmmp_00

For completeness, here is triangulation.png: triangulation

And cam.txt for that view:

extrinsic
-0.08673854313624396 -0.2679040394615737 0.9595331420929523 -0.6274956343112816 
0.3387279337358484 0.8978490046369267 0.28130153177599776 -1.0606581292946664 
-0.9368776932138179 0.34942036362045586 0.012868467107772341 3.3920741925552123 
0.0 0.0 0.0 1.0 

intrinsic
1640.4268290361326 0.0 944.0 
0.0 1640.4268290361326 531.0 
0.0 0.0 1.0 

2.099985 0.259745 192.000000 51.711275

Btw, I used your readDepthDmb() in ACMMP.cpp to read in the depths_geom.dmb files and convert them to png. I clamped the float depth to [0, 30] and normalized them to 16-bit unsigned shorts.

So, do you think these results are expected? What do you recommend to improve the depth maps? The triangulation.png shows that ACMMP is at least aware that there should be a boundary around the bench, but the depth maps around the bench is not nicely defined.