У меня есть задание:
У нас работает система, в которой камера делает полукруг вокруг головы человека. Мы знаем матрицу камеры и вращение/смещение каждого кадра. (Искажение и прочее... но я хочу сначала поработать без этих параметров)
Моя задача состоит в том, чтобы у меня была только Матрица камеры, которая постоянна на протяжении этого хода, а изображений (более 100 ).Теперь я должен получить перевод и вращение от кадра к кадру и сравнить его с вращением и перемещением в реальном мире (из системы, которая у меня есть, но только для сравнения, я тоже должен это доказать!)
Первые шаги, которые я сделал до сих пор:
cv::Mat E = K.t() * F * K; //Found at the Bible HZ Chapter 9.12
Теперь нам нужно извлечь R и t из E с помощью SVD. Кстати, позиция camera1 просто нулевая, потому что нам нужно с чего-то начинать.
cv::SVD svd(E);
cv::SVD svd(E);
cv::Matx33d W(0,-1,0, //HZ 9.13
1,0,0,
0,0,1);
cv::Matx33d Wt(0,1,0,//W^
-1,0,0,
0,0,1);
cv::Mat R1 = svd.u * cv::Mat(W) * svd.vt; //HZ 9.19
cv::Mat R2 = svd.u * cv::Mat(Wt) * svd.vt; //HZ 9.19
//R1 or R2???
R = R1; //R2
//t=+u3 or t=-u3?
t = svd.u.col(2); //=u3
Это мой реальный статус!
Мои планы:
Теперь мои вопросы:
cv::Mat R1 = svd.u * cv::Mat(W) * svd.vt
и t = svd.u.col(2); //=u3
Почему это правильно?Если это не -, как мне сделать эту триангуляцию в OpenCV? Я сравнил этот перевод с переводом, который мне дали. (Сначала мне пришлось передать перемещение и вращение по отношению к камере1, но теперь я понял это! )Но это не то же самое. Значения моей программы просто позволяют назвать ее прыгающей от плюса к минусу. Но оно должно быть более постоянным, потому что камера движется по постоянному кругу. Я уверен, что некоторые оси могут быть переключены. Я знаю, что перевод только от -1 до 1, но я думал, что смогу извлечь коэффициент из моих результатов в мои сравнительные значения, и тогда он должен быть похож.Делал ли кто-нибудь что-то подобное раньше?
Многие люди делают калибровку камеры с помощью шахматной доски, но я не могу использовать этот метод для получения внешних параметров.
Я знаю, что visual sfm может как-то это сделать. (На youtube есть видео, где кто-то ходит вокруг дерева и получает по этим картинкам реконструкцию этого дерева с помощью визуального sfm )Это примерно то же самое, что я должен сделать.
Последний вопрос:
Кто-нибудь знает простой способ визуализировать мои 3D-точки? Я предпочитаю MeshLab. Какой-то опыт в этом?