2013-11-28 4 views
1

Позволяет сказать:перспектива преобразования в 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, которая может это сделать, однако мне действительно нужен простой пример, чтобы очистить мое замешательство. Благодарю.

+0

Существует хорошее видео youtube http://www.youtube.com/watch?v=fVJeJMWZcq8, которое объясняет это; однако видео - это видео после. – motiur

ответ

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 точек.

Edit (ответ на комментарий):

xTag = M11 * x1 + М12 * y2 + M13

yTag = M21 * x1 + M22 * y2 + M23

zTag = M31 * x1 + М32 * у2 + М33 (М33 будет всегда равна 1, поскольку существует только восемь степеней свободы)

х2 = xTag/zTag

у2 = yTag/zTag

+0

Я получил 3x3 из функции findHomography(). Я мог бы понять, что вы сказали о датчиках. Теперь, чтобы вернуться к t2, что мне делать? Я думаю, что моя функция findHomography() обрабатывает прописные. – motiur

+0

Просто еще один комментарий, чтобы рассеять мое невежество. Я выполняю сопоставление функций между двумя изображениями, поэтому, когда я получаю идеальное совпадение между изображением i1 и изображением i2, будет ли разница между x, x2 и y, y2 равной нулю. – motiur

+0

В некотором теоретическом совершенном случае - да, в реальном случае - крайне маловероятно. Там всегда какая-то ошибка. На самом деле это причина, по которой findHomography принимает несколько точек. Для определения перспективного преобразования требуются четыре пары точек (так как я сказал, что его матрица имеет 8 степеней свободы). Наличие более 4 пар точек позволяет findHomography найти более точное преобразование, несмотря на ошибки в обнаружении точек. –

1

Вы можете использовать функции homography2d.m и homoTrans.m, найденные на сайте Peter Kovesi по телефону MATLAB and Octave Functions for Computer Vision and Image Processing, чтобы найти гомографию и применить преобразование.

+0

Я беспокоился об использовании 3xn точек для 2d-гомографии. У меня в основном есть два изображения для соответствия, следует ли использовать 2d или 1d-гомографию? – motiur

+0

Вы можете использовать 2d-гомографию после заполнения векторов элементом 1 (что соответствует использованию однородного масштабного коэффициента 1). Например, если одна из используемых вами точек - 'x = [x1; x2] 'you put' x_pad = [x1; х2; 1] '. Это можно использовать для соответствия изображениям. – dagcilibili

+0

Что такое 1, любая идея? – motiur

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

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