2012-06-07 2 views
0

Я работаю над кодом, где мне нужно найти траектории всех угловых точек, которые меня интересуют. Так что, для того же, я использовал оптический поток LKPyr, который использует угловые точки предыдущего изображения и находит их в текущем изображении. Я использую оптический поток кадр за кадром, т. Е. Кадр 1 и 2, затем 2 и 3. Итак, я думал, что угловые функции кадра 2, найденные в предыдущей итерации, будут текущими функциями для оптического потока, но это это не так, точки меняются каждый раз, когда я делаю хорошие функции для отслеживания, проблема в том, что касается точек траектории, мне нужно отслеживать текущие точки и добавлять новые, когда они приходят, и когда старые точки вот-вот потеряют, я должен получить статус = 0, чтобы я мог отслеживать точки один за другим. Есть ли способ сделать это? Есть ли способ узнать, когда каждая точка заканчивается на видео, чтобы я мог отслеживать траекторию? Изменит ли флаг в вызове cvLKpyrOpticalFlow помощь в получении непрерывного потока?OpenCV Lucas Kanade оптический поток

cvGoodFeaturesToTrack (imgGrayscale, imgEigen, imgTemp, corners_img, &corner_count, 0.01, 5.0, 0, 3, 0.4); 

    cvCalcOpticalFlowPyrLK(imgGrayscale, nxtimgGrayscale, pyr_img, pyr_nxtimg, corners_img, corners_nxtimg, corner_count, cvSize (win_size, win_size), 5, status, track_error, IterCriteria, NULL); 

Это блок кода, который я запускаю, чтобы получить оптический поток.

+1

Аналогичный вопрос: http://stackoverflow.com/a/9702540/769220 – Chris

ответ

2

Вы должны запустить cvGoodFeturesToTrack только в «первом» (или «ссылочном») кадре последовательности, которую вы отслеживаете, а затем cvCalcOpticalFlowPyrLK только в последующих кадрах.

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

Поскольку отслеживание обычно не работает для некоторых функций, после нескольких кадров вы можете обнаружить, что нет (или недостаточно) «живых» -отслеживаемых функций слева. На этом этапе вы можете запустить еще один проход обнаружения «хороших функций» для пополнения набора.

+0

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

Смежные вопросы