УДК 004.93'1
Ледяев В.П. магистрант
факультет "Компьютерные системы и сети" Белорусский государственный университет информатики и радиоэлектроники Беларусь, г. Минск ОБНАРУЖЕНИЕ ДВИЖУЩИХСЯ ОБЪЕКТОВ С ПОМОЩЬЮ КОМПЬЮТЕРНОГО ЗРЕНИЯ И БИБЛИОТЕКИ OPENCV
В статье рассматривается способ обнаружения движущихся объектов, основанный на технологии компьютерного зрения с помощью алгоритма вычитания заднего плана.
Ключевые слова: компьютерное зрение, алгоритм вычитания заднего плана, OpenCV
Ledyaev V. candidate for a master's degree Faculty of Computer Systems and Networks Belarussian State University of Informatics and Radioelectronics
Belarus, Minsk
DETECTING MOVING OBJECTS WITH COMPUTER VISION AND OPENCV LIBRARY
The method of detecting moving objects, based on computer vision technology using the background subtraction algorithm is reviewed in the article
Keywords: computer vision, background subtraction algorithm, OpenCV
Компьютерное зрение стоит за некоторыми из самых интересных технологических достижений последних лет. От приложений, которые могут определить рак кожи не хуже дерматологов, до автомобилей с автопилотом, все это алгоритмы компьютерного зрения.
В данной статье будет рассмотрен способ обнаружения движущихся объектов, основанный на технологии компьютерного зрения без алгоритмов глубокого обучения.
Для этого будет использован язык программирования Python и библиотека OpenCV с достаточно простой идеей определения движения с помощью алгоритма вычитания заднего плана (background subtraction).
Работа состоит из нескольких этапов:
1. Объяснение главной идеи алгоритма вычитания заднего плана, который используется для определения переднего плана изображения.
2. Рассмотрения алгоритмов библиотеки OpenCV
3. Рассмотрение фильтров изображений бибилиотеки OpenCV
Алгоритмы вычитания заднего плана
Вычитание заднего плана - это основной шаг предварительной обработки во многих приложениях, основанных на компьютерном зрении. Например, счетчики посетителей, где статическая камера учитывает
количество посетителей, входящих или выходящих из комнаты или камеры дорожного трафика, учитывающие информацию о транспортных средствах.
Существует много различных алгоритмов для выделения переднего плана изображения, но главная их идея очень проста.
Для примера можно рассмотреть видео с камеры наблюдения жилой комнаты. В момент, когда в комнате никого нет, изображение на видео не меняется от кадра к кадру, оно статично. Назовем такое изображение задний план или background_layer. Таким образом для того, чтобы получить объекты, которые двигаются на изображении (foreground_objects) нужно взять разницу текущего кадра (сштепМтате) и заднего плана:
foreground_objects = current_frame - background_layer На картинке можно увидеть принцип работы данных алгоритмов.
currentframe
THRESHOLD
foreground mask
background model
В некоторых случаях, тяжело получить статическое изображение из-за изменения света, изменений положения одного объекта другим, изменений положения камеры и др. В таких случаях нужно сохранять какое-то количество кадров и пытаться выяснить, какие пиксели не изменяются от кадра к кадру, чтобы затем сделать их частью заднего плана. Ситуация усложняется, при появлении тени объектов. Так как тень движется вместе с объектом, то при простом вычитании тень также определится, как объект переднего плана.
Алгоритмы библиотеки OpenCV
Для решения данной задачи в библиотеке ОрепСУ было реализовано три алгоритма.
BackgroundSubtractorMOG - это реализация алгоритма представления модели фона смесью Гауссовых распределений. Используется метод для моделирования каждого фонового пикселя смесью К гауссовых распределений (К= 3-5). Веса смесей представляют временные пропорции, в течении которых их цвета оставались неизменными. Вероятные цвета фона -те цвета, которые более продолжительны по времени и более статичны.
BackgroundSubtractorMOG2 - улучшение предыдущего алгоритма. Одна важная особенность этого алгоритма в том, что он выбирает подходящее число Гауссовых распределений на каждый пиксель. Это
предоставляет лучшую адаптацию к изменениям освещения. Также в данной реализации есть возможность определения и отделения теней на изображениях.
BackgroundSubtractorGMG - данный алгоритм сочетает статистическую оценку фона изображения с попиксельной Байесовской сегментацией
Результат работы данных алгоритмов представлен ниже.
Оригинал:
BackgroundSubtractorMOG: BackgroundSubtractorMOG2: BackgroundSubtractorGMG:
Как видно из примеров, наибольшей точностью обладает алгоритм BackgroundSubtractorMOG2. Можно заметить, что на полученных изображениях есть шум в виде случайных точек. Для улучшения качества изображения применяется его фильтрация.
Фильтры изображений OpenCV Фильтры, предоставляемые библиотекой OpenCV значительно помогают избавиться от шума на изображениях. Рассмотрим каждый фильтр в отдельности.
Фильтр closing полезен при закрытии небольших отверстий внутри объектов переднего плана или небольших черных точек на объекте:
ф •
Фильтр opening используется для уменьшения шума рядом с объектом:
Фильтр dilation используется для увеличения объектов, что способствует объединению разорванных частей объекта:
Функция, используемая для фильтрации:
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3, 3))
# Заполняем маленькие промежутки
closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)
# Убираем шум
opening = cv2.morphologyEx(closing, cv2.MORPH_OPEN, kernel)
# Объединяем объекты
dilation = cv2.dilate(opening, kernel, iterations=5) dilation
Результат:
i
i
н
Заключение
В данной статье были рассмотрены алгоритмы вычитания фона, также, основанный на них, способ определения движущихся объектов.
Использованные источники:
1. https://en.wikipedia.org/wiki/Background subtraction
2. https://docs.opencv.org/3.2.0/d 1 /dc5/tutorial background subtraction.html
3. https://medium.com/machine-learning-world/tutorial-making-road-trafflc-counting-app-based-on-computer-vision-and-opencv-166937911660
4. https://www.pyimagesearch.com/2015/11/09/pedestrian-detection-opencv/
а