Дескрипторы, которые используются для сопоставления в большинстве систем SLAM или SFM, не зависят от поворота и масштаба (и в некоторой степени устойчивы к изменениям интенсивности).Именно поэтому мы можем сопоставить их с разных точек зрения в первую очередь.Так что, в общем, не имеет смысла пытаться использовать их все, усреднить их или использовать те из определенного изображения.Если сопоставление в вашем SFM было выполнено правильно, дескрипторы репроекции точки 3d
из вашего облака точек в любом из ее наблюдений должны быть очень близки, поэтому вы можете использовать любой из них 1 .
Кроме того, мне кажется, что вы пытаетесь напрямую сопоставить 2d
баллов с 3d
баллами.С вычислительной точки зрения, я думаю, что это не очень хорошая идея, потому что, сопоставляя 2d
точек с 3d
, вы теряете пространственную информацию изображений и вынуждены искать совпадения методом грубой силы.Это в свою очередь может внести шум.Но, если вы сделаете свое сопоставление от изображения к изображению, а затем распространите результаты на 3-и точки, вы сможете навязать приоры (если вы примерно знаете, где вы находитесь, то есть из IMU, или есливы знаете, что ваши изображения близки), вы можете определить район, в котором вы ищете совпадения на ваших изображениях и т. д. Кроме того, после того, как вы вычислили свою позу и уточнили ее, вам нужно будет добавить больше очков, не так ли?Как вы это сделаете, если вы не выполнили сопоставление 2d/2d
, а просто сопоставление 2d/3d
?
Теперь способ реализации, который обычно зависит от вашего приложения (насколько у вас есть видимость или базовый уровень).между позами у вас SFM и тд).В качестве примера давайте отметим ваше изображение кандидата I_0
, а также отметим изображения из вашего SFM I_1, ..., I_n
.Сначала сопоставьте между I_0
и I_1
.Теперь предположим, что q_0
- это двухмерная точка из I_0
, которая была успешно сопоставлена с q_1
из I_1
, что соответствует некоторой трехмерной точке 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
дескрипторов без какой-либо проверки целостности (как я предлагал ранее), вы введете многошум ...
tl; dr Я бы сохранил некоторые изображения.
1 Поскольку вы говорите, что получаете 3d-реконструкциюпо линии SFM, некоторые из них, вероятно, считаются внутренними, а некоторые - выбросами (указывается логическим флагом).Если они являются выбросами, просто игнорируйте их, если они являются выбросами, то они являются результатом сопоставления и триангуляции, и их положение было уточнено несколько раз, поэтому вы можете доверять любому из их дескрипторов.