Перейти к содержимому
Compvision.ru
OmgZomg

Определение угла поворота камеры

Recommended Posts

Добрый день!

Как с помощью openCV можно определить угол поворота камеры

Спасибо

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Погуглите slam, ptam, dtam, multiple view geometry, Это не маленький объем математики, и привести его здесь проблематично. Посмотрите библиотечку OpenMVG .

  • Thanks 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Благодарю за ответ!

Вообще, суть задачи следующая:

Есть изображения (пример во вложении). По ним нужно определить угол поворота камеры. Вот хотя бы с чего начать решение задачи?

14_30906_23018.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Как минимум нужно опорное изображение, где камера имеет нулевые углы. Если эти изображения плоские.

Посмотрите еще здесь: https://docs.opencv.org/master/dc/d2c/tutorial_real_time_pose.html

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Хорошо, тогда нужно будет сравнивать кейпоинты изображений с кейпоинтами опорного изображения?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Есть способы найти преобразование для плоскости, чтобы перевести изображение из одного в другое.

По нему и определяют углы поворота и смещения.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А если с помощью координат центрального пикселя и фокусного расстояния?

Как в этой теме

https://answers.opencv.org/question/210066/how-do-i-get-the-angle-of-an-object-in-front-of-my-camera/

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Там в ответе про угол обзора камеры, а не про поворот вообще. 

Можете схему эксперимента обрисовать, чтобы понятно было относительно чего меряется угол ? Одинаковые ли изображения ?

Просто по одному произвольному изображению ничего о камере сказать нельзя. Есть специально созданные картинки, типа шахматки или маркеров для дополненной реальности, но о них мы все знаем.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
10 minutes ago, Smorodov said:

Там в ответе про угол обзора камеры, а не про поворот вообще. 

Можете схему эксперимента обрисовать, чтобы понятно было относительно чего меряется угол ? Одинаковые ли изображения ?

Просто по одному произвольному изображению ничего о камере сказать нельзя. Есть специально созданные картинки, типа шахматки или маркеров для дополненной реальности, но о них мы все знаем.

Микроскоп едет по столу, где находится образец ткани и фотографирует его.

Нужно определить угла поворота камеры относительно осей стола, и обрезать кадр под параллели стола.

 

Из входных данных имеем фотографии под разными углами и координаты изображений.

 

Прикладываю несколько изображений для примера

Здесь все изображения

https://1drv.ms/u/s!AspbIoSXqblwgoYEys3rWo9Fp9tLDg?e=Rs4VnP

5_24762_23018.png

10_28197_23018.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Если что то вроде оптической мышки получается, то есть изображения с приличным перекрытием, то попробуйте https://github.com/Smorodov/LogPolarFFTTemplateMatcher

или посмотрите cv::estimateRigidTransform + какие-нибудь фичи (sift, surf, orb, ...).

  • Thanks 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Посмотрел Ваш код на гитхабе. Я так понял,чт он основан на питоновской библиотеке imreg. Мне как раз на питоне и нужно.Функция 'imreg.similarity' как раз возвращет angle. Это именно тот угол,который я пытаюсь определить?


 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

У вас он даст угол между двумя изображениями. Они должны перекрываться. Если работать по последовательности кадров, то углы нужно суммировать. 

А тот ли это угол ? Хм... ну это вам лучше знать :) Задача то вами ставится.

  • Thanks 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А если взять опорное изображение,где камера имеет нулевые углы, и сравнивать это изображение со всеми остальными функцией 'imreg.similarity'? Тогда будет давать угол между изображениями

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

это можно, но тогда на изображениях должна быть одна и та же картинка, отличающаяся только поворотом, ну может немного смещенная.

Короче, если взяв эти деве картинки вы на глаз можете определить поворот, то и комп сможет, если нет, то нет. 

  • Thanks 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Кажется, что лучшее решение - это всё таки 3D реконструкция, например smf.

Скормите ему все свои картинки и получите координаты камеры в 3D для каждого снимка.

  • Thanks 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
В 04.05.2020 at 20:57, Smorodov сказал:

Если что то вроде оптической мышки получается, то есть изображения с приличным перекрытием, то попробуйте

 

В 04.05.2020 at 15:45, OmgZomg сказал:

А если с помощью координат центрального пикселя и фокусного расстояния?

Возможно человеку нужно вычислить оптический поток и поворот камеры относительно предыдущих снимков по z?

Выделить особые точки на соседних снимках и применить

cv2.estimateRigidTransform(src, dst, fullAffine)

 

  • Thanks 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×