Могу ли я использовать гомографию для проецирования точек изображения с камеры на землю (2D-плоскость)?

Моя проблема довольно проста, но я изо всех сил пытаюсь решить ее правильно.

У меня камера смотрит в землю и я знаю все параметры кадра. Итак, используя некоторые математические вычисления, я смог вычислить 4 точки, определяющие поле зрения камеры (координаты на земле углов каждого изображения).

Теперь по координатам (x, y) пикселя изображения хотелось бы узнать его реальные координаты в проекции на землю.

Я думал, что гомография - это то, что нужно, но я прочитал здесь и там, что "гомография сопоставляет плоскость, видимую с камеры, с той же вид с другой плоскости», что представляет собой немного другую задачу.

Что мне использовать, пожалуйста?


Изменить: вот пример.

Учитывая это изображение: Земля

Я знаю все о камере, которая делала снимок (высота, углы обзора, ориентация), поэтому мог вычислить координаты четырех углов, образующих ее поле зрения на земле, например (в сантиметрах, относительно положения камеры , по часовой стрелке от верхнего левого угла): (-300, 500), (300, 500), (100, 50), (-100, 50).

Зная, что координаты на изображении травинки (1750, 480), как я могу узнать ее реальные координаты на земле?


person Delgan    schedule 08.03.2017    source источник
comment
Можно ли посмотреть образец изображения? Кажется, что гомография все еще может быть полезна, потому что плоскость всегда одна и та же, земля.   -  person UJIN    schedule 08.03.2017
comment
@UJIN Я обновил свой вопрос примером.   -  person Delgan    schedule 08.03.2017
comment
Должна быть возможность найти координаты травы на плоскости проекции, но сейчас я не могу понять это. Я попробую, как только у меня будет свободное время. То есть у вас 4 точки в одной системе координат и 4 точки в другой. Должна быть возможность использовать 8-точечный алгоритм, найти гомографию, а затем спроецировать точки с фотографии на реальную землю. Но тут я могу ошибаться :/   -  person UJIN    schedule 08.03.2017
comment
@UJIN Спасибо за ваше время! Думаю, тогда я пойду с простой гомографией.   -  person Delgan    schedule 08.03.2017


Ответы (1)


Под «знанием всего» о камере вы имеете в виду, что у вас есть FOV камеры, вращение и перемещение относительно плоскости земли? Тогда это тривиально, верно?

Запишите матрицу камеры K = [[f, 0, w/2], [0, f, h/2], [0, 0, 1]]. Пусть R и t будут соответственно матрицей вращения 3x3 и перемещением 3x1 от камеры к земле. Точка на луче, проходящем через данный пиксель p=[u, v, 1], имеет координаты камеры r = inv(K) * p. Выразите это в мировых координатах как R * r + t, пересеките с плоскостью земли, и все готово.

person Francesco Callari    schedule 08.03.2017
comment
@Francesco Callari Не могли бы вы уточнить, почему вы вычитаете inv(Q)[0 0 0 1]? - person Luca; 14.11.2018
comment
@Delgan Я не уверен, что вы поняли, почему мы вычитаем с inv(Q)[0,0,0,1]? Я понимаю, что луч пройдет через inv(Q)[r, 1] и inv(Q)[0,0,0,1], но я не уверен, почему эти величины вычитаются. Был бы очень признателен за некоторые разъяснения по этому поводу, поскольку я действительно борюсь с аналогичной проблемой. - person Luca; 14.11.2018
comment
@Delgan И как вы оцениваете уравнение плоскости земли? - person Luca; 14.11.2018
comment
Привет, @Лука! Извините, я хотел бы вам помочь, но на самом деле я никогда не трачу время на то, чтобы должным образом реализовать решение @Francesco... :/ В моем случае уравнение заземления было просто z = 0. - person Delgan; 14.11.2018