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


18

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

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

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


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


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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.