tgoop.com/dsinsights/267
Last Update:
Я одно время лидил команду VirtualSense по размещению рекламных билбордов в видео. Мы заменяли уже имеющихся билборды с подстройкой трехмерного положения и перспективы и размещали борды на ранее пустующих слотах. Поэтому, вспоминая прошлый опыт, сегодня хочу пройтись по 3D Computer Vision алгоритмом, с помощью которых решается такая задача.
Она формулируется, как сопоставление изображения с помощью ключевых точек. Задача сводится к поиску конкретного объекта на одном изображении с помощью другого, эталонного.
Для этого необходимы так называемые ключевые точки – характерные области изображения, которые помогают определить, насколько два объекта совпадают. Сопоставив между собой множество изображений сцены, мы сможем восстановить трёхмерную структуру объектов в ней. Но для этого важно иметь «хорошие» ключевые точки.
Также нужно ввести понятие дескрипторов - векторов, которые описывают точку и ее окружение. У разных ключевых точек они должны быть сильно различны, а у одинаковых – максимально схожи.
SIFT
Один из первых и самых известных алгоритмов для нахождения ключевых точек – это SIFT (Scale-Invariant Feature Transform). Его будем использовать, когда не требуется решить что-то сверхсложное и нужно быстро и легко найти ключевые точки.
▶️ Как работает?
Картинка сворачивается с фильтром (обычно гауссианой). Далее берут разность между двумя картинками с разным ядром. Потом на результатах находят экстремумы – области с наибольшей и наименьшей интенсивностью.
Далее, зная размер ключевой точки, мы можем посчитать дескрипторы и поворот точек. Для этого используем Histograms of oriented gradients (HoG). Для этого разбиваем область под ключевой точкой на 16 квадрантов, посчитаем градиенты по картинке, оставим только направления. Для каждого квадранта посчитаем гистограммы направлений, а потом сделаем конкатенацию гистограмм. Для поиска поворота ключевой точки найдём направление с наибольшим значением и будем считать, что это верх ключевой точки.
▶️ Почему SIFT может не справляться?
- Во-первых, сложные задачи, а порой даже довольно простые сцены, часто вызывают у него затруднения – для корректного срабатывания требуется большое пересечение между кадрами.
- Во-вторых, алгоритм не устойчив к изменению угла обзора. Даже если мы просто применим аффинное преобразование к изображению — качество упадёт.
- В-третьих, сложности возникают и с похожими паттернами: на одинаковом паттерне (обои, например) у разных ключевых точек будут одинаковые дескрипторы, из-за чего нормально сопоставить изображения не получится.
Зато SIFT быстрый, его легко запустить, и ему не нужен GPU. Поэтому он используется в качестве бейзлайн решения.
BY ML Advertising

Share with your friend now:
tgoop.com/dsinsights/267