Дескрипторы, которые используются для сопоставления в большинстве систем SLAM или SFM, инвариантны к вращению и масштабу (и в некоторой степени устойчивы к изменениям интенсивности). Именно поэтому мы можем сопоставить их с разных точек зрения. Таким образом, в целом не имеет особого смысла пытаться использовать их все, усреднять их или использовать те, которые взяты из определенного изображения. Если сопоставление в вашей SFM было сделано правильно, дескрипторы перепроекции 3d
точки из вашего облака точек в любом из ее наблюдений должны быть очень близки, поэтому вы можете использовать любой из них 1.
Кроме того, мне кажется, что вы пытаетесь напрямую сопоставить точки 2d
с точками 3d
. С вычислительной точки зрения, я думаю, это не очень хорошая идея, потому что, сопоставляя 2d
точек с 3d
, вы теряете пространственную информацию изображений и должны искать совпадения методом грубой силы. Это, в свою очередь, может вызвать шум. Но если вы выполняете сопоставление от изображения к изображению, а затем распространяете результаты на 3D-точки, вы сможете применять априорные значения (если вы приблизительно знаете, где находитесь, то есть от IMU или если вы знаете, что ваши изображения близки), вы можете определить район, в котором вы ищете совпадения на ваших изображениях, и т. д. Кроме того, после того, как вы вычислили свою позу и уточнили ее, вам нужно будет добавить больше точек, не так ли? Как вы это сделаете, если вы не выполнили никакого 2d/2d
сопоставления, а только 2d/3d
сопоставления?
Теперь способ реализации этого обычно зависит от вашего приложения (насколько у вас есть ковидимость или базовая линия между позами из вашего SFM и т. д.). В качестве примера, давайте отметим ваше изображение-кандидат I_0
и давайте отметим изображения из вашего SFM I_1, ..., I_n
. Во-первых, сопоставьте между I_0
и I_1
. Теперь предположим, что q_0
— это точка 2d из I_0
, которая успешно сопоставлена с q_1
из I_1
, что соответствует некоторой точке 3d Q
. Теперь, чтобы обеспечить согласованность, рассмотрим перепроецирование Q
в I_2
и назовем его q_2
. Сопоставьте I_0
и I_2
. Точка, которой соответствует q_0
в I_2
близка к q_2
? Если да, сохраните совпадение 2d/3d
между q_0
и Q
и так далее.
У меня недостаточно информации о ваших данных и вашем приложении, но я думаю, что в зависимости от ваших ограничений (в реальном времени или нет и т. д.) вы могли бы придумать некоторые варианты вышеизложенного. В любом случае ключевая идея заключается в том, как я уже говорил ранее, попытаться сопоставить от кадра к кадру, а затем распространить на трехмерный случай.
Редактировать: Спасибо за разъяснения в комментариях. Вот несколько мыслей (поправьте меня):
Давайте рассмотрим дескриптор SIFT s_0
из I_0
и отметим F(s_1,...,s_n)
ваш агрегированный дескриптор (это может быть среднее значение или объединение дескрипторов SIFT s_i
в соответствующих им I_i
и т. д.). Затем при сопоставлении s_0
с F
вы захотите использовать только подмножество s_i
, принадлежащее изображениям, точка зрения которых близка к I_0
(из-за упомянутой вами проблемы 30deg
, хотя я думаю, что это должно быть 50deg
). Это означает, что вы должны присвоить вес каждому s_i
, который зависит от позы вашего запроса I_0
. Вы, очевидно, не можете сделать это при построении F
, поэтому вы должны сделать это при сопоставлении. Тем не менее, у вас нет сильного априора позы (иначе, я полагаю, вам не понадобился бы PnP). В результате вы не можете точно определить этот вес. Поэтому я думаю, что здесь есть два вывода/варианта:
Дескрипторы SIFT не приспособлены к задаче. Вы можете попробовать придумать перспективно-инвариантный дескриптор. Есть литература на эту тему.
Старайтесь сохранять некоторую визуальную информацию в виде «Ключевых кадров», как во многих системах SLAM. В любом случае не имеет смысла сохранять все ваши изображения, просто сохраните несколько, которые хорошо распределены (по позе) в каждой области, и используйте их для распространения 2D-соответствий на 3D-кейс.
Если вы сопоставляете только точку 2d
вашего запроса и дескрипторы 3d
без какой-либо формы проверки согласованности (как я предложил ранее), вы внесете много шума...
tl;dr Я бы сохранил несколько изображений.
1 Поскольку вы говорите, что получаете свою 3D-реконструкцию из конвейера SFM, некоторые из них, вероятно, считаются выбросами, а некоторые — выбросами (обозначены логическим флагом). Если они являются выбросами, просто игнорируйте их, если они являются выбросами, то они являются результатом сопоставления и триангуляции, и их положение уточнялось несколько раз, поэтому вы можете доверять любому из их дескрипторов.
person
Ash
schedule
27.05.2018