Улучшение алгоритма кулачкового сдвига в открытом резюме - PullRequest
4 голосов
/ 09 февраля 2011

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

Ответы [ 3 ]

2 голосов
/ 09 февраля 2011

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

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

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

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

1 голос
/ 09 февраля 2011

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

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

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

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

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

0 голосов
/ 07 апреля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...