Я вычислил основные матрицы между Frame [a,b], [b,c] and [c,d]. Теперь у меня есть E_ab, E_bc и E_cd. Можно ли вычислить E_ad напрямую без сопоставления? Я думаю о том, что такое 3D-преобразование, где:

T04 = T01 * T12 * T23 * T34

Решение, которое я нашел, состоит в том, чтобы разложить каждый из них на R | T и построить T_4 * 4 из R | T, а затем использовать предыдущую нотацию составления T-матриц, а затем преобразовать окончательный R | T в E. Однако мне было интересно если есть прямой способ без разложения по двум причинам:

  • Декомпозиция и повторная композиция (по крайней мере, в OpenCV) немного меняют основную матрицу
  • Ради производительности

Итак, как я могу напрямую объединить две (или более) существенные матрицы?

1
Humam Helfawi 18 Июн 2020 в 09:01

1 ответ

Лучший ответ

Прежде чем ответить на исходный вопрос, я думаю, что было бы важно обсудить этот момент из вашего комментария:

Конечная цель - связать корректировку основных матриц напрямую, а не на RT. Я использую одиночную откалиброванную камеру

Возможно, мне не хватает важных деталей о вашем проекте, но, похоже, с этим методом есть несколько проблем:

  1. Минимальное представление. Обычно лучше (как по соображениям производительности, так и по соображениям точности) использовать минимальную параметризацию при оценке. Матрица Essential имеет шесть степеней свободы (что видно из ее разложения как [T]_xR). Если вы оцениваете свой Essential напрямую, вы оптимизируете восемь параметров вместо шести.

  2. Проблема с меньшими ограничениями. Матрица Essential накладывает ограничения на компланарность и не наказывает некоторые неправильные конфигурации, которые могут быть наказаны ошибками перепроецирования, которые используются при обычной настройке связки. Если вы рассмотрите две камеры C_1 и C_2 так, что точка X_2, выраженная в C_2, может быть выражена в C_1 через RX_2+T, и что мы обозначаем соответствующую точку в C_1 как X_1, тогда ограничение X_1.transpose()*E*X_2=0 требует, чтобы три вектора T, X_1 и RX_2+T оставались копланарными. Таким образом, точка X_2 может свободно перемещаться, пока она репроецируется на линию сальника, даже если ее луч расходится от X_1:

    введите описание изображения здесь

    Как вы можете видеть на рисунке, красная и зеленая точки будут соответствовать ограничению основной матрицы, однако они будут иметь разные ошибки перепроецирования.

  3. Временная сложность . Computing Essentials действительно медленнее по сравнению с альтернативами, как и восстановление вращения и переводов из Essentials по сравнению с обратной задачей.


Теперь, чтобы вернуться к исходной проблеме из вопроса, если вы рассмотрите три камеры C_1, C_2, C_3 и соответственно обозначите их позы как Identity, R_1, R_2, и обратите внимание на основные моменты между C_1 и {{X3} } как E_1 и один между C_2 и C_3 как E_2, то вы легко можете увидеть, что Essential от C_3 до C_1, что я отмечу E_3, будет предоставлено

E_3=[R_1T_2+T_1]_x R_1R_2 

Что с небольшой реорганизацией приводит к

E_3=R_1E_2 + E_1R_2

Это отношение, которое устанавливает связь между тремя существенными матрицами, по-видимому, указывает на то, что вам все равно нужно будет извлекать R_1 и R_2 из E_1 и E_2.

Изменить: я вывел указанное выше соотношение следующим образом: предположим, что y - вектор 3x1, тогда

E_3y = [R_1T_2+T_1]_x R_1R_2y
     = (R_1T_2+T_1) x (R_1R_2y)
     = R_1T_2 x R_1R_2y + T_1 x R_1R_2y #for the next line, note that crossproduct is invariant under rotation
     = R_1(T_2 x R_2 y) + T_1 x R_1R_2 y
     = R_1[T_2]_x R_2 y + [T_1]x_x R_1 R_2 y
     = R_1 E_2 y + E_1 R_2 y
     = (R_1E_2 + E_1R_2) y

Поскольку это верно для любого произвольного y, это означает, что E_3=R_1E_2+E_1R_2.

1
Ash 19 Июн 2020 в 14:49