Базовый алгоритм: прямой поиск одного изображения на другом, поиск ключевых точек эталона на входном изображении.
Задание: на вход поступает два изображения: эталон и изображение, на котором будет производиться поиск. На выходе программа должна строить рамку в виде четырехугольника в области, где с наибольшей вероятностью находится искомый объект.
Задачи:
Задача нахождения объектов на изображении – задача машинного обучения, в рамках которой выполняется определение наличия или отсутствия объекта определенного домена на изображении, нахождение границ этого объекта в системе координат пикселей исходного изображения.
В данной работе будет реализован алгоритм детекции объектов. Программный код написан в Google Collaboratory на языке Python.
В первой половине работы использовался алгоритм прямого поиска изображения с помощью библиотеки OpenCV. Для этого бралось изображение объекта на нейтральном фоне, вырезался фрагмент и сохранялся под другим именем. На вход подавалось два изображения, которые алгоритм сравнивал и выводил рамку вокруг детектированного объекта.
Существует несколько методов matching template, в данной работе использовался cv.TM_CCOEFF (находятся глобальные максимумы с помощью функции minMaxLoc). Отмечу, что на вход может подаваться как черно-белое, так и цветное изображение, однако на выходе оно все равно преобразуется в одноканальное. Во второй половине работы опробован алгоритм ORB (Oriented FAST and Rotated BRIEF).
Алгоритм работает следующим образом:
Для осуществления Template Matching считаем исходное изображение и вырезанный фрагмент, найдем объект, затем выведем итоговые изображения.






















На вход подавались 10 + 1 фотографий, сделанных с разных ракурсов. Также в предпоследнем изображении был выключен искусственный свет, а в последнем – вручную сделана обработка изображения (изменен контраст, насыщенность, яркость цвета). На выходе алгоритм выдавал рамку вокруг детектированного изображения. Можно заметить, что прямой поиск изображения дает лучшие результаты.
Составим сравнительную таблицу, чтобы подтвердить гипотезу о лучшей работе прямого поиска. Будем использовать трех бальную шкалу, где 2 – объект полностью помещен в рамку, 1 – объект частично помещен в рамку (обрезана часть детектируемого изображения, очень большие «лишние» поля вокруг), 0 – изображение не найдено или очень большие границы рамки.
№ | Положение объекта | Template Matching | ORB |
---|---|---|---|
0 | Исходное изображение | 2 | 1 |
1 | Снизу справа | 2 | 0 |
2 | Сверху справа | 2 | 0 |
3 | Сверху слева | 2 | 1 |
4 | Снизу слева | 2 | 1 |
5 | Вид сверху | 1 | 0 |
6 | Вид с правого бока | 2 | 1 |
7 | Вид с левого бока | 2 | 1 |
8 | Вид снизу | 1 | 2 |
9 | Вечернее освещение | 2 | 1 |
10 | Ручное изменение цвета | 2 | 1 |
Сумма | 20 | 9 |