Параметр OPTFLOW_USE_INITIAL_FLOW для cvCalculateOpticalFlowFarneback - PullRequest
0 голосов
/ 22 февраля 2012

Я работаю над проектом с использованием OpenCV и использую алгоритм оптического потока cvCalculateOpticalFlowFarneback для получения оптического потока в моем видео.

Я читал документацию и даже немного искал исходный коди есть опция, которую вы можете передать алгоритму: OPTFLOW_USE_INITIAL_FLOW

Я играл с этим, но не вижу никакой разницы в скорости или точности.Итак, мой вопрос:

Что делает опция?Испытывали ли вы какие-либо различия в использовании по сравнению с нет?(хорошо или плохо)

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

Любые комментарии оценены!

1 Ответ

2 голосов
/ 22 февраля 2012

Документация OpenCV для cvCalculateOpticalFlowFarneback гласит:

OPTFLOW_USE_INITIAL_FLOW Использовать входной поток в качестве начального приближения потока

Что означает: если вы заполняете поток выходных параметров своей оценкой потока, то эта функция будет использовать поток, который вы даете, в качестве начальной оценки, как вы и подозреваете. Вы увидите реальную разницу, только если сможете дать разумную оценку потока в качестве входных данных. В противном случае это не будет иметь никакого эффекта или даже ухудшит его. Вы можете легко проверить эффект, если у вас есть видеопоследовательность, в которой камера движется с постоянной скоростью:

  • Для первых двух изображений вычислите поток без параметра.
  • Для последующих изображений используйте поток, вычисленный для предыдущей пары, в качестве входных данных для нового вычисления с параметром OPTFLOW_USE_INITIAL_FLOW. И рассчитать поток без него.
  • Сравните полученный поток и время, которое требуется. Это должно показать вам эффект от параметра.

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

Относительно возможных ошибок в реализации и производственном использовании (примечание: я не смотрел на фактический источник):

  • Если оптический поток, который вы найдете без него, приемлем для ваших нужд, не используйте его.
  • Если вы проверяете влияние параметра и обнаруживаете, что он помогает, тестируйте еще несколько, пока не будете уверены, что он помогает, и используйте его.
  • Вы можете спросить об ошибке в Списке рассылки OpenCV , но я бы посоветовал вам сначала провести некоторое тестирование и еще немного чтения кода, прежде чем пытаться.
...