Алгоритм автоматического слежения - PullRequest
7 голосов
/ 27 мая 2010

Я пытаюсь написать простую подпрограмму отслеживания для отслеживания некоторых моментов в фильме.

По сути, у меня есть серия фильмов длиной 100 кадров, на которых видны яркие пятна на темном фоне. У меня ~ 100-150 точек на кадр, и они движутся по ходу фильма. Я хотел бы отследить их, поэтому я ищу эффективную (но, возможно, не слишком сложную для реализации) подпрограмму для этого.

Еще немного информации:

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

Поскольку видео ч / б, я должен полагаться на легкость. Например, я подумал, что мог бы перемещаться по области и вычислять корреляцию области региона в предыдущем кадре с той, которая находится в различных позициях в следующем кадре. Я понимаю, что это довольно наивное решение, но вы думаете, оно может сработать? Кто-нибудь знает конкретные алгоритмы, которые делают это? Он не должен быть сверхбыстрым, если он точен, я счастлив.

Спасибо

Nico

Ответы [ 6 ]

4 голосов
/ 27 мая 2010

Звучит как работа для Обнаружение BLOB-объектов для меня.

3 голосов
/ 19 сентября 2011

Predator (TLD Algorithm) от Zdenek Kalal также хорош для автоматического отслеживания

Смотрите это:

http://www.youtube.com/watch?v=1GhNXHCQGsM

и

http://bit.ly/shahab-vision

2 голосов
/ 05 июня 2010

Я бы предложил продукт Пирсона . Имея модель (это может быть любое изображение шаблона), вы можете измерить корреляцию шаблона с любым участком кадра.

Результатом является коэффициент вероятности, который определяет корреляцию выборок с шаблонной. Это особенно применимо к 2D-случаям. Преимущество состоит в том, что он не зависит от абсолютного значения выборки, поскольку результат зависит от ковариации, связанной со средним значением выборок.

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

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

Вот реализация алгоритма однопроходного *1011*, которую я использовал и работает правильно.

1 голос
/ 28 мая 2010

Боюсь, что отслеживание блобов не так просто, если вы хотите сделать это хорошо.

Начните с обнаружения BLOB-объектов, как говорит genpfault.

Теперь у вас есть пятна на каждом кадре, и вам нужно их связать. Если капли движутся независимо, вы можете использовать какой-то алгоритм соответствия, чтобы связать их. Смотри например http://server.cs.ucf.edu/~vision/papers/01359751.pdf.

Теперь у вас могут быть столкновения. Вы можете использовать смесь гауссиан, чтобы попытаться разделить их, сдаться и позволить пересечь пути, использовать любую другую информацию до и после, чтобы устранить столкновения (например, если A и B сталкиваются, а A ярче до и будет ярче после , вы можете отслеживать A; если A и B движутся по предсказуемым траекториям, вы также можете использовать это).

Или вы можете сотрудничать с лабораторией, которая занимается такими вещами все время.

1 голос
/ 27 мая 2010

Простое - это хорошо. Я бы начал делать что-то вроде:

1) over a small rectangle, that surrounds a spot:
2) apply a weighted average of all the pixel coordinates in the area
3) call the averaged X and Y values the objects position
4) while scanning these pixels, do something to approximate the bounding box size
5) repeat next frame with a slightly enlarged bounding box so you don't clip spot that moves

Вес для среднего значения должен быть равен нулю для пикселей ниже некоторого порогового значения. Номер 4 может быть таким же простым, как отслеживание минимального / максимального положения чего-либо более яркого, чем тот же порог.

Это, конечно, будет иметь проблемы с точками, которые перекрываются или пересекаются. Но по какой-то причине я продолжаю думать, что вы отслеживаете звезды с неизвестным движением камеры, и в этом случае это должно быть хорошо.

1 голос
/ 27 мая 2010

Это должно быть хорошо изучено, и я подозреваю, что не будет 100% точного решения.

Некоторые ссылки, которые могут быть полезны:

Изучение моделей деятельности с использованием отслеживания в режиме реального времени . Документ от двух парней из MIT.

Фильтр Калмана . Особенно часть Computer Vision.

Отслеживание движения . Студенческий проект, в котором также есть код и примеры видео, в которые я верю.

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

...