2016-01-27 6 views
1

Мне нужно найти матрицу гомографии, которая преобразует координаты 2d изображения в координаты реального мира (2D). У меня есть изображение стены и три непересекающихся треугольника на стене. The length of each side of the triangle is 1 meter (на стене), также я знаю все угловые положения треугольников на изображении. Как я могу вычислить матрицу homography, используя эту информацию треугольника?Как найти гомографию

Example Image

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

+0

Я думаю, вы имеете в виду (2D) координаты на стене, не так ли? И вы хотите сопоставить пиксельные координаты вашего изображения с этими двумерными «стенными» координатами. Я прав? 3D невозможно, если я правильно вас понимаю. – gfkri

+0

Да, на 2d координатах стены ... –

ответ

1

координата изображения не может быть преобразована в реальный мир координат с простой матрицей гомографии alone.When вы преобразовать изображение точки в реальный мир координат вы получите

Здесь есть координаты изображения, являются 3D-очками в реальный мир рама. Только из координат изображения мы не знаем масштабного коэффициента . Поэтому, когда мы умножаем обратной матрицы гомография:

X 'Y', Z» не равны X, Y, Z.


Одним из подходов к решению для X 'Y', Z» является вместо того чтобы найти гомографию, вы можете использовать функцию solvepnp() OpenCV в. У вас есть 3D-координаты углов треугольников, известных в трехмерном пространстве, и соответствующие пиксельные координаты. С внутренними параметрами камеры (K) вы можете найти Вращение и перевод камеры из реального мира. Имея известную камеру intrisics можно вычислить X 'Y', Z»,, как


Другой подход, вы по крайней мере 3 3D точки и соответствующие координаты изображения. Вы можете решить для H с помощью решения линейных уравнений

0

Итак, я предполагаю, что вы хотите сопоставить координаты 2D-пикселя с 2D-координатами на стене. Все, что вам нужно, это точечные соответствия (не менее четырех). Итак, скажем, вы знаете некоторые координаты точки на стене, и знаете, на какой пиксельной координате эти точки появляются на вашем изображении.

Все, что вам нужно сделать, это передать эти точки в готовое решение, например. findHomography от OpenCV или here вы найдете что-то для Matlab.

Оба возвращают гомографию (матрица 3x3). Вы можете использовать его для преобразования дальнейших координат. OpenCV делает это для вас с perspectivetransform (на самом деле это простое матричное умножение с Homogeneous coordinates, так что это также не имеет большого значения в Matlab).

+0

У меня есть треугольники на стене. Если предположить нижний левый угол треугольника как (0,0) на стене, тогда я могу найти еще две координаты треугольника, основанные на текущее происхождение. Используя это, я могу найти только 3 координатных положения на стене. Как я могу использовать информацию из других 2 треугольников. ? –

+0

@gfkri но findHomography в OpenCv не ожидает, что мировые координаты не будут – nbsrujan

+0

Он ожидает вектор с двумерными координатами, почему должна быть разница в передаче координат пикселя и прохода, например. сантиметр? @ user61455 О, вы не знаете положение треугольников относительно друг друга ?! Хм, позвольте мне немного подумать. Я не уверен, возможно ли это. – gfkri

0

A similar question был задан заранее.

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

В вашем случае у вас есть N=3 соответствие пунктов на треугольник. Я решил решить эту проблему, которая будет работать, если у вас есть как минимум 3 треугольников.

Кроме того, вам необходимо использовать Equilateral triangles, но вы заявили, что уже сделали.

Для получения более подробной информации см. my answer.

 Смежные вопросы

  • Нет связанных вопросов^_^