Какой алгоритм я могу использовать для программирования процедуры сравнения изображений для обнаружения изменений (например, человек, попадающий в кадр веб-камеры)? - PullRequest
2 голосов
/ 08 марта 2012

У меня есть веб-камера, которая делает снимок каждые N секунд. Это дает мне коллекцию изображений одной и той же сцены с течением времени. Я хочу обработать эту коллекцию изображений по мере их создания, чтобы идентифицировать события, например, кто-то входит в кадр, или что-то еще происходит. Я буду сравнивать изображения, смежные во времени и фиксированные в пространстве - одну и ту же сцену в разные моменты времени.

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

Я хочу иметь возможность положительно определять парковку грузовика на месте происшествия, например, игнорируя изменения освещения от переходов солнца / облаков и т. Д.

Я провел несколько поисков и нашел несколько обзорных работ (например, Радке и др.), Но ничего, что на самом деле не дает алгоритмов, которые я могу вставить в программу, которую я могу написать.

Ответы [ 6 ]

1 голос
/ 28 марта 2012

Проблема, которую вы пытаетесь решить, действительно очень интересна!

Я думаю, что вам нужно атаковать его по частям:

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

Существует множество методов, которые я нашел очень полезными для инвариантности освещения (применяется для распознавания лиц): DoG-фильтрация (Разница по Гауссу)

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

Если у вас есть изображения, не зависящие от освещенности, вы можете сосредоточиться на части обнаружения. Если ваша проблема может позволить себе статическую камеру, которую можно обучать в течение определенного времени, вы можете использовать стратегию, аналогичную детекторам движения по тревоге. Большинство из них работают со средним тепловым изображением - в основном они записывают среднюю температуру «пикселей» вида комнаты и запускают сигнал тревоги, когда тепловая сигнатура сильно меняется от одного «кадра» к другому. Здесь вы будете работать не с температурами, а со средними, нормализованными по свету значениями пикселей. Это позволит вам со временем определить, какие области изображения имеют тенденцию к движению (например, листья дерева в ветреной среде) и какие области достаточно устойчивы на изображении. Тогда вы можете вызвать тревогу, когда большое количество пикселей, уже помеченных как стабильные, сильно изменяются от одного кадра к следующему.

Если вы не можете позволить себе тренировать обзор вашей камеры, я бы посоветовал вам взглянуть на TLD трекер из Zdenek Kalal . Его исследования направлены на отслеживание объектов с одним кадром в качестве обучения. Вероятно, вы могли бы использовать полустатический вид камеры (без присутствия посторонних объектов) в качестве отправной точки для трекера и пометить обнаружение, когда трекер TLD (сетка точек, где локальный поток движения оценивается с использованием алгоритма Лукаса-Канаде) не в состоянии отследить большое количество точек сетки от одного кадра до следующего. Этот сценарий, вероятно, позволит работать даже панорамирующей камере, поскольку алгоритм очень устойчив к нарушениям движения.

Надеюсь, что эти указатели помогут. Удачи и приятного путешествия! = D * * один тысяча двадцать-шесть

1 голос
/ 27 марта 2012
  1. Использование цветового спектрального анализа без яркости: когда Солнце на некоторое время садится, вы получите аналогичный результат, цвета не меняются (слишком сильно).

  2. Не идите на большие изменения, но быстрые изменения.Если в течение 10 минут яркость изображения изменяется на 10%, это означает обычный вечерний эффект.Но когда изменение составляет -5%, 0, + 5% в течение нескольких секунд, это быстрая смена.

  3. Не забудьте отрегулировать контрольные значения.

  4. Разделить изображение на более мелкие области.Затем, когда все регионы изменяются одинаково, вы знаете, это глобальное изменение, например эклипс или что, но если изменяются только параметры одного региона, то что-то там происходит.

  5. Используйте маски для создания умных регионов.Если вы смотрите улицу, отфильтровывает небо, деревья (унесенные ветром) и т. Д. Вы можете установить разные значения триггера для разных регионов.Области должны перекрываться.

  6. Особый случай региона - это линия.Линия (узкая область) содержит все меньше и больше однородных пикселей, чем плоская область.Отметьте, скажем, зеленый забор, его легко обнаружить, когда кто-то пересекает его, он делает большие изменения в линии, чем в плоской области.

  7. Если вы можете, измените мир IRL,Перекрасьте забор в странный цвет, чтобы создать цветовую гамму, которую легче идентифицировать.Нанесите метки на пол и стену, которые могут быть обнаружены программой, чтобы вы могли обнаружить, что что-то скрывает.

1 голос
/ 25 марта 2012

Нам пришлось столкнуться со многими из этих проблем в наших интерактивных инсталляциях.Трудно не получить ложных срабатываний, не имея возможности контролировать часть своего окружения (похоже, у вас будет некоторая степень контроля).В конце мы рассмотрели объединение некоторых методов и создали открытый программный продукт под названием OpenTSPS (Open Toolkit для восприятия людей в пространствах - http://www.opentsps.com).. Вы можете посмотреть на исходный код C ++ в github (https://github.com/labatrockwell/openTSPS/).

Мы используем «прогрессивное повторное изучение фона», чтобы приспособиться к изменяющемуся фону с течением времени. Прогрессивное повторное изучение особенно полезно в переменных условиях освещения - например, если освещение в пространстве меняется со дня на ночь. Это в сочетании с обнаружением капель работает довольно хорошои наш единственный способ улучшить это - использовать 3D-камеры, такие как Kinect, которые излучают ИК-сигнал и измерять его.

Существуют и другие алгоритмы, которые могут иметь значение, например SURF (http://achuwilson.wordpress.com/2011/08/05/object-detection-using-surf-in-opencv-part-1/ и http://en.wikipedia.org/wiki/SURF) но я не думаю, что это поможет в вашей ситуации, если вы точно не знаете тип того, что вы ищете на изображении.

Звучит как забавный проект. Удачи.

1 голос
/ 24 марта 2012

Я полагаю, что вы ищете Шаблон соответствия

Также я бы посоветовал вам посмотреть Открыть резюме

0 голосов
/ 27 марта 2012

если вы знаете, что изображение останется статичным, я бы порекомендовал:

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

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

3) Ваша камера способна к тепловизору? если это так, возможно, стоит поискать горячие точки на изображениях. Могут существовать алгоритмы для превращения вашей веб-камеры в тепловизор.

0 голосов
/ 08 марта 2012

Используйте одну из стандартных мер, таких как Средняя квадратичная ошибка , например.чтобы узнать разницу между двумя последовательными изображениями.Если MSE превышает определенный порог, вы знаете, что есть какое-то движение.

Также читайте о Оценка движения .

...