Добрый день,
имею видеокамеру (2мпиксела или любое другое до 320х240 разрешение), до 30 кадров в секунду, черно-белая, ИК (8 бит на пиксель). Одновременно есть возможность включать/выключать ИК подсветку, могу сделать ее хоть от 20 разных светодиодов, но, ИМХО, 2 или 4-х будет достаточно.
Одновременно также рядом с камерой по 1-4 направлениям могу поставить датчик расстояния, которые дадут точность по расстоянию около 0.5мм (хотелось бы поставить таких датчиков поменьше).
Камера закреплена на краю пластинки, которая довольно низко над поверхностью движется (от 2 до 10см примерно), иногда с рывками, но, большей частью, довольно плавно.
Хочу получать скорости движения камеры, то есть все 6 скоростей.
Понятно, что так как есть датчик расстояния, то
скорость приближения-удаления будет только через датчики расстояния.
Понятно, что если движение линейное и поверхность равноудалена от камеры, то две скорости
, которые ортогональны направлению оси камеры можно через Фурье преобразование и последующее сравнение (как циркулянт на вектор и затем поиска максимума) посчитать.
Но вот есть еще скорости:
вращение вокруг оси камеры,
наклоны по двум ортогональным этой оси направлениям.
Еще неприятность в том, что все надо делать в реальном времени, и в доступе довольно мало памяти (4МБ) и процессор на плавающей точке показывает только 120МФлопсов, что, в общем совсем не густо, то есть у меня имеется около 4МФлоп на одну пару картинок сравнения. То есть Фурье примерно от 480х320 на 30fps и 640х480 на 10fps еще с грехом пополам сделать можно, а что-то существенно более сложное - нельзя.
Я понимаю, что можно искать максимумы градиента на картинке и сравнивать куда они уплыли, но тут вычислительной сложности вот точно не хватит.
Пусть я даже забью на вычисления
, но, если они присутствуют, скорости
не получится через Фурье вычислить.
Гипотетически, поверхность над которой летает моя камера, довольно гладкая, поэтому я могу предположить, что если поставить 4 датчика расстояния крестом вокруг камеры, то на их основе я скорости
буду получать довольно устойчиво, но, вот
все равно мешать будет.
Пожалуйста, посоветуйте, в сторону какого алгоритма стоит посмотреть?
И еще вопрос, посоветуйте, пожалуйста, стоит ли брать широкоугольную или наоборот, очень узконаправленную камеру? Очевидно, что с узконаправленной будет больше линейности, но, возможно на широкоугольной что-то можно интереснее вытянуть, но что конкретно я сообразить не могу.
PS: вопрос частично связан с воблой
https://dxdy.ru/topic149178.html, которую мы тут недавно обсуждали, но вычислительная сложность полученного и запрограммированного алгоритма, а также глюки, при резком движении меня сильно не устраивают, поэтому принял решение решать свою задачу по-другому.
Спасибо!