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