Как рассчитать матрицы поворота и перевода из гомографии? - PullRequest
3 голосов
/ 14 февраля 2012

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

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

Я прочитал что-то, называемое «Разложение гомографией».Это так?

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

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

Ответы [ 3 ]

7 голосов
/ 16 февраля 2012

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

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

6 голосов
/ 20 февраля 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 -1 V T , Tx = ULWU T , где

      0  -tx  ty
Tx =  tz  0   -tx
     -ty  tx   0 
  • Так как E может иметь произвольный знак, а W может быть заменен на Winv, у нас есть 4 различных решения, и мы должны выбрать тот, который приносит наибольшее количество очков.перед камерой.
3 голосов
/ 16 апреля 2014

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...