Я использовал это код в качестве основы для обнаружения моей прямоугольной цели в сцене. Я использую ORB и Flann Matcher. Я смог нарисовать ограничивающую рамку обнаруженной цели в моей сцене, успешно используя findHomography()
а также perspectiveTransform()
функции.
Эталонное изображение (img_object
в приведенном выше коде) является прямой вид только прямоугольной цели. Теперь цель в моем изображении сцены может быть наклонена вперед или назад. Я хочу выяснить угол, на который он был наклонен. Я прочитал различные посты и пришел к выводу, что findHomography()
может быть разложен на матрицу вращения и вектор перевода.
Я использовал код из https: /gist.github.com/inspirit/740979 рекомендованный эта ссылка переведено на C ++. Это код декомпозиции Zhang SVD, полученный из модуля калибровки камеры OpenCV. Я получил полное объяснение этого кода декомпозиции из книги O’Reilly Learning OpenCV.
Мои вопросы:
findHomography()
в качестве входных данных для этого модуля разложения и ожидаете правильного вывода? Или мне чего-то не хватает?Наконец, я пишу код на мобильной платформе, поэтому я тоже обеспокоен производительностью. Я был бы рад, если бы вы могли указать мне правильное направление.
Заранее спасибо за ваше время и ответы.
Процедура калибровки Чжана даст матрицу вращения. Это представляется как 3 (эйлеровых) угла, а не как один. Или, что то же самое (через формулу Родригеса), как один единичный вектор и угол поворота вокруг этого вектора — то есть снова три числа.
Если ваша камера и цель не будут очень тщательно расположены друг относительно друга, нет никаких оснований ожидать, что будет только один ненулевой угол поворота.
Других решений пока нет …