Мне нужно выполнить задание, в котором я должен сравнить функцию solvePnP()
, используемую с SOLVEPNP_EPNP
и solvePnPRansac()
, используемую с SOLVEPNP_ITERATIVE
.Цель состоит в том, чтобы вычислить деформированное изображение из входного изображения.
Для этого я получаю входное изображение RGB, то же самое изображение, что и информационное изображение глубиной 16 бит, внутренние характеристики камеры и список точек совпадения характеристик между данным изображением и искомым искривленным изображением (которое являетсята же сцена с другой точки зрения.
Вот как я проделал эту задачу до сих пор:
- Рассчитать список точек 3D-объекта, сформировать изображение глубины и внутренние компоненты, которые соответствуютк списку совпадений объектов.
- используйте
solvePnP()
и solvePnPRansac()
с соответствующими алгоритмами, где вычисленные точки трехмерного объекта и точки совпадения объектов полученного изображения являются входными данными. В результате я получаювращение и вектор перевода для обоих методов. - В качестве проверки работоспособности я вычисляю среднюю ошибку перепроецирования, используя
projectPoints()
для всех точек совпадения объектов и сравнивая полученные проецируемые точки с точками совпадения объектов полученного изображения. - Наконец, я вычисляю точки 3D-объекта для каждого пикселявходное изображение и снова проецируйте их, используя вектор поворота и перемещения из предыдущего.Каждая проецируемая точка получит цвет от соответствующего пикселя во входном изображении, что приведет к окончательному искаженному изображению.
Это мои входные данные:
![enter image description here](https://i.stack.imgur.com/731AG.png)
Используя описанные выше шаги, я получаю следующий вывод с RansacМетод:
Это похоже на эталонное решение, которое я имею, так что это должно быть в основном правильно.Однако при использовании метода solvePnP()
с использованием SOLVEPNP_EPNP
результирующие векторы вращения и перемещения выглядят так, что не имеет никакого смысла:
================ solvePnP с использованием результатов SOVLEPNP_EPNP: ===============
Вращение: [-4.3160208e + 08;-4.3160208e + 08;-4.3160208e + 08]
Перевод: [-4.3160208e + 08;-4.3160208e + 08;-4.3160208e + 08]
В листе назначения указано, что в списке совпадений объектов содержатся некоторые несоответствия, поэтому в основном это выбросы.Насколько я знаю, Ransac лучше справляется с выбросами, однако может ли это быть причиной столь странных результатов для другого метода?Я ожидал каких-то аномалий, но это совершенно неправильно, и полученное изображение полностью черное, так как внутри области изображения нет точек.
Может быть, кто-то может указать мне правильное направление.