Skip to content

Commit ce273ab

Browse files
committed
finish course work! 🎉
* add development part * improve originality to 88.93% * fix bugs
1 parent bff3715 commit ce273ab

9 files changed

+89
-15
lines changed

development.tex

+64
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
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+
Анализируя алгоритм и результаты поиска: итоговое время в разы лучше полученного экспериментально в начале исследований. Но этого всё ещё не достаточно, для стабильной работы в реальном времени на борту беспилотного летательного аппарата. Требуется оптимизация и доработка алгоритма поиска.

docs/course_work.pdf

1.34 MB
Binary file not shown.

practice.tex experiments.tex

+6-4
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ \chapter{ЭКСПЕРИМЕНТАЛЬНЫЕ РЕЗУЛЬТАТЫ}
22

33
\section{Подготовка данных}
44

5-
Для проведения экспериментов были получены данные видеосъёмки дроном Phantom DJI 4. Из этих видеороликов мной были подготовлены \textbf{data set'ы} (наборы данных). Экспериментально было установлено, что для того чтобы получить $70\%$ перекрытие на соседних изображениях (необходимое условия для хорошего сопоставления) требуется нарезать видео с частотой хотя бы 1 кадр в 2секунды. Отдельно рассматривались прямые и обратные (в другую сторону) пролеты БПЛА над одной и той же местностью, для возможности имитации задачи возвращения дрона домой по построенной карте.
5+
Для проведения экспериментов были получены данные видеосъёмки дроном Phantom DJI 4. Из этих видеороликов мной были подготовлены \textbf{data set'ы} (наборы данных). Экспериментально было установлено, что для того чтобы получить $70\%$ перекрытие на соседних изображениях (необходимое условия для хорошего сопоставления) требуется нарезать видео с частотой хотя бы 1 кадр в 2 секунды. Отдельно рассматривались прямые и обратные (в другую сторону) пролеты БПЛА над одной и той же местностью, для возможности имитации задачи возвращения дрона домой по построенной карте.
66

77
\begin{figure}[h]
88
\centering
@@ -13,7 +13,7 @@ \section{Подготовка данных}
1313

1414
\section{Matching эксперименты}
1515

16-
Как первое приближение (начальные данные от которых впоследствии можно будет отталкиваться) был взят следующий простой алгоритм: каждый снимок сделанный на прямом пролете (кривая $AB$) сопоставляется с каждым снимком из обратного (кривая $BA$). Для $n$ прямых снимков и $m$ обратных получаем $n*m$ сравнений. В итоге для $\forall$ пары снимков $\{i, j | i=\overline{1,n}, j=\overline{1,m}\}$ получаем нейкий \textbf{score} (результат) совпадения их ключевых точек, на основе которого можно судить соответствуют ли эти снимки одной и той же точке в пространстве.
16+
Как первое приближение (начальные данные от которых впоследствии можно будет отталкиваться) был взят следующий простой алгоритм: каждый снимок сделанный на прямом пролете (кривая $AB$) сопоставляется с каждым снимком из обратного (кривая $BA$). Для $n$ прямых снимков и $m$ обратных получаем $n*m$ сравнений. В итоге для $\forall$ пары снимков $\{i, j | i=\overline{1,n}, j=\overline{1,m}\}$ получаем какой-то \textbf{score} (результат) совпадения их ключевых точек, на основе которого можно судить соответствуют ли эти снимки одной и той же точке в пространстве.
1717

1818
Мной была написана реализация этого алгоритма на языке программирования $Python$ используя \hyperref[itm:sift]{SIFT [\ref{itm:sift}]} и \hyperref[itm:orb]{ORB [\ref{itm:orb}]} в реализации \hyperref[itm:opencv]{OpenCV [\ref{itm:opencv}]}. В качестве параметров скрипт принимает название алгоритма и максимальное количество ключевых точек, которые будут выделятся на изображении.
1919

@@ -31,7 +31,9 @@ \section{Matching эксперименты}
3131
\label{fig:matches}
3232
\end{figure}
3333

34-
Варьируя количество выделяемых ключевых точек на разных алгоритмах были поставлены эксперименты. Для визуализации качества сопоставления были построены \textbf{heatmap'ы} (тепловые карты) - диаграммы показывающие насколько хорошо совпадает изображение $x_i$ с $x_j$ (расположены соответственно на осях абсцисс и ординат). Сопоставление будем считать хорошим, если на диаграмме будет точно прослеживаться траектория: так как при пролётах туда-обратно мы должны получать, что $x_0$ и $y_n$, $x_1$ и $y_{n-1}$ ... и т.д. изображают одну и ту же точку пространства. Также анализировалось время работы программы. Полученные результаты на наборах 40x32 изображений (1280 сравнений) представлены в виде \textit{алгоритм - количество точек - время работы} на рисунке \ref{fig:heatmaps}
34+
Варьируя количество выделяемых ключевых точек и используя разные алгоритмы были поставлены эксперименты. Для визуализации качества сопоставления были построены \textbf{heatmap'ы} (тепловые карты) - диаграммы показывающие насколько хорошо совпадает изображение $x_i$ с $y_j$ (расположены соответственно на осях абсцисс и ординат). Чем выше score сопоставления $x_i$ с $y_j$ изображения, тем \quotes{теплее} этот пиксель на диаграмме.
35+
36+
Сопоставление будем считать хорошим, если на диаграмме будет точно прослеживаться траектория: так как при пролётах туда-обратно мы должны получать, что на $x_0$ и $y_n$, $x_1$ и $y_{n-1}$ ... и т.д. видны одни и те же точки пространства. Также анализировалось время работы программы. Полученные результаты на наборах из 40x32 изображений (1280 сравнений) представлены в виде \textit{алгоритм - количество точек - время работы} на рисунке \ref{fig:heatmaps}
3537

3638
\begin{figure}[h]
3739
\centering
@@ -66,6 +68,6 @@ \section{Выводы}
6668

6769
Анализируя диаграммы (Рисунок \ref{fig:heatmaps}) видно, что при малом количестве выделяемых ключевых точек прослеживается траектория полёта. Причём, что $SIFT$ даёт много ложных сопоставлений при очень большом времени работы - 3,5 часа против 20 минут у $ORB$. Однако при увеличении точек совпадения \quotes{размазываются} по всей диаграмме, это значит, что ошибка растёт и нужно улучшать методы feature extraction для получения лучших ключевых точек.
6870

69-
Учитывая время работы и полученные результаты на большом числе точек навигация с использованием этого алгоритма, конечно же, не представляется возможной. Однако мы получили первое приближение, решения \quotes{в лоб} от которого можно отталкиваться и сравнивать с ним результаты будущих исследований.
71+
Учитывая время работы и полученные результаты при большом числе извлекаемых точек навигация с использованием этого алгоритма, конечно же, не представляется возможной. Однако мы получили первое приближение, решение \quotes{в лоб} от которого можно отталкиваться в дальнейшем и сравнивать с ним результаты будущей работы.
7072

7173
\newpage

images/appa-options.png

163 KB
Loading

images/appa.png

852 KB
Loading

images/sfm.png

516 KB
Loading

0 commit comments

Comments
 (0)