Как пометить пустые данные в библиотеке облаков точек (PCL) при использовании итеративной ближайшей точки (ICP)

Я пытаюсь выровнять 2 набора облаков точек, используя Итеративная ближайшая точка (ICP) алгоритм интегрирован в Библиотека облаков точек (PCL). Я получаю сообщение об ошибке, в котором говорится, что он не может найти достаточно точек соответствия. Я уже ослабил условия для параметров: setEuclideanFitnessEpsilon (-1.797e + 5), setMaximumIterations (40) и setRANSACIterations (2000) и все еще с той же проблемой .. (Я не нашел много информации о том, какие или как эти условные значения должны быть для правильного выравнивания, так любая помощь в связи с этим тоже был бы очень признателен)

Я подозреваю, что эта проблема связана с тем фактом, что в моем облаке много точек данных NULL, которые я пометил значением NULL (0). Это правильно сделано при использовании PCL? Существует ли стандартное значение NULL для PCL? Я явно не хочу, чтобы алгоритм учитывал эти пустые точки при попытке выровнять наборы данных.

Спасибо за вашу помощь

3

Решение

Если вы используете 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 может быть болезненной. Возможно, вам придется сделать гораздо больше настроек параметров в зависимости от ваших данных.

6

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]