simonfuhrmann / mve

Multi-View Environment
http://www.gcc.tu-darmstadt.de/home/proj/mve/
Other
993 stars 419 forks source link

(How to add) support for Survey points? #279

Closed lexvandersluijs closed 7 years ago

lexvandersluijs commented 7 years ago

Hi,

Is there a way to provide MVE with known 3D points, and the location of their projections in 2D views?

This is a technique used in e.g. Autodesk ReCap Photo, Acute3D to prevent/correct drift or warping in reconstructions. There they are called 'Survey points', as they have been surveyed by conventional techniques: using a total station, lookup up the points in a floorplan, etc.

In this presentation by Folker Wienertapper, Harald Wuest e.a. (Fraunhofer) they are called Anchor points: http://www.vis.uky.edu/3dimpvt/assets/papers/18th/FolkerWientapper/FolkerWientapper3DIMPVTRecX.pdf, except there they use 3D-3D correspondences. First a 3D point cloud is created, then a few points are identified for which the location is known, then these are moved to the correct location and marked as 'locked' (a feature of SBA), and the bundle adjustment is run again. This should work well, however the correct point in a sparse point cloud is not always easy to find, so 2D-3D correspondences might be easier to specify.

We have to main uses in mind:

Looking forward to hearing what you think of this!

BR, Lex

pmoulon commented 7 years ago

May I suggest to take a look to the GCP registration of OpenMVG http://openmvg.readthedocs.io/en/latest/software/ui/SfM/control_points_registration/GCP/

GCP can be used for rigid registration (similarity computation) or non rigid registration as BA constraints. (see here for the implementation https://github.com/openMVG/openMVG/blob/master/src/software/ui/SfM/control_points_registration/mainLayout.cpp#L215)

The rigid registration approach can be implement easily in MVE too.

BTW, as you suggested you can use some marker of known dimension and then resize the reconstruction to those known measurements.

@simonfuhrmann Feel free to remove my post if it is not appropriate (as I spoke about OpenMVG and not MVE code).

simonfuhrmann commented 7 years ago

It's appropriate, and MVE doesn't support this feature. Specifying 2D-3D correspondences is not possible. I would need to look deeper into the issue to implement this, but I don't have the time. And I don't know how important such a feature is for MVE...

lexvandersluijs commented 7 years ago

Hi Simon and Pierre,

Thanks for your answers. Regarding the importance for MVE, a feature like this would help to get the highest-quality reconstruction as possible, especially if they cover a very large area. But maybe the scope of MVE does not extend to very large areas, so in that case it's probably not a high priority.

For the second scenario - automatic scaling and alignment of smaller scans- I think I have found a workaround:

Just thought I'd share this here, in case someone else could use such a feature.

BR, Lex

simonfuhrmann commented 7 years ago

Once you know the transformation parameters, maybe this code helps. It is used to normalize the scene, but with a few tweaks it will do what you want. https://github.com/simonfuhrmann/mve/blob/master/libs/sfm/bundler_incremental.cc#L488