Я пытаюсь выровнять 2 набора облаков точек, используя Итеративная ближайшая точка (ICP) алгоритм интегрирован в Библиотека облаков точек (PCL). Я получаю сообщение об ошибке, в котором говорится, что он не может найти достаточно точек соответствия. Я уже ослабил условия для параметров: setEuclideanFitnessEpsilon (-1.797e + 5), setMaximumIterations (40) и setRANSACIterations (2000) и все еще с той же проблемой .. (Я не нашел много информации о том, какие или как эти условные значения должны быть для правильного выравнивания, так любая помощь в связи с этим тоже был бы очень признателен)
Я подозреваю, что эта проблема связана с тем фактом, что в моем облаке много точек данных NULL, которые я пометил значением NULL (0). Это правильно сделано при использовании PCL? Существует ли стандартное значение NULL для PCL? Я явно не хочу, чтобы алгоритм учитывал эти пустые точки при попытке выровнять наборы данных.
Спасибо за вашу помощь
Если вы используете PCL, значение по умолчанию для недействительных данных не NULL, а NaN. Поэтому, если вы хотите пометить точку как недействительную, вы должны сначала включить <limits>
файл, а затем установить позиции в «std :: numeric_limits :: quiet_NaN ()». Обычно это делается так
const float bad_point = std::numeric_limits<float>::quiet_NaN();
if( is_invalid_point )
p.x = p.y = p.z = bad_point;
Но в любом случае, настройка ICP может быть болезненной. Возможно, вам придется сделать гораздо больше настроек параметров в зависимости от ваших данных.
Других решений пока нет …