Преобразование перспективы в Matlab

Скажем:

point1 = [1 2 3 4 5 ; 1 2 3 4 5 ];
point2 = [2 3 4 5 6 ; 2 3 4 5 6 ];

s = findHomography(points1,points2);

Coordinates of an object containing points1 are [0,0; 10,0; 0,10; 10,10]

Как мне найти вычислить перспективное преобразование объекта, чтобы он трансформировался в мои тестовые координаты. В opencv есть встроенная функция, которая может это сделать, однако мне действительно нужен простой пример, чтобы прояснить мою путаницу. Спасибо.


person motiur    schedule 28.11.2013    source источник
comment
На YouTube есть хорошее видео youtube.com/watch?v=fVJeJMWZcq8, в котором это объясняется. ; однако видео есть видео в конце концов.   -  person motiur    schedule 29.11.2013


Ответы (2)


Перспективное преобразование не является линейным преобразованием. Таким образом, у вас не может быть матрицы M 2x2 такой, что w=M*v (точка v=(x1,y1) из первой плоскости и точка w=(x2,y2) из ​​второй плоскости). Но вы можете добиться цели, если используете «однородные координаты». 2d точка в однородных координатах имеет вид (x,y,1). Или в более общем случае (x,y,z) эквивалентно (x/z,y/z,1). Это обозначение имеет смысл, если вы думаете о том, как точки из 3D-сцены проецируются на 2D-сенсор камеры. В однородных координатах матрица M 3x3 реально существует и w=M*v. Поэтому, когда вы работаете с преобразованием перспективы из 2d в 2d, вы должны ожидать, что у вас будут матрицы 3x3 и точки 3xn.

Изменить (ответ на комментарий):

xTag = M11*x1 + M12*y2 + M13

yTag = M21*x1 + M22*y2 + M23

zTag = M31*x1 + M32*y2 + M33 (M33 всегда будет равно 1, так как степеней свободы всего 8)

x2 = хтег/zтег

y2 = yTag/zTag

person Michael Burdinov    schedule 28.11.2013
comment
Я получил 3x3 из функции findHomography(). Я могу понять то, что вы сказали о датчиках. Теперь, чтобы вернуться к t2, что мне делать? Я думаю, что моя функция findHomography() обрабатывает заполнение. - person motiur; 28.11.2013
comment
Еще один комментарий, чтобы развеять мое невежество. Я выполняю сопоставление признаков между двумя изображениями, поэтому, когда я получу идеальное совпадение между изображением i1 и изображением i2, будет ли разница между x, x2 и y, y2 равна нулю. - person motiur; 28.11.2013
comment
В каком-то теоретическом идеальном случае - да, в реальном случае - маловероятно. Всегда какая-то ошибка. На самом деле это причина, по которой findHomography принимает несколько точек. Для определения перспективного преобразования необходимы четыре пары точек (как я уже сказал, его матрица имеет 8 степеней свободы). Наличие более 4 пар точек позволяет findHomography находить более точное преобразование, несмотря на ошибки в обнаружении точек. - person Michael Burdinov; 28.11.2013

Вы можете использовать функции homography2d.m и homoTrans.m, которые можно найти на сайте Питера Ковеси по адресу . MATLAB и функции Octave для компьютерного зрения и обработки изображений, чтобы найти гомографию и применить преобразование.

person dagcilibili    schedule 28.11.2013
comment
Я беспокоился об использовании точек 3xn для 2d гомографии. В основном у меня есть два изображения для сопоставления, должен ли я использовать 2D или 1D гомографию? - person motiur; 28.11.2013
comment
Вы можете использовать 2d-гомографию после заполнения векторов элементом 1 (что соответствует использованию однородного масштабного коэффициента 1). Например, если одной из точек, которые вы используете, является x = [x1; x2], вы ставите x_pad = [x1; x2; 1]. Это можно использовать для сопоставления изображений. - person dagcilibili; 28.11.2013
comment
Какая польза от 1, есть идеи? - person motiur; 28.11.2013
comment
Гомографическое преобразование становится матричным умножением при использовании однородных координат. Я думаю, что это используется для перехода от декартовых координат к однородным координатам. Хотя здесь было бы полезно проконсультироваться с ресурсом по компьютерному зрению. - person dagcilibili; 28.11.2013