Сдал вчера проект на работе - решил отдохнуть на выходных, пописать сюда свои соображения.
Хотелось бы все-таки направить обсуждение в более практическое русло.
Что можно выжать из видеокамеры с помощью МК....
У МК - ограниченные вычислительные ресурсы,
поэтому, по-моему, тут нужно упрощать УСЛОВИЯ задач,
а не пытаться решать их в общем виде.
Например, мы можем говорить о видеокамере на роботе,
а не о видеокамере вообще.
Мы можем ввести предположения о геометрии пространства.
Ну, например, пол плоский и ровный, угол камеры относительно плоскости пола
известен и не меняется, Интересующие нас объекты имеют грани, перпендикулярно
пересекающие плоскость пола и т.д.
Мы можем также использовать возможность робота
двигаться или обеспечивать нужную подсветку.
Эти простые (и, на мой взгляд, вполне правдоподобные)
предположения резко снизят объем вычислений.
Добавлено спустя 8 минут 51 секунду:Например, совершенно тупой способ построения "карты препятствий"
может выглядеть так:
1. Снимаем кадр
2. Снимаем тот же кадр с подсветкой параллельной полу.
3. Вычитаем, фильтруем.
4. Определяем нижние границы подсвеченных объектов.
5. Зная геометрию пола и перспективу, определяем расстояние
и направления на препятствия.
Думаю, так можно получить вполне приемлемое обнаружение препятствий.
Даже если объекты не вполне соответствуют предположениям, карта будет
корректироваться в процессе движения робота.
На кадре - на переднем плане игрушечный "шипастый" мячик,
слева вдали - коробка от бумаги, справа - деревянный брусок.
Камера - на высоте 120мм от пола.
Расстояние от камеры до шарика - около 300 мм.
До коробки - около 600 мм.
Снимал телефоном. Подсветка - лампа "переноска" 25 ватт
ненаправленная, расположенная позади и чуть справа от камеры.
Обращу внимание, что область кадра выше горизонта
(или даже выше порога разрешения расстояния)
нас в данном случае вообще не интересует.
Добавлено спустя 1 час 57 минут 49 секунд:В предложенных упрощениях интересно будет, например, наблюдать
за линией горизонта.
Если на ней достаточно информации, за которую можно зацепиться,
то можно определять угол поворота робота или, при движении
вперед-назад, пытаться оценить расстояние до ключевых точек
(например граней объектов, пересекающих плоскость горизонта).
В этом случае информации не так много (одна или несколько строк кадра),
поэтому можно работать с практически "одномерной картинкой"
При высокой частоте кадров интересно также выделить небольшой
кусочек в нижней части кадра. Если при небольшой скорости робота и
высокой частоте кадров смещение картинки в ней невелико, то можно
попытаться определить фактическую скорость и поворот робота.
(По принципу оптической мышки). Можно заметить, что при развороте
вокруг "центра камеры", картинка в камере будет только смещаться,
а оптические искажения можно минимизировать, выбрав небольшой участок
в центре, который можно считать неискаженным.
Для маяков, видимо можно выбирать формы инвариантные к масштабу
и направлению. Например поставить на пол подсвеченные изнутри конусы.
Тогда найденный на картинке яркий угол заданной величины и направленный
вверх - даст направление на маяк. Искать его будет заметно проще,
чем, скажем, штрихкод.
Зная высоту конуса, можно также ограничить область поиска.
Например, если их поставить так, чтобы вершины лежали в плоскости горизонта,
задача определения направления на маяк превращается в тривиальную.
Маяки могут различаться например углом, но может быть проще
задать положение маяков относительно друг-друга или можно подвесить
над конусом цилиндр с горизонтальными полосками или нанести
горизонтальные полоски прямо на конус.
Наконец, понятно, что найденные ключевые точки не станут внезапно
изменять свое положение в последовательных кадрах. Это можно использовать
для ограничения областей интереса и для последовательного уточнения результатов.
Добавлено спустя 11 минут 44 секунды:Можно снижать объем обрабатываемой информации
просто по разному фильтруя картинку для разных областей.
Например "линию горизонта" можно выбрать с максимальным разрешением,
а область "у робота под ногами" зафильтровать и снизить разрешение
(или даже тупо проредить, надеясь, что расфокусировка сработает "антиалиасинговым" фильтром
)