Алгоритм автоматического отслеживания

Я пытаюсь написать простую процедуру отслеживания, чтобы отслеживать некоторые моменты в фильме.

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

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

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

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

Спасибо

Нико


person nico    schedule 27.05.2010    source источник
comment
Являются ли формы уникальными? В противном случае у вас могут возникнуть проблемы с точностью, особенно если фигуры находятся в пределах 10 пикселей друг от друга.   -  person vad    schedule 27.05.2010
comment
@Анон: ты очень хорошо замечаешь. Я думаю, вы можете сказать, что все пятна отличаются друг от друга, но на таких мелочах вы понимаете, что различия не могут быть такими огромными. У меня уже есть процедура ручного отслеживания, которая позволяет пользователю вручную перемещать регион с течением времени, поэтому в случае этих сложных регионов пользователю, возможно, придется делать это вручную, это не проблема. . Я просто не хочу вручную отслеживать все 150 регионов для каждого изображения...   -  person nico    schedule 27.05.2010


Ответы (6)


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

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

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

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

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

person Luca    schedule 04.06.2010
comment
Спасибо, Лука. Попробую реализовать что-то подобное. Я дам вам знать, если это сработает - person nico; 05.06.2010
comment
Спасибо всем за ответы, все они были полезны. В конце концов я использовал это решение, поэтому выбрал его в качестве принятого ответа. Мне все еще нужно немного подправить, но в целом, кажется, работает довольно хорошо (все еще требуется некоторая ручная настройка, но это нормально). - person nico; 06.06.2010

Для меня это похоже на работу по обнаружению больших двоичных объектов.

person genpfault    schedule 27.05.2010
comment
+1 Согласен. Это похоже на проект адаптивного управления зеркалом, над которым я работал. Я нашел исходные положения «точек» с помощью анализа капель. Затем, чтобы работать со скоростью 1000 кадров в секунду, у меня был специальный алгоритм для поиска небольших изменений в положении точек на основе простого «центроида» массы «белого». - person kenny; 28.05.2010

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

Посмотри это:

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

а также

http://bit.ly/shahab-vision

person Muhammad Shahab    schedule 19.09.2011

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

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

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

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

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

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

person Community    schedule 27.05.2010
comment
Да, вы правы, это очень хорошо изучено, может быть, даже слишком много, поскольку я мог найти тонны статей об этом. Проблема в том, что слишком много информации часто может сбивать с толку только в том случае, если вы не знаете, где искать и с чего начать. Ссылки, которые вы предоставили, кажутся интересной отправной точкой, я думаю, мне будет что почитать на выходных... Фильтр Калмана, в частности, кажется хорошей вещью для использования. - person nico; 27.05.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 может быть таким же простым, как отслеживание минимального/максимального положения чего-либо более яркого, чем тот же порог.

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

person phkahler    schedule 27.05.2010
comment
Я отслеживаю изображения флуоресцентной микроскопии, но ваша идея все равно применима! - person nico; 27.05.2010

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

Начните с обнаружения больших двоичных объектов, как говорит genpfault.

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

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

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

person Rex Kerr    schedule 28.05.2010