Отслеживание пронумерованных маркеров в видео

У меня есть видео с кадрами, как показано на моем предыдущем изображении в этом вопросе.

Как мы обнаруживаем точки на изображении с определенным цветом на этих точках

Я обнаружил эти маркеры и пронумеровал их, как показано на рисунке ниже:

Данные маркера

Моя проблема заключается в следующем. После того, как я обнаружил маркеры в одном кадре, мне нужно обнаружить их в другом кадре и выяснить, насколько маркер переместился из своего предыдущего местоположения. Однако при повторном использовании моего кода во втором кадре я иногда в некоторых кадрах получаю различную нумерацию среди маркеров, и, следовательно, я не могу отслеживать маркеры от одного изображения к другому. Кроме того, обнаружение маркеров в каждом изображении становится трудоемкой задачей и занимает много времени для видео, которое имеет около 200 кадров.

Как я могу отследить эти маркеры на изображениях, чтобы узнать, насколько конкретный маркер переместился между кадрами, или просто как нумеровать эти маркеры так, чтобы нумерация никогда не менялась, а именно, маркер с номером 60 остается маркером 60 от кадра 1 до кадра 200.

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

1

Решение

Моя проблема заключается в следующем. После того, как я обнаружил маркеры в одном кадре, я
нужно обнаружить их в другом кадре и узнать, сколько стоит маркер
переехал из своего предыдущего местоположения. Однако при использовании моего кода снова
на втором кадре у меня иногда в некоторых кадрах получается другое
нумерация среди маркеров и, следовательно, я не могу отслеживать маркеры из
одно изображение другому. Также обнаружение маркеров в каждом изображении становится
громоздкая задача и занимает много времени для видео, которое имеет около
200 кадров.

Как я могу отслеживать эти маркеры на изображениях, чтобы знать, сколько
конкретный маркер переместился между кадрами или просто как нумеровать
эти маркеры такие, что нумерация никогда не меняется, а именно маркер
под номером 60 остается маркер № 60 от кадра 1 до кадра 200.

Может быть, рассмотреть вопрос об использовании техники оптического потока — http://robotics.stanford.edu/~dstavens/cs223b/ ?

В качестве альтернативы попытайтесь разделить облако точек на более мелкие части, чем обнаруживать контуры. Вы можете разделить это, используя линии или используя эту простую идею (не проверено или проанализировано):

  1. Найти выпуклую оболочку всех точек (http://en.wikipedia.org/wiki/Convex_hull_algorithms) из вашего облака точек.
  2. Точки на границе находятся в одной группе.
  3. После обработки точек из группы из пункта 2 удалите их.
  4. Перейти к пункту 1.

Как побочный вопрос, есть ли способ на самом деле уменьшить время обработки, так что мне не нужно распознавать лицо и глаза в
каждый кадр

Есть несколько простых способов сократить время обработки:

  • Не загружайте каскад Хаара во время обработки каждого кадра — загрузите его только один раз, прежде чем начинать получать кадры из камеры / видеофайла.
  • если нужно найти только одно лицо в каждом кадре, используйте флаг CV_HAAR_FIND_BIGGEST_OBJECT — поиск вернет только один (самый большой) объект. Это должно быть намного быстрее, потому что поиск начнется с самого большого окна и, кроме того, когда детектор хаара найдет один объект, он прекратит поиск и возвратит этот объект.
  • играть с параметрами и проверять разные каскады
  • как только вы найдете лицо в кадре номер n чем в номере кадра n+1 не выполнять поиск по всему кадру — разверните прямоугольник, в котором вы нашли лицо n кадр и поиск только в этом расширенном прямоугольнике. Насколько вы должны его расширить? Это зависит от того, насколько быстро пользователь может двигать головой;) 50% — большая терпимость, но также и медленная. Лучший вариант — найти это значение самостоятельно.
  • если ваше изображение не сильно изменится, вы можете пропустить обнаружение лица в большинстве кадров и просто предположить, что оно находится в том же месте, что и в предыдущем кадре — просто проверьте, сильно ли изменился кадр. Самый простой метод Обнаружение движения с использованием OpenCV (как упомянул автор — рекомендуется использовать двоичный порог в результате вычитания, чтобы игнорировать изменения, происходящие из-за шума). Я использовал этот метод в своей диссертации бакалавра (система Eyetracking), и он работал очень хорошо и улучшил скорость всей системы. Примечание. Рекомендуется время от времени форсировать нормальный (с использованием каскада Хаара) поиск (я решил делать это один раз на каждые 3 кадра, но вы можете попытаться выполнять поиск реже) — это позволит вам избежать ситуации в который использовал, переместился за пределы области камеры, и система не заметила это.
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]