У меня есть облако точек сцены, в которой присутствует один интересующий объект вместе с некоторыми другими точками.Я также знаю координаты восьми углов трехмерной ограничительной рамки, которая оказывается кубоидом.
Теперь у меня есть случай использования, когда мне нужно преобразовать это облако точек в систему координат камеры, где каждая 3D-точкаполучит новую координату XYZ.Точно так же восемь угловых точек трехмерного ограничивающего прямоугольника должны быть преобразованы в систему координат камеры.
Теперь у меня есть внешняя матрица;(матрица вращения и перемещение), которая преобразует векторы столбцов из системы координат камеры в мировую систему координат.Я преобразовываю матрицу вращения в кватернион для простоты.
Я хочу преобразовать координаты облака точек и ограничительной рамки из мировой системы координат в систему координат камеры.Итак, я получаю обратное преобразование, просто взяв обратное вращение и отрицательный перевод следующим образом:
void get_inverse_transform( const Eigen::Quaternionf& orientation,
const Eigen::Vector3f& translation,
Eigen::Quaternionf& inverse_orientation,
Eigen::Vector3f& inverse_traslation)
{
inverse_orientation = orientation.normalize().inverse().normalise();
inverse_translation = -1*inverse_orientation._transformVector(position);
}
Теперь inverse_translation
и inverse_orientation
содержат преобразование, которое преобразует точки в мировой системе координат всистема координат камеры.
Итак, я преобразую восемь углов ограничительной рамки, используя это преобразование, в координаты камеры следующим образом:
void project2CS( const Eigen::Quaternionf& inverse_orientation,
const Eigen::Vector3f& inverse_position,
std::vector<Eigen::Vector3f>& bbox3d_corners)
{
for( auto& corner: bbox3d_corners )
{
auto transformed_vec = inverse_orientation._transformVector(corner) + inverse_translation;
corner[0] = transformed_vec[0];
corner[1] = transformed_vec[1];
corner[2] = transformed_vec[2];
}
}
Я также преобразую облако точек в камерусистему координат и визуализируйте ее с помощью ограничительной рамки, ограничивающая рамка больше не окружает объект.Более того, я вижу, что размер ограничительной рамки немного меняется.
Я подозреваю, что делаю что-то не так в получении обратного преобразования.Любые идеи о том, как получить эту работу?