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

18

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

На данный момент мне удалось захватить картинку каждую минуту и ​​загрузить ее через PHP-скрипт на мой сервер. Теперь я хотел бы сравнить текущее изображение и изображение 1 минуту назад и определить, входил ли кто-либо в комнату. В общем, мне нужно сравнить разницу пикселей на картинке (но также с учетом того, что облако может просто сказать привет и изменить яркость в течение одной минуты)

Кто-нибудь знает, как добиться этого или какой-то документ для чтения?

Waza_Be
источник
4
Я сделал что-то подобное несколько лет назад. Моя техника состояла в том, чтобы разбить изображение на части, скажем, сетку 20 * 20, найти значение для среднего цвета в каждой ячейке (взяв средний цвет в каждом пикселе в этой ячейке) и сохранить его. Сделайте то же самое для следующего изображения, и если будет достаточно (я оставлю это допуск до вас) разницы в средних цветах, вы можете принять движение. Не делайте допуск настолько тонким, что он заметит небольшие изменения в свете или проходящих тенях и т. Д.
1
Вот интересный пост на эту тему, который вы можете найти полезным codeproject.com/KB/audio-video/Motion_Detection.aspx
CHDK также разбивает изображение на сетку. chdk.wikia.com/wiki/UBASIC/Scripts:_AdaptiveMD Для обнаружения движения, а не обнаружения изменений освещения, я бы сказал, что изменение множества ячеек сетки не является движением, в то время как изменение только нескольких ячеек сетки.
эндолит

Ответы:

10

Мне кажется, что вы ищете метод фонового вычитания. С шумными изображениями и изменением условий освещения это может быть нетривиальным. Современным уровнем техники для этого является матричное представление низкого ранга, но для этого требуется не два, а много (~ дюжина) изображений. Далее следует некоторая сложная математика: каждое изображение рассматривается как вектор пикселей, векторы объединяются в матрицу, и эта матрица разлагается на матрицу низкого ранга и остаток. Низкоранговые столбцы матрицы являются фоном, а остатки - движущимися объектами. Есть некоторые реализации с открытым исходным кодом, но только для факторизации, а не для полного конвейера изображений IIRC

Вот статья и код для матричной факторизации http://www.ece.rice.edu/~aew2/sparcs.html

Вот обзор из блога CS и ссылка на другой код:

https://sites.google.com/site/igorcarron2/matrixfactorizations

http://nuit-blanche.blogspot.com/search/label/MF

Обзор некоторых других методов: http://www.vis.uni-stuttgart.de/uploads/tx_vispublications/Brutzer2011-2.pdf

mirror2image
источник
1
ты специально сделал это CW?
Lorem Ipsum
1
Что значит "CW"?
mirror2image
Ааа, вики-вопрос. Я подумал, что было бы неплохо представить эту совершенно новую технику, которая делает практические вещи. Не стесняйтесь удалить его, если вы не согласны. Также другие люди могут иметь больше опыта с этой технологией - я только начал заниматься этим.
mirror2image
CW - это вопрос сообщества вики. Это означает, что вы не получите репутацию (в данном случае 4x10 = 40) за ответ на ваш ответ. Некоторые люди намеренно делают свои ответы, как это, но чаще всего, это случайно. Я отменил это для вас, чтобы вы получили свой представитель. Сейчас 181 из 126 :)
Lorem Ipsum
5

Помните: есть тени (не только яркость).

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

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

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

Техника «матричной факторизации» НЕ поможет вам сделать свою работу! Работа, на которую ссылается @ mirror2image, посвящена вычитанию фона, но НЕ основана на «матричной факторизации».

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

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

Лучшая ссылка на вашу исследовательскую работу (а также относительно более простую, если вы действительно хотите ее реализовать) будет такова: система W4 найдет ее здесь и увидит статью Пикарди здесь как более подробный обзор других методов в системе.

Есть много проблем, которые относятся к этой проблеме:

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

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

  3. Фон может быть сложным, как машут деревья или море и т. Д.

  4. Фон может иметь медленное или внезапное изменение освещения, когда ранее «выученный» фон затем адаптируется к новому.

Один из наиболее часто упоминаемых ориентировочных работ называется « Стенной цветок». Алгоритм показывает наилучший способ объединения различных таких сценариев для обеспечения надежного обнаружения движущихся объектов.

Дипан Мехта
источник
2

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

Я думаю, цветная гистограмма - хороший выбор для этого.

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


источник
Спасибо большое, буду ждать других решений, если не найду лучшего, приму ваше. К вашему сведению, я не хочу определять путь злоумышленника, так как для этого недостаточно 1 минуты, а просто отправить предупреждение - это здорово. Благодарю.
1
Будьте осторожны, некоторые злоумышленники могут закончить за 1 минуту! Сделайте как можно более частую проверку. Если ваша программа работает слишком медленно, уменьшите разрешение изображения.
1
Да, на самом деле я планирую делать снимки каждые 10 секунд и загружать их только тогда, когда я обнаруживаю злоумышленника, или каждую минуту, когда нет проблем.
1

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

К.В. Виджай Гириш
источник