Как рассчитать матрицы вращения и перевода из гомографии?

Я уже сравнивал 2 изображения одной и той же сцены, снятые одной камерой с разными углами обзора (скажем, слева и справа), используя SURF в emgucv (C#). И это дало мне матрицу гомографии 3x3 для 2D-преобразования. Но теперь я хочу сделать эти 2 изображения в 3D-среде (используя DirectX). Для этого мне нужно вычислить относительное расположение и ориентацию второго изображения (справа) по отношению к первому изображению (слева) в 3D-форме. Как рассчитать матрицы Rotation and Translate для второго изображения?

Мне также нужно значение z для второго изображения.

Я читал что-то под названием «Гомографическое разложение». Это путь?

Есть ли кто-нибудь, кто знаком с декомпозицией гомографии и есть ли какой-либо алгоритм, который ее реализует?

Заранее благодарю за любую помощь.


person mili    schedule 14.02.2012    source источник
comment
Являются ли изображения плоской поверхностью? Гомографии работают только для плоских поверхностей.   -  person jlewis42    schedule 16.02.2012


Ответы (3)


Гомография работает только для плоских сцен (т.е. все ваши точки компланарны). Если это так, то омография является проективным преобразованием и может быть разложена на составляющие.

Но если ваша сцена не компланарна (что, как я думаю, имеет место в вашем описании), тогда потребуется немного больше работы. Вместо гомографии вам нужно рассчитать фундаментальную матрицу (которая emgucv подойдет вам). Фундаментальная матрица представляет собой комбинацию внутренней матрицы камеры (K), относительного поворота (R) и перемещения (t) между двумя видами. Восстановление поворота и перевода довольно просто, если вы знаете K. Похоже, что у emgucv есть методы для калибровка камеры. Я не знаком с их конкретным методом, но обычно они включают в себя несколько изображений сцены с известной геометрией.

person jlewis42    schedule 16.02.2012
comment
Спасибо jlewis42 за внимание к этому вопросу. - person mili; 17.02.2012
comment
Но я вычисляю фундаментальную матрицу, как вы сказали (используя случайные генерируемые точки и проецируя их с помощью гомографии), а также вычисляю внутреннюю матрицу камеры, используя метод шахматной доски EmguCV. Но я не могу найти способ получить R и T непосредственно из фундаментальной матрицы. После этого я рассчитываю основную матрицу, как описано в здесь, и получаю R и T как описано в здесь, так что это не дало мне приемлемого ответа. Где может быть ошибка? - person mili; 17.02.2012
comment
К сожалению, я не могу ответить на этот вопрос, не зная, почему результат неверен. Вот несколько вещей, на которые следует обратить внимание: Вы уверены, что все ваши точки соответствия действительны? Проверьте правильность фундаментальной матрицы с помощью эпиполярной геометрии (en.wikipedia.org/wiki/Epipolar_geometry). ). По сути, если вы умножите точку на левом изображении на фундаментальную матрицу, это даст вам уравнение линии на правом изображении (в форме ax + by + c = 0). Соответствующая точка на правом изображении будет лежать на этой линии. Также попробуйте перекомбинировать K, R и t, чтобы увидеть, получите ли вы ту же F. - person jlewis42; 17.02.2012
comment
Спасибо jlewis42, я посмотрю на эти вещи и попытаюсь исправить ошибки. еще раз спасибо. - person mili; 29.02.2012
comment
@ jlewis42: Можете ли вы предоставить некоторые подробности о том, как разложить проективное преобразование (когда все точки компланарны). - person Utkarsh Sinha; 24.07.2012
comment
Гомография также работает для изображений произвольных 3D-сцен для простого вращения камеры или масштабирования. Конечно, чистое вращение камеры никогда не даст НИКАКОЙ 3D-информации, поэтому не будет возможности оценить Z. Кроме того, основная матрица обеспечивает вектор переноса только с точностью до коэффициента масштабирования. В целом проблему следует сформулировать более четко. Если вы хотите разложить фундаментальную матрицу или омографы, какова ваша сцена и что вы хотите измерить. Я дам вам разложение F в ответе ниже, если вам это нужно. - person Vlad; 20.02.2014

Чтобы выяснить движение камеры (точное вращение и перевод до коэффициента масштабирования), вам нужно

  • Вычислите фундаментальную матрицу F, например, используя восьмиточечный алгоритм
  • Вычислите основную матрицу E = A’FA, где A — внутренняя матрица камеры.
  • Разложите E, который по определению Tx * R через SVD, в E = ULV’
  • Создайте специальную матрицу 3x3

        0 -1  0   
    W = 1  0  0      
        0  0  1  
    

который помогает запустить декомпозицию:

R = UW-1VT, Tx = ULWUT, где

      0  -tx  ty
Tx =  tz  0   -tx
     -ty  tx   0 
  • Поскольку E может иметь произвольный знак, а W можно заменить на Winv, у нас есть 4 различных решения, и мы должны выбрать то, которое дает наибольшее количество точек перед камерой.
person Vlad    schedule 20.02.2014
comment
Я считаю, что матрица Tx является перекрестным произведением как умножение матриц, и, следовательно, должна иметь -tz, а не -tx в 1-й строке 2-го столбца. - person fxtentacle; 16.07.2018

Прошло некоторое время с тех пор, как вы задали этот вопрос. К настоящему времени есть несколько хороших ссылок по этой проблеме.

Одним из них является "приглашение к 3D-изображению" Ма, глава 5 которого доступна бесплатно здесь http://vision.ucla.edu//MASKS/chapters.html

Кроме того, Vision Toolbox от Peter Corke включает в себя инструменты для выполнения этой задачи. Однако он не объясняет большую часть математики разложения

person TSL_    schedule 16.04.2014
comment
Спасибо за ссылки - person mili; 18.04.2014