матрица вращения и перевода из гомографии opencv - PullRequest
0 голосов
/ 17 сентября 2018

Я работаю над приложением для Android в Java, я рассчитал гомографию с помощью opencv с помощью findHomography (), как я могу найти матрицу позы камеры, содержащую поворот и перевод через гомографию

 Mat homography = Calib3d.findHomography(ReferencePoints2, ReferencePoints1,0,Calib3d.RANSAC);

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

OpenCV имеет функцию , которая может разложить гомографию на матрицы перемещения и вращения. Но мы должны выбрать правильную пару матриц перевода и вращения из массива возможных матриц, возвращаемых этой функцией.

нормальный вектор - нормаль поверхности в первом кадре камеры. Если вы знаете поворот камеры в мире для начального кадра, его можно использовать для отфильтровывания правильного перевода и пары поворотов из списка возможностей.

0 голосов
/ 18 сентября 2018

Для этого вам нужно знать внутренние параметры камеры.

Рассматривает плоскость z = 0. Точка

 X=(x,y,0,1)'

проецируется на изображение как

p=P*X.

Теперь используйте разложение

P=K[R t],

где K - калибровочная матрица, а [R t] - внешние параметры. Поскольку z = 0, вектор третьего столбца R умножается на ноль. Теперь мы можем опустить 3-й столбец, чтобы получить

p=K*[r1 r2 t]*(x,y,1)=H*(x,y,1),

где H - плоская гомография.

Вы уже вычислили H, например, известные точки. Первый и второй столбец R и вектор t теперь можно восстановить

[r1 r2 t]=inv(K)*H.

Убедитесь, что r1 и r2 - единичная длина, тогда t - правильный вектор перевода. Вектор третьего столбца R может быть восстановлен, поскольку R ортогонально, например, с использованием перекрестного произведения.

r3=cross(r1,r2).

Поскольку H является измерением, вычисленные вами значения r1 и r2 не являются точными. Вы можете использовать SVD для получения матрицы вращения, ближайшей к измерению. Затем вы можете составить проекционную матрицу

P=K[r1 r2 r3 t]

, который проецирует любую 3D-точку в системе координат на основе вашей 2D-системы координат гомографии.

Вот некоторый материал курса, который описывает эту ситуацию.

https://www.dropbox.com/s/qkulg4j64lyn0qa/2018_proj_geo_for_cv_projcv_assignment.pdf?dl=0

Вот связанный вопрос. Вычисление положения камеры с матрицей гомографии на основе 4 копланарных точек

Как отметил @nbsrujan (спасибо), для тех, кто использует OpenCV, есть функция , которая может разложить гомографию на матрицы перевода и вращения с учетом встроенных функций.

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