Улучшение алгоритма camshift в open cv

Я использую алгоритм camshift opencv для отслеживания объектов. Ввод берется с веб-камеры, и объект отслеживается между последовательными кадрами. Как я могу усилить отслеживание? Если я перемещаю объект с большой скоростью, отслеживание не выполняется. Также при отсутствии объекта в кадре возникают ложные срабатывания. Как мне улучшить это?


person nishant    schedule 09.02.2011    source источник
comment
Я не думаю, что один только алгоритм camshift решит эту проблему.   -  person karlphillip    schedule 09.02.2011
comment
Выбор алгоритма отслеживания сильно зависит от того, какой объект вы отслеживаете. Также вы отслеживаете или просто локализуете объект?   -  person count0    schedule 09.02.2011


Ответы (3)


Отслеживание объектов является активной областью исследований в области компьютерного зрения. Для этого существует множество алгоритмов, и ни один из них не работает в 100% случаев.

Если вам нужно отслеживать в режиме реального времени, то вам нужно что-то простое и быстрое. Я предполагаю, что у вас есть способ отделить движущийся объект от фона. Затем вы можете вычислить представление объекта, например цветовую гистограмму, и сравнить ее с объектом, который вы найдете в следующем кадре. Вы также должны проверить, что объект не перемещается слишком далеко между кадрами. Если вы хотите попробовать более продвинутое отслеживание движения, вам следует поискать Фильтр Калмана.

Определить, что предмета нет в кадре, тоже большая проблема. Во-первых, какие объекты вы пытаетесь отслеживать? Люди? Машины? Собаки? Вы можете создать классификатор объектов, который скажет вам, является ли движущийся объект в кадре интересующим вас объектом, в отличие от шума или какого-либо другого объекта. Классификатор может быть чем-то очень простым, например ограничением по размеру, или очень сложным. В последнем случае вам нужно узнать о функциях, которые можно вычислить, алгоритмах классификации, таких как машины опорных векторов, и вам нужно будет собирать обучающие изображения для обучения.

Короче говоря, создать надежный трекер непросто.

person Dima    schedule 09.02.2011

Предположим, вы нашли объект в первых двух кадрах. Из этой информации вы можете экстраполировать, где вы ожидаете объект в третьем кадре. Вместо использования общего алгоритма поиска объекта вы можете использовать более медленный, более сложный (и, следовательно, более надежный) алгоритм, ограничив его проверкой окрестности, которую предсказывает экстраполяция. Это может быть не совсем то, что вы ожидаете (возможно, вектор скорости меняется), но вы, безусловно, сможете уменьшить проверяемую область.

Это должно помочь уменьшить количество случаев, когда какая-либо другая часть кадра ошибочно идентифицируется как объект (потому что вы смотрите на меньшую часть кадра и потому что вы используете лучший детектор признаков).

Обновите экстраполяции на основе того, что вы найдете, и выполните итерацию для следующего кадра.

Если объект выходит за пределы кадра, вы возвращаетесь к своему общему детектору признаков, как и в случае с первыми двумя кадрами, и снова пытаетесь получить «замок», когда объект возвращается в вид.

Кроме того, если можете, добавьте как можно больше света в физическую сцену. Если сцена тусклая, веб-камера будет использовать более длительное время экспозиции, что приведет к большему размытию движущихся объектов. Размытие движения может сильно затруднить работу детекторов признаков (хотя оно может дать вам информацию о направлении и скорости).

person Adrian McCarthy    schedule 09.02.2011

Я обнаружил, что если вы расширите границу окна поиска в camShift, это сделает алгоритм немного более адаптивным к быстро движущимся объектам, хотя это может внести некоторые неточности. попробуйте просто увеличить границу окна на 10% и посмотреть, что получится.

person Seth    schedule 07.04.2011