После прочтения темы идея ограничить область зрения для ускорения обработки изображения с камер понравилась. Только вот совершенно не раскрыт вопрос того, как определять области, которые нужно анализировать в первую очередь?
Поэтому, пошёл в магазин...
)
По дороге старался анализировать своё восприятие окружающего и пытался выявить закономерности фокусировки внимания на различных объектах, применительно к навигации робота и снижению необходимых вычислительных ресурсов...
Закономерности:
1. Прежде всего взгляд останавливался на наиболее близких объектах, расположенных по вектору движения... видимо, как наиболее значимых для навигации (ближайшие люди на тротуаре перед тобой, статические препятствия)
2. Из группы наиболее близких объектов наибольшее значение имели те, расстояние до которых уменьшалось быстрее (встречные люди, деревья вдоль тротуара и т.д.)
3. При наличии объектов в непосредственной близости, внимание более отдалённым объектам практически не уделялось
4. Внимание уделялось объектам за пределами ближайшей зоны только при условии постоянства обстановки по пунктах 1-2, так сказать для оценки общей ситуации.
5. Оглядываться по сторонам всё равно приходилось регулярно
Если взять за основу эти далеко не бесспорные постулаты, и предположить, что навигация и распознование образов осуществляются на базе стереозрения, то можно выстроить некоторый алгоритм, позволяющий динамически распределять процессорное время между задачами ориентирования и распознавания объектов с учётом их значения в данный момент времени:
1. Делаем временную засечку.
2. Получаем изображения с камер.
3. Формируем полную карту глубин изображения (с использованием optical-flow, например)
4. Выделяем по карте глубин отдельные объекты
5. Определяем порядок обработки объектов по увеличению дистанции до объекта, либо по скорости изменения положения объекта относительно предыдущего цикла, либо по расположению объекта относительно центра кадра.
6. Берём по одному объекту и, зная расстояние и контур, производим их обработку: распознование образов, топопривязка, анализ скорости сближения и т.д.
7. После обработки каждого объекта проверяем время, прошедшее с начала цикла: если оно меньше некой заданной величины, то берём следующий объект, а если лимит времени на один цикл превышен, то начинаем новый цикл.
Таким образом при обработке изображения мы сможем фиксировать "внимание" только на тех объектах, которые нам интересны, например быстро изменяют своё положение или находятся ближе всего к нам.
Что думают форумчане?
П.С. Кстати, шаг №4 (выделение объектов по карте глубин) тоже можно приоритезировать.
Например, генерить на ткаждом цикле грубую карту расстояний, сравнивать с предыдущим циклом, строить матрицу векторов скорости и начинать выделение объектов в наиболее интересных частях изображения.
П.П.С. Можно и несколько критериев посика/обработки объектов объединить: два самых близких, потом самый яркий, потом самый быстрый и т.д.