Вычисление матрицы, которая преобразует четырехугольник в другой четырехугольник в 2D

На рисунке ниже цель состоит в том, чтобы вычислить матрицу гомографии H, которая преобразует точки a1 a2 a3 a4 в их аналоги b1 b2 b3 b4. То есть:

[b1 b2 b3 b4] = H * [a1 a2 a3 a4]

Какой способ вы бы предложили для расчета H (3x3 ). a1...b4 — это точки в 2D, которые представлены в однородных системах координат (, то есть [a1 _x a1 _y 1]',... ). РЕДАКТИРОВАТЬ: Для этих типов задач мы используем SVD, поэтому я хотел бы посмотреть, как это можно просто сделать в Matlab.

РЕДАКТИРОВАТЬ:

Вот как я изначально пытался решить ее с помощью svd (H=Q/P )в Maltlab. Рассмотрим следующий код для данного примера

px=[0 1 1 0];  % a square
py=[1 1 0 0];

qx=[18 18 80 80];    % a random quadrangle
qy=[-20 20 60 -60];
if (DEBUG)
  fill(px,py,'r');
  fill(qx,qy,'r');
end

Q=[qx;qy;ones(size(qx))];
P=[px;py;ones(size(px))];
H=Q/P;
H*P-Q
answer:
   -0.0000         0         0         0         0
  -20.0000   20.0000  -20.0000   20.0000    0.0000
   -0.0000         0         0         0   -0.0000

Я ожидаю, что ответ будет нулевой матрицей , но это не так!... и именно поэтому я задал этот вопрос в StackOverflow. Теперь мы все знаем, что это проективное преобразование , не являющееся явно евклидовым. Однако полезно знать, возможно ли вообще вычисление такой матрицы с использованием только 4 точек.

matrix computation

5
задан Cœur 26 August 2018 в 18:07
поделиться