OmgZomg 2 Report post Posted May 2, 2020 Добрый день! Как с помощью openCV можно определить угол поворота камеры Спасибо Share this post Link to post Share on other sites
Smorodov 572 Report post Posted May 3, 2020 Погуглите slam, ptam, dtam, multiple view geometry, Это не маленький объем математики, и привести его здесь проблематично. Посмотрите библиотечку OpenMVG . 1 Share this post Link to post Share on other sites
OmgZomg 2 Report post Posted May 3, 2020 Благодарю за ответ! Вообще, суть задачи следующая: Есть изображения (пример во вложении). По ним нужно определить угол поворота камеры. Вот хотя бы с чего начать решение задачи? Share this post Link to post Share on other sites
Smorodov 572 Report post Posted May 3, 2020 Как минимум нужно опорное изображение, где камера имеет нулевые углы. Если эти изображения плоские. Посмотрите еще здесь: https://docs.opencv.org/master/dc/d2c/tutorial_real_time_pose.html Share this post Link to post Share on other sites
OmgZomg 2 Report post Posted May 3, 2020 Хорошо, тогда нужно будет сравнивать кейпоинты изображений с кейпоинтами опорного изображения? Share this post Link to post Share on other sites
Smorodov 572 Report post Posted May 4, 2020 Есть способы найти преобразование для плоскости, чтобы перевести изображение из одного в другое. По нему и определяют углы поворота и смещения. Share this post Link to post Share on other sites
OmgZomg 2 Report post Posted May 4, 2020 А если с помощью координат центрального пикселя и фокусного расстояния? Как в этой теме https://answers.opencv.org/question/210066/how-do-i-get-the-angle-of-an-object-in-front-of-my-camera/ Share this post Link to post Share on other sites
Smorodov 572 Report post Posted May 4, 2020 Там в ответе про угол обзора камеры, а не про поворот вообще. Можете схему эксперимента обрисовать, чтобы понятно было относительно чего меряется угол ? Одинаковые ли изображения ? Просто по одному произвольному изображению ничего о камере сказать нельзя. Есть специально созданные картинки, типа шахматки или маркеров для дополненной реальности, но о них мы все знаем. Share this post Link to post Share on other sites
OmgZomg 2 Report post Posted May 4, 2020 10 minutes ago, Smorodov said: Там в ответе про угол обзора камеры, а не про поворот вообще. Можете схему эксперимента обрисовать, чтобы понятно было относительно чего меряется угол ? Одинаковые ли изображения ? Просто по одному произвольному изображению ничего о камере сказать нельзя. Есть специально созданные картинки, типа шахматки или маркеров для дополненной реальности, но о них мы все знаем. Микроскоп едет по столу, где находится образец ткани и фотографирует его. Нужно определить угла поворота камеры относительно осей стола, и обрезать кадр под параллели стола. Из входных данных имеем фотографии под разными углами и координаты изображений. Прикладываю несколько изображений для примера Здесь все изображения https://1drv.ms/u/s!AspbIoSXqblwgoYEys3rWo9Fp9tLDg?e=Rs4VnP Share this post Link to post Share on other sites
Smorodov 572 Report post Posted May 4, 2020 Если что то вроде оптической мышки получается, то есть изображения с приличным перекрытием, то попробуйте https://github.com/Smorodov/LogPolarFFTTemplateMatcher или посмотрите cv::estimateRigidTransform + какие-нибудь фичи (sift, surf, orb, ...). 1 Share this post Link to post Share on other sites
OmgZomg 2 Report post Posted May 5, 2020 Посмотрел Ваш код на гитхабе. Я так понял,чт он основан на питоновской библиотеке imreg. Мне как раз на питоне и нужно.Функция 'imreg.similarity' как раз возвращет angle. Это именно тот угол,который я пытаюсь определить? Share this post Link to post Share on other sites
Smorodov 572 Report post Posted May 5, 2020 У вас он даст угол между двумя изображениями. Они должны перекрываться. Если работать по последовательности кадров, то углы нужно суммировать. А тот ли это угол ? Хм... ну это вам лучше знать Задача то вами ставится. 1 Share this post Link to post Share on other sites
OmgZomg 2 Report post Posted May 5, 2020 А если взять опорное изображение,где камера имеет нулевые углы, и сравнивать это изображение со всеми остальными функцией 'imreg.similarity'? Тогда будет давать угол между изображениями Share this post Link to post Share on other sites
Smorodov 572 Report post Posted May 5, 2020 это можно, но тогда на изображениях должна быть одна и та же картинка, отличающаяся только поворотом, ну может немного смещенная. Короче, если взяв эти деве картинки вы на глаз можете определить поворот, то и комп сможет, если нет, то нет. 1 Share this post Link to post Share on other sites
Nuzhny 238 Report post Posted May 6, 2020 Кажется, что лучшее решение - это всё таки 3D реконструкция, например smf. Скормите ему все свои картинки и получите координаты камеры в 3D для каждого снимка. 1 Share this post Link to post Share on other sites
Pavia00 31 Report post Posted May 6, 2020 В 04.05.2020 at 20:57, Smorodov сказал: Если что то вроде оптической мышки получается, то есть изображения с приличным перекрытием, то попробуйте В 04.05.2020 at 15:45, OmgZomg сказал: А если с помощью координат центрального пикселя и фокусного расстояния? Возможно человеку нужно вычислить оптический поток и поворот камеры относительно предыдущих снимков по z? Выделить особые точки на соседних снимках и применить cv2.estimateRigidTransform(src, dst, fullAffine) 1 Share this post Link to post Share on other sites