УДК 004.932
Хамдамов У.Р.
Доцент
кафедры "Аппаратное и программное обеспечение систем управления в телекоммуникации" ТУИТ имени Мухаммада ал-Харазмий (Узбекистан, г. Ташкент)
Умаров М.А.
Ассистент кафедры "Программный инжиниринг" Самаркандский филиал ТУИТ (Узбекистан, г. Самарканд)
Умаров Х.А.
Студент
411-группы факультета "Компьютерный инжиниринг" Самаркандский филиал ТУИТ (Узбекистан, г. Самарканд)
МЕТОДЫ ОПРЕДЕЛЕНИЯ ОБЪЕКТОВ НА ИЗОБРАЖЕНИИ
Аннотация: В работе рассматриваются некоторые методы распознавания объектов на изображении, основанные на детекторах границ и каскадных классификаторах.
Ключевые слова: компьютерное зрение, OpenCV, детектор границ, матрица свёртки, детектор границ Кеннй, каскадные классификаторы, каскад Хаара.
Введение
Компьютерное зрение — это технология создания машин, способных производить обнаружение, отслеживание и классификацию объектов. Для обработки данных в ней применяются статистические методы, а также модели, построенные при помощи геометрии, физики и теории обучения. Компьютерное зрение широко применяется в управлении мобильными роботами, в средствах наблюдения, анализе медицинских изображений, а также в интерфейсе взаимодействия «человек — компьютер».
Основным разделом компьютерного зрения является извлечение информации из изображений или последовательности изображений. Одной из задач, решаемых этим разделом, является определение объекта интереса. Существует множество возможных решений этой задачи: поиск контуров, поиск дескрипторов и особых точек, использование нейросетей и т. д. В данной статье кратко рассматриваются методы обнаружения объекта на основании поиска контуров и использования каскадных классификаторов.
Более качественным и точным методом является детектор Канни. В 1986 году Джон Канни разработал детектор границ, оптимальный для трех критериев: низкий уровень ошибок, правильная локализация и минимизация откликов на одну границу.
В более развернутом смысле это означает, что детектор не должен выявлять ложные границы (например, на шумы), должен правильно и не фрагментировано определять линию границы, и лишь единожды реагировать на каждую границу, чтобы избежать появления широких полос. Алгоритм детектора Канни состоит из 5 шагов. Первый шаг — сглаживание. Оно используется, когда во избежание появления ложных границ требуется уменьшить количество шумов. Для этого часто используется размытие фильтром Гаусса или каким-либо матричным фильтром размытия. [3] Следующие два шага это нахождение градиентов и подавление не-максимумов. Для начала находятся вся градиенты яркости, для этого можно использовать, например, описанный выше оператор Собеля, но для того чтобы граница была четкой и понятной, она должна быть представлена тонкой линией. [1]
И последние этапы — это двойная пороговая фильтрация и трассировка области
неоднозначности. На данном шаге производится еще одна фильтрация ложных границ.
69
В детекторе границ Канни используется два порога: нижний и верхний. Пиксель, значение которого выше верхней границы, принимает максимальное значение, т. е. контур считается достоверным. Если значение пикселя не достигает нижнего порога — пиксель подавляется. Если его значение попадает в диапазон между порогами, то он принимает среднее значение, а решение о том, является ли он точкой границы, будет принято во время трассировки области неоднозначности. [2]
Задача трассировки сводится к распределению пикселей, получивших среднее значение. Если такой пиксель соприкасается с достоверным контуром, то его значение приравнивается к максимальному значению и он становится частью границы, в противном случае он подавляется.
В OpenCV 3.x и выше есть встроенная функция для фильтрации Канни — Canny(Mat src, Mat dst, int lowThreshold, int highThreshold, int kernelSize). Где src — входное черно-белое изображение, dst — выходное бинаризованное изображение с найденными границами, lowThreshold и highThreshold — нижний и верхний пороги, kernelSize — размер матрицыСобеля.
Рис. 1. Результат работы фильтра Кеннй Интересной разновидностью детекторов границ являются детекторы углов. Различают три категории детекторов углов: извлекающие информацию напрямую из интенсивности пикселей изображения, методы, основанные на определении контура изображения и использующие модели с интенсивностью в качестве параметров. Определение объекта при помощи каскадных классификаторов Каскадные классификаторы
Каскадирование является частным случаем ансамблевого обучения, основанного на объединении нескольких классификаторов, используя всю информацию, собранную с выхода из данного классификатора, в качестве дополнительной информации для следующего классификатора в каскаде. В отличие от ансамблей для голосования или штабелирования, которые являются многоэкспертными системами, каскадирование является многоступенчатым.
Каскадные классификаторы обучаются с несколькими сотнями «положительных» образцов отдельных объектов и произвольными «негативными» изображениями того же размера. После обучения классификатора его можно применить к области изображения и определить объект, о котором идет речь. Для поиска объекта во всем кадре окно поиска перемещается по всему изображению с некоторым нахлестом. Этот процесс чаще всего используется при обработке изображений для обнаружения и отслеживания объектов, в первую очередь для обнаружения и распознавания лиц.
Ансамблевые методы — это набор слабых классификаторов (под слабостью классификатора подразумевается, что его ошибка на обучение выборки менее 50 %, но более 0 %). Объединяя их предсказания можно достичь более высокой точности классификации объектов из тестовой выборки. [1]
Реализация каскада Хаара с применением технологии OpenCV.
OpenCV уже содержит много предварительно подготовленных классификаторов для распознавания лица, сохраненных в виде XML файла. Эти файлы XML расположены в папке opencv / data / haarcascades /. Ниже представлен официальный пример детектора лиц и глаз при помощи OpenCV.
Для начала требуется загрузить нужные классификаторы XML и входное изображение (или видео) в монохромном сером режиме.
Листинг 1. Загрузка изображения и каскадов import numpy as np import cv2
facecascade = cv2.CascadeClassifier('haarcascade JrontalfacedefauU.xmV)
eyecascade = cv2.CascadeClassifier('haarcascade_eye.xml')
71
img = cv2.mread('sachmjpg') gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) Листинг 1 (Конец). Загрузка изображения и каскадов
Затем происходит поиск лица на изображении с использованием загруженных классификаторов. Если лица найдены, то возвращаются их позиции, представленные объектами Rect (x, y, w, h). После получения данных о расположении лиц, создается ROI для каждого лица, и поиск глаз происходит только в этих ROI, так как в задаче распознавания лиц учитываются только изображения глаз, расположенные на лицах.
Листинг 2. Определение объекта при помощи каскадов faces = face_cascade.detectMultiScale(gray, 1.3, 5) for (x,y,w,h) in faces:
cv2. rectangl e(img,(x,y), (x+w,y+h),(255,0,0),2) roigray = gray[y:y+h, x:x+w] roicolor = img[y:y+h, x:x+w] eyes = eyecascade.detectMultiScale(roigray) for (ex,ey,ew,eh) in eyes:
cv2. rectangl e(roicol or,(ex,ey),(ex+ew,ey+eh),(0,255,0),2)
cv2. mshow('mg',mg)
cv2.waitKey(0)
cv2. destroyAllWindows()
Листинг 2 (Конец). Определение объекта при помощи каскадов
Рис. 2. Результат работы каскада Хаара.
Список литературы:
Основные термины (генерируются автоматически): USAN, SUSAN, изображение, классификатор, XML, детектор границ, оператор, оригинальное изображение, формула, компьютерное зрение.
Canny Edge Detection // OpenCV. URL: https://docs.opencv.org/ 3.3.1 /da/d22/tutorial_py_canny.html.
SUSAN Principle for Feature Detection // Oxford University. Wellcome Centre for Integrative Imaging. URL: https://users.fmrib.ox.ac.uk/~steve/susan/susan/ node2.html