- PVSM.RU - https://www.pvsm.ru -
Это предыстория и продолжение статьи: [1]
Дело было вечером...,все статьи на хабре были прочитаны, затеял «небольшой» проект по автономной ориентации робота на RaspberryPi 3. С железом проблем нет, собирается недорого из г-на и палок купленных на ебау деталек, камера с хорошей стеклянной оптикой(это важно для стабильности калибраций), привод камеры вверх, вниз и компас, гироскоп и тд прикрепленные к камере:
Существующие системы SLAM не устраивают, или по цене, или по качеству/скорости. Поскольку наработок деталей для Visual SLAM у меня много, решил шаг за шагом писать и выкладывать алгоритмы и код в открытый доступ, с обоснованием причин выбора тех или иных алгоритмов.
В целом план следующий (всё на C++, кроме последнего):
Выделение особых точек и их регистрация это критический шаг и по производительности и по аккуратности.Существующие (известные мне) алгоритмы не подходят(для данной платформы), или по скорости, или по аккуратности( precision)
У алгоритмов связывания(matching)точек есть 3 характеристики:
Поскольку связанные точки используются в дальнейшем для нахождения матрицы трансформации при помощи RANSAC метода сложность которого ~O((1/precision)^N) где N — минимальное число пар связанных точек необходимое для вычисления данной матрицы. Если вы ищите плоскость (homography matrix) в 3D (спроецированную в 2D), то N=4, если жесткую трансформацию 3D точек (fundamental matrix), то N=5-8. То есть если, например, precision = 0.1(10%), то для поиска homography вам потребуется десятки тысяч недешевых проб, а для fundamental миллионы. Поэтому был разработан и протестирован алгоритм с высоким precision.
Для проверок алгоритмов детектирования и связывания существует стандартный набор изображений предложенный Mikolajczyk и др. (включенный в дистрибуцию opencv opencv_extra)
В данном наборе 8 сетов изображений, каждый сет состоит из 6 картинок.
Первая картинка референсная. Остальные пять искаженные, с нарастающей величиной искажений. Каждый сет — для своего типа искажений: (Вращение, сдвиг, масштаб, выдержка, параллакс, размазывание, де-фокусировка, артефакты сжатия) Вот результаты для различных алгоритмов (SIFT,SURF,AKAZE,BRISK,ORB и разработанного BOEV(Bigraph Oriented Edge Voting)), вертикальная шкала — проценты (больше лучше) и горизонтальная номер картинки в сете (больше- сложнее). Справа от названия алгоритма — время исполнения сета (detection + decription +matching).
Set bark(scale+rotation) precision:
recall:
Set bikes(shift+smooth) precision:
recall:
Set wall (perspective distortion ) precision:
wall recall:
Видимые результаты регистрации на примере wall(красные — false positive, зеленые true positive)
Остальные картинки и исходный код github.com/sdima1357/bigraph_image_registration_demo [2] в поддиректории test.
Данный алгоритм показал себя в тестах очень достойно и будет использован в топик проекте.
Автор: Sdima1357
Источник [3]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/raspberry-pi/263354
Ссылки в тексте:
[1] Это предыстория и продолжение статьи:: http://habrahabr.ru/post/336494
[2] github.com/sdima1357/bigraph_image_registration_demo: https://github.com/sdima1357/bigraph_image_registration_demo
[3] Источник: https://habrahabr.ru/post/337214/
Нажмите здесь для печати.