|
| 1 | +\chapter{РАЗРАБОТКА ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ} |
| 2 | + |
| 3 | +\section{Выбор технологий} |
| 4 | + |
| 5 | +К разрабатываемому приложению были поставлены следующие требования: высокая производительность, удобный и кроссплатформенный пользовательский интерфейс, минимум зависимостей. Для выполнения процесса \textbf{Structure From Motion} была выбрана реализация, от Криса Суини (\textit{Chris Sweeney}) - библиотека проективной геометрии с открытым исходным кодом \hyperref[itm:theia]{Theia [\ref{itm:theia}]}. Кристофер - исследователь Вашингтонского университета, занимается разработками в области компьютерного зрения и виртуальной реальности, имеет степень Ph.D., а также множество научных публикаций. Выбор именно этой библиотеки обусловлен несколькими причинами: легковесность (не имеет зависимостей от больших библиотек, таких как OpenCV или Boost), узкая специализация и направленность на решение конкретной задачи, реализация на С++, очень хорошая и подробная документация. |
| 6 | + |
| 7 | +Для написания графического пользовательского интерфейса отлично подходил \hyperref[itm:qt]{QT [\ref{itm:qt}]}. QT - это кроссплатформенный инструментарий разработки приложений на языке программирования C++. Qt позволяет запускать написанное с его помощью программное обеспечение в большинстве современных операционных систем (\textit{Windows, macOS, Linux}) путём простой компиляции программы для каждой операционной системы без изменения исходного кода. Также предоставлены обширные инструменты по быстрому и удобному созданию интерфейсов. |
| 8 | + |
| 9 | +\section{Разработка алгоритма поиска} |
| 10 | +Итак, после выполнения всех этапов Structure From Motion мы имеем 3d модель - реконструкцию поверхности. Модель представляет из себя набор точек пространства, также мы можем привязать к ним gps-данные. Цель - найти расположение нового снимка, не из исходного датасета, на построенной модели и, в последствии, найти геометрическое преобразование и определить точные координаты из которых был сделан искомый снимок. |
| 11 | + |
| 12 | +Для осуществления поиска по модели вместе с каждой 3d точкой сохраняется набор дескрипторов всех особых точек соответствующих этой, реальной точке. В итоге получается следующий алгоритм: |
| 13 | + |
| 14 | +\begin{enumerate} |
| 15 | + \item на вход поступает очередной снимок; |
| 16 | + \item находим ключевые точки и извлекаем соответствующие им дескрипторы; |
| 17 | + \item сравниваем полученные дескрипторы с сохранёнными в модели; |
| 18 | + \item находим камеру из исходного датасета, для которой имеем наилучшее сопоставление; |
| 19 | + \item находим геометрическое преобразование, с помощью которого искомый снимок проецируется на \quotes{лучшую} камеру; |
| 20 | + \item по известным gps-координатам исходной камеры и геометрического преобразования местоположение искомой камеры. |
| 21 | +\end{enumerate} |
| 22 | + |
| 23 | +Также, кроме одной камеры, возможно получение всей области, на которую накладывается искомый снимок. |
| 24 | + |
| 25 | +\section{Обзор приложения} |
| 26 | + |
| 27 | +На рисунке \ref{fig:appa} представлен интерфейс разработанного приложения. Модель - швейцарский карьер построенный на датасете взятом из открытых источников. |
| 28 | + |
| 29 | +\begin{figure}[h] |
| 30 | + \centering |
| 31 | + \includegraphics[width=1\textwidth]{appa.png} |
| 32 | + \caption{Appa - приложение для построения и визуализации 3d моделей, осуществления поиска по ним.} |
| 33 | + \label{fig:appa} |
| 34 | +\end{figure} |
| 35 | + |
| 36 | +В приложении реализован следующий функционал: |
| 37 | + |
| 38 | +\begin{itemize} |
| 39 | + \item создание / открытие проекта; |
| 40 | + \item просмотр датасета текущего проекта; |
| 41 | + \item извлечение ключевых точек; |
| 42 | + \item построение модели; |
| 43 | + \item визуализация модели; |
| 44 | + \item поиск по построенной модели. |
| 45 | +\end{itemize} |
| 46 | + |
| 47 | +Рассмотрим функционал немного подробнее. При создании проекта надо ввести имя проекта, путь к директории с изображениями и директорию для проекта. В этой директории будет создан конфигурационный файл содержащий всю информацию и с ним и будет ассоциирован проект. При визуализации модели красным отрисовываются положения исходных камер с которых видны ключевые точки. При выборе изображений на боковой панели слева точки выбранного изображения, которые попали в конечную модель подсвечиваются синим (см. рисунок \ref{fig:appa}). |
| 48 | + |
| 49 | +\begin{figure}[h] |
| 50 | + \centering |
| 51 | + \includegraphics[width=0.9\textwidth]{appa-options.png} |
| 52 | + \caption{Существует возможность задать различные параметры построения модели.} |
| 53 | + \label{fig:appa-options} |
| 54 | +\end{figure} |
| 55 | + |
| 56 | +При построении модели можно настроить такие параметры как: количество потоков в который будет выполнятся каждая часть процесса Structure From Motiom, тип дескриптора и детектора (в данный момент поддерживаются рассмотренный ранее \hyperref[itm:sift]{SIFT [\ref{itm:sift}]}, а также AKAZE), стратегия сопоставления снимков (Brute Force или Cascade Hashing). Остальные настройки касаются внутренних и внешних параметров камеры. (см. рисунок \ref{fig:appa-options}) |
| 57 | + |
| 58 | +После выполнения поиска ключевые точки модели сопоставленные с искомым снимком подсвечиваются красным. Рассматривая производительность: поиск на датасете из $127$ снимков, при извлечении порядка $5000$ ключевых точек на каждом изображении осуществляется, в среднем, за $40-50$ секунд. |
| 59 | + |
| 60 | +\section{Выводы} |
| 61 | + |
| 62 | +В этой главе была представлена проделанная практическая работа. Проанализированы новые технологии и решения. Получен результат работы - рабочее приложение, которое можно дорабатывать и развивать. В планах доведение приложение до дистрибуцируемой версии и распространение в свободном доступе. |
| 63 | + |
| 64 | +Анализируя алгоритм и результаты поиска: итоговое время в разы лучше полученного экспериментально в начале исследований. Но этого всё ещё не достаточно, для стабильной работы в реальном времени на борту беспилотного летательного аппарата. Требуется оптимизация и доработка алгоритма поиска. |
0 commit comments