STORM-IRIT / OpenGR

OpenGR: A C++ library for 3D Global Registration
https://storm-irit.github.io/OpenGR/
Other
348 stars 74 forks source link

Program exits unnormally when delta is too small #71

Open morgan-bc opened 4 years ago

morgan-bc commented 4 years ago

When the delta (max_norm_dist) in the options is too small, the Super4PCS GlobalRegistration cannot run successfully and will exits unnormally without computing the right transformation. For example, the program works well when delta=0.1, but crashes when delta=0.01. The document of Super4PCS says that delta is parameters to verify how much the clouds are aligned. Why the program goes to crash when the delta is small ?

nmellado commented 3 years ago

Delta is a parameter that controls the desired accuracy of the algorithm. Indirectly, it influences the size of several internal data-structures. In most cases, wrong parameter values leads to empty congruent set and thus wrong transformation estimation. Could you share the dataset causing the crash, so I can investigate from where it comes from ? Also, you might consider looking at the documentation, which explains how to set parameters according to input data.

morgan-bc commented 3 years ago

Thanks for your explanations. The testing data is private and I cannot shared it on the public forum. The registration parameters are

    gr::UniformDistSampler<Point3D> sampler;
    TransformVisitor vistor;
    gr::Utils::Logger logger(gr::Utils::Verbose);

    MatcherType::OptionsType options;
    MatrixType mat = MatrixType::Identity();
    options.sample_size = 2000;
    options.max_normal_difference = -1;
    options.max_color_distance = -1;
    options.max_time_seconds = 30;
    options.delta = 0.1;
    options.configureOverlap(0.5);

    MatcherType matcher(options, logger);

Note that the source mesh and the target mesh are partialy overlapped. The program works well at delta=0.1, but goes to crash at delta=0.01

nmellado commented 3 years ago

Reducing the parameter delta increase the resolution of the acceleration structures. I experienced crashed when trying to allocate too large datastructures, maybe this is what happens to you ? Could you please check the memory consumption when the program crash ?