Усреднение функций SIFT для оценки позы
Я создал облако точек нерегулярного (неплоского) сложного объекта, используя SfM. Каждая из этих трехмерных точек была просмотрена на нескольких изображениях, поэтому с ней связано несколько (SIFT) объектов.
Теперь я хочу найти для позы этого объекта в новом, другом наборе изображений, используя алгоритм PnP, сопоставляющий функции, обнаруженные в новых изображениях, с функциями, связанными с трехмерными точками в облаке точек.
Итак, мой вопрос: какой дескриптор я связываю с 3D-точкой, чтобы получить наилучшие результаты?
До сих пор я придумал несколько возможных решений...
- Усредните все дескрипторы, связанные с трехмерной точкой (взятые из конвейера SfM), и используйте этот "средний дескриптор" для сопоставления в PnP. Этот подход мне кажется немного надуманным - я не знаю достаточно о дескрипторах функций (в частности, SIFT), чтобы прокомментировать достоинства и недостатки этого подхода.
- "Зафиксируйте" все дескрипторы, вычисленные во время конвейера SfM, к их связанной трехмерной точке. Во время PnP у вас будут по существу одинаковые точки для сопоставления (один дубликат для каждого дескриптора). Это явно интенсивно.
- Найдите "центральную" точку зрения, в которой эта функция появляется (из конвейера SfM), и используйте дескриптор из этого представления для сопоставления PnP. Так что, если функция появляется на изображениях, сделанных в
-30
,10
, а также40
градусов (от нормальной поверхности), используйте дескриптор из10
дипломное изображение. Это мне кажется наиболее перспективным решением.
Есть ли стандартный способ сделать это? Я не смог найти ни одного исследования или совета в Интернете по этому вопросу, поэтому мне просто любопытно, есть ли лучшее решение или оно зависит от объекта / ситуации.
1 ответ
Дескрипторы, которые используются для сопоставления в большинстве систем 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
является 2-й точкой от 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)
ваш агрегированный дескриптор (который может быть средним или конкатенацией дескрипторов SIFTs_i
в их соответствующемI_i
, так далее). Тогда при сопоставленииs_0
сF
, вы хотите использовать только подмножествоs_i
которые принадлежат изображениям, которые имеют близкие точки зрения кI_0
(из-за30deg
проблема, которую вы упоминаете, хотя я думаю, что это должно быть50deg
). Это означает, что вы должны приписать вес каждомуs_i
это зависит от позы вашего запросаI_0
, Вы, очевидно, не можете сделать это при построенииF
так что вы должны сделать это при сопоставлении. Однако, у вас нет сильного априора в позе (в противном случае, я полагаю, вам не понадобится PnP). В результате вы не можете действительно определить этот вес. Поэтому я думаю, что здесь есть два вывода / варианта:Дескрипторы SIFT не адаптированы к задаче. Вы можете попытаться придумать инвариантный дескриптор. Есть немного литературы по этому вопросу.
Постарайтесь сохранить некоторую визуальную информацию в форме "ключевых кадров", как во многих системах SLAM. В любом случае не имеет смысла хранить все ваши изображения, просто держите несколько, которые хорошо распределены (по позе) в каждой области, и используйте их для распространения 2-мерных совпадений в 3-м случае.
Если вы соответствуете только между
2d
точка вашего запроса и3d
дескрипторы без какой-либо проверки целостности (как я предлагал ранее), вы внесете много шума...
Я хотел бы сохранить некоторые изображения.
1 Поскольку вы говорите, что получаете 3d-реконструкцию из трубопровода SFM, некоторые из них, вероятно, считаются внутренними, а некоторые - внешними (обозначенными булевым флагом). Если они являются выбросами, просто игнорируйте их, если они являются выбросами, то они являются результатом сопоставления и триангуляции, и их положение было уточнено несколько раз, так что вы можете доверять любому из их дескрипторов.