OpenCV - проекция, матрица гомографии и вид с высоты птичьего полета

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

Спасибо.


person DualSim    schedule 19.02.2014    source источник
comment
можешь сформулировать немного больше?   -  person nkint    schedule 19.02.2014
comment
Итак, я работаю с автономным автомобилем, и я хотел бы получить гомографическую матрицу с высоты птичьего полета, и есть много способов сделать это, но у меня есть проекционная матрица камеры, и я хотел бы получить с ней гомографическую матрицу. , но я не знаю, как это сделать.   -  person DualSim    schedule 21.02.2014


Ответы (1)


Матрица проекции определяется как произведение внутренней (например, фокусное расстояние, основные точки и т. Д.) И внешней (вращение и перенос) матриц камеры. Вопрос в том, каковы ваши ротация и перевод? Например, я могу представить другую камеру или объект в 3D, относительно которого у вас есть эти вращения и перемещения. В противном случае ваша проекция - это просто внутренняя матрица.

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

Давайте рассмотрим уравнение камеры-обскуры. В основном он говорит, что [u, v, 1] T ~ A * [R | t] [x, y, z, 1] T, где A - камера внутренняя матрица. Теперь, когда вы имеете дело с земной плоскостью, вы можете выровнять с ней новую систему координат, установив z = 0; R | t - матрицы поворота и перевода из этой системы координат в систему, выровненную по камере;

Затем обратите внимание, что ваша R | t является матрицей 3x4 и теряет одно измерение, поскольку z = 0; он становится 3x3 или гомографией, которая теперь равна H = A * R ’| t; Хорошо, все, что мы сделали, это доказали, что между землей и вашим датчиком существует гомографическая карта;

Теперь вам нужен другой вид гомографии, который происходит во время простого вращения камеры и увеличения между точками на датчике до и после поворота / увеличения; то есть вы хотите повернуть камеру вниз и, возможно, уменьшить масштаб. Опять же, подумайте в терминах уравнения камеры-обскуры: изначально у вас было H1 = A (здесь я исключил R | T как неуместное на данный момент), а затем вы повернули камеру и получили H2 = AR; другими словами, H1 - это то, как вы делаете свое изображение сейчас, а H2 - то, как вы хотите, чтобы ваше изображение выглядело.
Отношения между двумя - это то, что вы хотите найти, H12, и это также гомография, поскольку гомография является семейство преобразований (используйте эту простую эвристику: то, что происходит в семье, остается в семье). Поскольку одна и та же поверхность может генерировать изображения либо с помощью H1, либо с H2, мы можем собрать H12, отменив H1 (обратно к плоскости земли) и применив H2 (от земли к виду с высоты птичьего полета датчика); в некотором смысле это напоминает операции с векторами, вам просто нужно соблюдать порядок применения матриц справа налево:
H12 = H2 * H1 -1 < / sup> = A * R * A -1 = P * A -1, где мы заменили выражения для H1, H2 и, наконец, для проекции матрица (если она у вас есть)

Это ваш ответ, и если угол поворота R неизвестен, его можно определить по ориентации камеры относительно ориентации. земли или рассчитывается с использованием resolvePnP () из библиотеки opeCV. Наконец, когда я делаю это на сотовом телефоне, я просто использую его показания акселерометра как хорошее приближение, поскольку, когда сотовый телефон не ускоряется, показания представляют собой вектор силы тяжести, который дает вращение относительно. ровная горизонтальная площадка.

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

person Vlad    schedule 10.03.2014
comment
как разобраться с переводческой частью? Изображение после деформации с H12 выходит за пределы области просмотра, мне нужно его перевести. - person Abhijit Balaji; 02.02.2018