Сравнение схожести двух изображений?

Здравствуйте коллеги!

С computer vision особенно никогда не сталкивался, но возникла несложная, на первый вгляд задача.


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


Хотелось бы чтобы на сервере висел процесс, который просматривает заданную директорию и при появлении нового снимка — сравнивает его с предыдущим. Если на снимке произошли более-менее значительные изменения — выполнить что-то.


Теперь загвоздка, как определить произошли ли изменения на снимке? Точно по пикселям считать — не вариант. Меня не интересует немного свинувшаяся ветка дерева. А вот например человек, проходящий недалеко от камер — интересен. Или машина, припарковавшаяся в полез зрения камеры. То есть хочется реагировать только на изменение более-менее крупных объектов.


Собственно как лучше всего будет рассчитывать подобные изменения, с учетом некоторой погрешности?
  • Вопрос задан
  • 16422 просмотра
Пригласить эксперта
Ответы на вопрос 3
artyomst
@artyomst
Например один из способов — определить область на которой могут происходить изменения, например небо вас не интересует и вы не рассматриваете пиксели по высоте выше определенной границы, сжимаете изображение например в 10 раз по высоте и ширине. У вас имеется сжатая обрезанная фотография в овремени t и второая во времени t+1, далее можно получить яркостную характеристуку каждого цвета пиксела Y = 0.299 * R + 0.587 * G + 0.114 * B ( это чтобы упростить немного расчет), получится две матрицы из этих яркостных характеристик — одна для фотки t и вторая для t+1. Вычитаете из матрицы t+1 матрицу t, получаете разницу, получите набор элементов, которые отличаются, при небольших изменениях должны быть близкие к 0 элементы. Дальше уже можно расчитать средне квадратичное отклонение, ну или что-нибудь придумать.
Ответ написан
vanxant
@vanxant
Простейшая задача на самом деле:)
1. Выделяете канал яркости (формулу дал artyomst).
2. Жмете ваши мегапиксели до мини-ногтя 100х75 или типа того; на самом деле тут даже 36х24 будет достаточно.
3. Сравниваете попарно пиксели предпоследнего и последнего изображения. Вполне сойдет абсолютное значение разности яркостей ( abs(a-b) ). Считаете количество пикселей, яркость которых изменилась больше чем на, допустим, 5 или 10 единиц. Меньшие изменения могут быть вызваны шумами камеры и естественным изменением освещения с ходом времени.
4. Смотрите, сколько процентов от ваших пикселей резко изменилось. Если больше какого-то предельного процента, скажем 1% или 5% — включается паника-паника. Но тут уже надо смотреть по ситуации, для универсального решения надо выносить этот параметр в настройки программы.
Ответ написан
Комментировать
@niko83
Используйте ImageMagick. Там есть специальный инструмент для этого www.imagemagick.org/script/compare.php

(в GraphiksMagick наверняка тоже есть такая фишка)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы