Получение 2d-3d точечных соответствий для pnp или posit
Я пытаюсь оценить позу и положение спутника по его изображению. У меня есть 3D модель спутника. Использование либо PnP-решателей, либо POSIT прекрасно работает, когда я сам выбираю соответствие точек, однако мне нужно найти метод, который автоматически сопоставляет точки. Используя угловой детектор (лучший, который я нашел, основан на контуре), я могу найти все соответствующие точки на изображении, а также несколько паразитных точек. Однако мне нужно сопоставить данную точку на изображении с правильной точкой в 3D-модели. Статьи, которые я читал на эту тему, всегда предполагают, что мы нашли пары точек, не вдаваясь в подробности о том, как это сделать.
Обычно используется какой-либо подход, который может определить эти соответствия на основе некоторых инвариантных признаков? Или мне следует прибегнуть к другому методу, не основанному на угловых точках?
2 ответа
Вы можете взглянуть на алгоритм SoftPOSIT, который определяет 3D-2D соответствия и затем выполняет алгоритм POSIT. Насколько я знаю, Matlab-код доступен для SoftPOSIT.
Вы должны сделать PnP с RANSAC, см. код openCV solvePnPRansac (). Этот метод может допускать высокий процент несоответствий, поэтому вам не нужно быть точным во всех совпадениях, а просто иметь определенный процент правильных (даже 30%). Конечно, минимальное количество правильных соответствий - 4.
Говоря об инвариантных объектах - если количество вращения между соседними кадрами невелико, вам не нужно использовать инвариантные объекты. Даже небольшого пятна с интенсивностью серого было бы достаточно, чтобы найти совпадение. Единственная проблема заключается в том, что вам нужно обновить свой дескриптор или даже выбрать другую характерную точку на вашей модели в зависимости от поворота модели. Последнее может быть трудно сделать, так как вы должны знать 3D-координаты каждого объекта.