close

Вход

Забыли?

вход по аккаунту

Николас Спаркс;pdf

код для вставкиСкачать
МИНОБРНАУКИ РОССИИ
ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
Факультет информатики
Кафедра теоретических основ информатики
УДК 004.94
ДОПУСТИТЬ К ЗАЩИТЕ В ГАК
Зав. кафедрой, доцент, к.т.н.
________________ А.Л.Фукс
«___» ___________ 2014 г.
Углов Арсений Сергеевич
РАЗРАБОТКА МЕТОДА ОДОМЕТРИИ НА ОСНОВЕ МЭМС СЕНСОРОВ И АНАЛИЗА
ВИДЕОПОТОКА
МАГИСТЕРСКАЯ ДИССЕРТАЦИЯ
на соискание степени магистра
по направлению подготовки
010300 «Фундаментальная информатика и информационные технологии»
Руководитель ВКР, доцент
кафедры теоретических основ
информатики, к.ф.-м.н.
____________ А.И.Попков
подпись
«_____»___________ 2014 г.
Автор работы
студент группы № 1427
_____________ А.С.Углов
подпись
Электронная версия магистерской диссертации
помещена в электронную библиотеку.
Администратор электронной
библиотеки факультета
_____________ Е.Н.Якунина
подпись
Томск 2014
Реферат
Магистерская диссертация 68 с., 31 рис., 23 источника, 2 прил.
ВИЗУАЛЬНАЯ ОДОМЕТРИЯ, АВТОНОМНАЯ НАВИГАЦИЯ,
ИНЕРЦИАЛЬНАЯ НАВИГАЦИЯ, OpenCV, МЭМС, .NET.
Объект исследования – метод автономной навигации на основе набора МЭМС
сенсоров и стереокамеры.
Цель работы – исследование задачи автономной навигации, и реализация метода
оценки движения наблюдателя в реальном времени по шести степеням свободы на основе
показаний закрепленного на нем набора МЭМС сенсоров, составляющих инерциальное
измерительное устройство, и анализа видеопотока, поступающего со стереокамеры. В
работе рассматривается случай, когда объекты вокруг наблюдателя находятся в покое, и
движется только он сам.
Методы исследования – аналитический, экспериментальный.
Результаты работы – разработан и реализован метод определения в реальном
времени перемещения и ориентации объекта в трехмерном пространстве на основе
показаний
закрепленного
на
нем
инерциального
стереокамеры.
2
измерительного
устройства
и
Содержание
Перечень терминов и условных обозначений .......................................................................................... 5
Введение....................................................................................................................................................... 6
1 Обзор существующих методов ............................................................................................................... 8
2 Определение ориентации с помощью МЭМС сенсоров .................................................................... 10
2.1 Определение ориентации по показаниям гироскопа ................................................................... 11
2.2 Определение ориентации устройства по показаниям акселерометра и магнитометра ............ 11
2.3 Комплементарный фильтр.............................................................................................................. 13
2.4 Низкочастотный фильтр ................................................................................................................. 14
2.5 Фильтрация и включение показаний гироскопа .......................................................................... 15
3 Определение линейного перемещения................................................................................................. 16
3.1 Формулировка задачи визуальной одометрии ............................................................................. 17
3.2 Калибровка одного модуля камеры ............................................................................................... 18
3.2.1 Модель проективной камеры .................................................................................................. 19
3.2.2 Проективная геометрия ........................................................................................................... 21
3.2.3 Искажения линзы ..................................................................................................................... 22
3.2.4 Гомография ............................................................................................................................... 23
3.2.5 Процесс калибровки ................................................................................................................. 25
3.3 Калибровка стереопары .................................................................................................................. 26
3.3.1 Эпиполярная геометрия ........................................................................................................... 27
3.3.2 Существенная матрица ............................................................................................................ 28
3.3.3 Фундаментальная матрица ...................................................................................................... 29
3.3.4 Вычисление взаимного расположения камер ........................................................................ 30
3.4 Ректификация .................................................................................................................................. 31
3.5 Триангуляция ................................................................................................................................... 34
3.5.1 Поиск соответствий.................................................................................................................. 36
3.6 Вычисление оптического потока ................................................................................................... 41
3.6.1 Выбор точек для обработки..................................................................................................... 41
3.6.2 Алгоритм Лукаса-Канаде ........................................................................................................ 42
3.7 Вычисление перемещения и вращения камеры ........................................................................... 43
4 Использование ориентации ИИУ в визуальной одометрии ............................................................... 46
5 Практическая реализация ...................................................................................................................... 48
5.1 Описание используемых устройств............................................................................................... 48
5.1.1 Стереокамера ............................................................................................................................ 48
5.1.2 Инерциальное измерительное устройство ............................................................................. 49
5.2 Программная реализация................................................................................................................ 50
3
5.2.1 Приложение для смартфона .................................................................................................... 50
5.2.2 Emgu CV .................................................................................................................................... 51
5.2.3 Архитектура приложения обработки данных ........................................................................ 53
5.2.4 Получение показаний ИИУ ..................................................................................................... 55
5.2.5 Обработка данных ИИУ .......................................................................................................... 56
5.2.6 Получение видеопотока ........................................................................................................... 57
5.2.7 Итерация метода визуальной одометрии ............................................................................... 59
5.2.8 Калибровка................................................................................................................................ 61
Заключение ................................................................................................................................................ 63
Список использованных источников и литературы .............................................................................. 64
Приложение А. Пользовательский интерфейс для работы с показаниями ИИУ. ............................... 66
Приложение Б. Пример результата калибровки стереокамеры. ........................................................... 68
4
Перечень терминов и условных обозначений
Одометрия – в данной работе термин употребляется для обозначения метода оценки
параметров движения объекта в пространстве. В частности, метод визуальной одометрии
проводит такую оценку на основе видеопотока, получаемого с закрепленной на объекте
видеокамеры.
МЭМС – микроэлектромеханическая система.
ИИУ – инерциальное измерительное устройство.
Sensor fusion – техника объединения показаний различных датчиков, измеряющих
различные величины, для повышения точности определения одной конкретной величины.
5
Введение
В наше время появляется все больше задач, где требуется точная оценка
перемещения устройства в трехмерном пространстве. Например, такой задачей является
создание дополненной реальности, где оценка перемещения и ориентации наблюдателя
необходима для корректного отображения виртуальных объектов относительно него.
Точности спутниковой навигационной системы для решения этой задачи недостаточно, а
использование внешних датчиков или источников сигнала, типа Wi-Fi или Bluetooth, с
заранее известным расположением в пространстве не всегда возможно, и область работы
такой системы дополненной реальности будет ограничена областью работы этих внешних
устройств. Для навигации беспилотных аппаратов на заранее неизвестной местности
также невозможно использование внешних устройств. Для решения подобных задач
используют методы автономной навигации или одометрии, основанные на использовании
показаний датчиков, закрепленных непосредственно на движущемся объекте.
Целью данной работы является исследование задачи автономной навигации, и
реализация метода оценки движения наблюдателя в реальном времени по шести степеням
свободы на основе показаний закрепленного на нем набора МЭМС сенсоров,
составляющих инерциальное измерительное
устройство, и анализа видеопотока,
поступающего со стереокамеры. В работе рассматривается случай, когда объекты вокруг
наблюдателя находятся в покое, и движется только он сам.
Инерциальное
измерительное
устройство
используется
для
определения
ориентации наблюдателя в пространстве. Оно состоит из трех микроэлектромеханических
(МЭМС) сенсоров: гироскопа, акселерометра и магнитометра. Для получения ориентации
устройства на основе показаний этих трех датчиков используется техника слияния
датчиков sensor fusion.
Для определения линейного перемещения используется метод визуальной
одометрии для стереокамеры. Этот метод заключается в анализе последовательности
кадров, получаемой с камеры в реальном времени, и определении параметров движения
этой камеры по движению изображений, наблюдаемых ей объектов. Ориентация,
получаемая с помощью ИИУ, используется для увеличения точности результатов
визуальной одометрии.
6
Таким образом, для достижения поставленной цели требуется решить следующие
задачи:
1. Произвести обзор существующих методов автономной навигации.
2. Изучить и реализовать алгоритм фильтрации и объединения показаний
сенсоров
ИИУ
для
определения
ориентации
объекта
в
трехмерном
пространстве.
3. Изучить алгоритм получения параметров стереокамеры и выбранный
алгоритм визуальной одометрии, в том числе алгоритмы, используемые на
промежуточных этапах обработки видеопотока: выбор точек на кадре для
обработки, вычисление диспаритета и оптического потока для выбранных
точек.
4. Выбрать
и
реализовать
подход,
использующий
ориентацию
объекта,
вычисленную на основе показаний ИИУ, для увеличения точности визуальной
одометрии.
5. Разработать и собрать установку, состоящую из измерительного блока
(стереокамера и ИИУ), блока обработки данных и канала связи между ними.
6. Разработать прототип программного обеспечения для получения показаний
датчиков измерительного блока и определения на их основе движения блока в
пространстве.
7
1 Обзор существующих методов
Существующие методы оценки перемещения наблюдателя в трехмерном
пространстве с использованием закрепленных на нем сенсоров можно разделить на
пассивные и активные. Эти методы основываются, соответственно, на активных и
пассивных сенсорах.
Активные сенсоры испускают определенный сигнал и регистрируют его
отражение от окружающих объектов, вычисляя расстояние до них. В качестве таких
сенсоров обычно используют лидары и RGB-D сенсоры, типа Microsoft Kinect, которые
определяют дальность с помощью проецирования на окружающие объекты определенного
регулярного шаблона. Также существуют звуковые активные сенсоры, определяющие
расположение объектов по отраженному звуковому сигналу.
Пассивные сенсоры, в отличие от активных, не излучают специальный сигнал, а
получают показания с помощью пассивного измерения. К таким датчикам можно отнести
МЭМС сенсоры, типа акселерометра или магнитометра, которые используются в методах
инерциальной навигации, а также видеокамеру, снимающую в различных диапазонах.
Активные методы позволяют достаточную точность оценки при затрате меньших
вычислительных ресурсов, однако работа активных сенсоров зависит от внешних условий,
которые могут вносить помехи и шумы в излучаемый сигнал, а также существует
проблема использования некоторых активных сенсоров одновременно, так как они могут
сбивать друг друга.
Инерциальные измерительные устройства, построенные на основе МЭМС
сенсоров, позволяют определить ориентацию устройства в глобальной системе координат,
например, относительно вектора ускорения свободного падения и направления вектора
магнитной индукции магнитного поля земли. Благодаря привязке к подобным
параметрам, в определении ориентации отсутствует проблема накопления ошибки, так как
можно провести промежуточную корректировку результата, когда устройство будет
двигаться равномерно или перейдет в состояние покоя. Для линейного перемещения такой
корректировки провести нельзя, поэтому в этом случае нужно решать проблему дрейфа
значения линейного перемещения со временем.
Методы, основанные на анализе видеопотока, поступающего с камеры,
называются
визуальной
одометрией.
Визуальная
одометрия
возможна
как
для
монокулярной камеры, так и для камеры, состоящей из нескольких модулей.
8
Монокулярная визуальная одометрия требует меньших этапов калибровки и может
использоваться на многих современных мобильных устройствах, которые обычно
обладают одной камерой высокого разрешения и имеют достаточно вычислительной
мощности. Однако этот метод, по сравнению со стереоскопической визуальной
одометрией, менее точен и требует большей вычислительной мощности. Использование
нескольких модулей камеры требует более тщательной калибровки на начальном этапе, но
в итоге приводит к более точным результатам. В этом методе ошибка может со временем
накапливаться как в значении текущей ориентации, так и значении линейного
перемещения. Для промежуточной корректировки можно использовать маркеры,
расположенные в заранее известном месте, хотя такой подход ограничит область
гарантированно корректной работы системы.
Сейчас набирают популярность методы одометрии на основе устройства Microsoft
Kinect. Это устройство оборудовано RGB камерой и инфракрасным излучателем и
детектором. Оно позволяет получать трехмерную карту обозреваемого пространства.
Методы одометрии основаны на сравнении таких карт в разные моменты времени. Эти
методы дают достаточно точные результаты, однако требуют наличия специального
проприетарного устройства.
Комбинирование различных подходов позволяет скомпенсировать недостатки
отдельных методов и получить более надежный результат.
9
2 Определение ориентации с помощью МЭМС сенсоров
Для определения ориентации наблюдателя в трехмерном пространстве в данной
работе используется набор из трех различных МЭМС сенсоров. Для объединения
показаний используется техника Sensor fusion, когда показания разных датчиков
объединяются определенным образом с целью получить один параметр[1]. В данном
случае этим параметром является вектор углов Эйлера или матрица поворота устройства в
трехмерном пространстве.
Набор используемых сенсоров, используемых в данной работе, которые
составляют ИИУ, состоит из трех датчиков:
1)
Акселерометр: этот сенсор показывает трехмерный вектор разности
между собственным ускорением устройства, и ускорением свободного падения g в
м/с2. Таким образом, когда устройство движется равномерно или находится в
покое, датчик показывает вектор ускорения свободного падения. В данной работе
рассматривается случай плавного движения устройства, таким образом, в
дальнейшем будем считать, что собственным ускорением устройства можно
пренебречь, и акселерометр при движении всегда показывает вектор ускорения
свободного падения.
2)
Гироскоп: показывает угловую скорость устройства по трем осям в
3)
Магнитометр: трехмерный компас. Показывает трехмерный вектор
рад/с.
магнитной индукции окружающего магнитного поля в μT.[2]
10
2.1 Определение ориентации по показаниям гироскопа
Так как МЭМС гироскоп показывает угловую скорость вращения устройства
вокруг своего центра по трем осям в системе координат устройства, то вычислить поворот
гироскопа относительно начального положения можно с помощью численного
интегрирования его показаний по времени, измеряя временной интервал между снятиями
показаний. Однако из-за шумов и погрешностей измерения и интегрирования в
окончательном результате будет со временем накапливаться ошибка, приводящая к
дрейфу получаемой ориентации (рис. 1)[3, 4]. Для решения этой проблемы показания
гироскопа пропускают через высокочастотный фильтр.
Рисунок 1. Дрейф показаний гироскопа
В связи с этим получаемые показания с сенсоров пропускаются через
комплементарный
фильтр[5],
который
сглаживает
показания
акселерометра
и
магнитометра и компенсирует дрейф измерений гироскопа. В процессе фильтрации
происходит объединение показаний всех сенсоров и вычисление ориентации устройства.
2.2 Определение ориентации устройства по показаниям акселерометра и
магнитометра
В отличие от гироскопа, акселерометр и магнитометр позволяют определить
ориентацию
устройства
в
глобальной
системе
координат.
Выберем
такую
правостороннюю глобальную систему координат, связанную с землей, что ось y
направлена по вектору ускорения свободного падения g , ось x направлена по вектору
проекции m' вектора магнитного поля m на плоскость, ортогональную к вектору g , ось z
является их векторных произведением (рис. 2).
ИИУ получает значения вектора магнитной индукции, ускорения свободного
падения и угловой скорости в собственной системе координат (рис. 2). Для определения
11
ориентации устройства в глобальной системе координат, нужно построить матрицу
перехода в глобальную систему координат.
Рисунок 2. Системы координат
Для начала построим ортонормированный базис глобальной системы координат в
системе координат устройства. Пусть g acc - это вектор ускорения свободного падения,
измеренный акселерометром, и mmag - это вектор магнитной индукции, измеренный
магнитометром. Найдем вектор, ортогональный к g acc и mmag .
mu  mmag  g acc
(1)
Проекция mmag на плоскость, ортогональную к g acc может быть найдена, как
m'mag  g acc  mu
(2)
Нормировав вектора, получим базис глобальной системы координат в системе
координат устройства
^
m'^ , g ^ , mu

 mag acc



12
(3)
Из векторов полученного базиса составляется матрица перехода Rt . Эта матрица
фактически представляет матрицу поворота устройства в глобальной системе координат,
что подходит для описания глобальной ориентации устройства. При необходимости, из
этой матрицы можно получить представление ориентации устройства в углах Эйлера или
кватернионе.
2.3 Комплементарный фильтр
На практике, необработанные показания акселерометра и магнитометра будут
иметь шумы и ошибки измерения, что приведет к неустойчивому результату, даже если
устройство будет находиться в покое.
Для
решения
этой
проблемы
получаемые
показания
акселерометра
и
магнитометра пропускают через низкочастотный фильтр. Этот фильтр убирает
высокочастотный шум, но увеличивает отклик на изменение ориентации в пространстве.
Для компенсации этой инертности используются показания гироскопа.
Комплементарный фильтр объединяет себе высокочастотный фильтр для
гироскопа и низкочастотный фильтр для акселерометра и магнитометра. В отличие от
работ[6, 3], где ориентация устройства описывается углами Эйлера, в данной работе
используется матрица поворота, построенная на основе векторов показаний сенсоров,
которая определяет ориентацию устройства в глобальной системе отсчета. Поэтому
комплементарный фильтр имеет несколько измененный вид (рис. 3), однако принцип его
работы остается прежним.
13
Рисунок 3. Комплементарный фильтр
Вначале каждой итерации работы фильтра с каждого сенсора снимаются текущие
показания, которые, вместе с результатами, полученными на предыдущей итерации,
поступают на вход фильтра.
2.4 Низкочастотный фильтр
Рассмотрим алгоритм работы низкочастотного фильтра на примере показаний
акселерометра. Пусть accnew - это вектор новых показаний акселерометра, а accold - это
профильтрованные показания акселерометра, полученные на предыдущей итерации.
Тогда низкочастотная фильтрация выглядит следующим образом:
acclow   low  accnew  1   low   accold
(4)
Где  low  0,1 - это коэффициент фильтрации. Чем больше этот коэффициент,
тем больше вклад новых показаний и отзывчивость на изменение ориентации и тем более
неустойчивым получается результат. И, наоборот, при уменьшении этого коэффициента
уменьшается влияние шумов, но результат становится более инертным и фильтр
медленнее реагирует на изменение ориентации.
Показания магнитометра фильтруются аналогичным образом.[3]
14
2.5 Фильтрация и включение показаний гироскопа
Пусть gyronew  [ xgyro , ygyro , zgyro ] - это вектор текущих показаний гироскопа. Из
него с помощью умножения на временной интервал между измерениями dt можно
получить вектор углов поворота angnew   ,  ,   .
На основе этих углов поворота вычисляется матрица Rgyro [7] для поворота
профильтрованных
на
предыдущей
итерации
векторов
акселерометра
accold
и
магнитометра magold :
accgyro  Rgyro  accold ,
(5)
mag gyro  Rgyro  magold .
(6)
Далее объединим полученные значения с прошедшими низкочастотный фильтр
показаниями акселерометра и магнитометра.
accres   gyro  accgyro  1   gyro   acclow
(7)
magres   gyro  mag gyro  1   gyro   maglow
(8)
Где  gyro  0,1 - это коэффициент фильтрации показаний гироскопа. Этот
коэффициент определяет вклад показаний гироскопа в окончательную ориентацию. Чем
выше этот вклад – тем чувствительнее фильтр к изменению ориентации, но и тем сильнее
влияние дрейфа гироскопа. При остановке устройства после продолжительного вращения
скорость приближения получаемой ориентации к корректному значению зависит от
вклада значения ориентации, полученного на предыдущей итерации работы фильтра.
Высокочастотный
фильтр
для
гироскопа
заключается
в
использовании
профильтрованных значений акселерометра и магнитометра на предыдущей итерации.[3]
На основе полученных профильтрованных векторов показаний акселерометра и
магнитометра accres и magres вычисляется матрица поворота, как было описано в разделе
2.2. В конце итерации работы фильтра результат работы фильтра сохраняется для
использования на следующей итерации.
magold  magres
(9)
accold  accres
( 10 )
15
3 Определение линейного перемещения
Второй частью задачи является определение линейного перемещения объекта по
трем осям. Единственный МЭМС сенсор, который можно использовать для этой задачи –
это акселерометр. Определить линейное перемещение можно с помощью двойного
численного интегрирования его показаний по времени. Однако в таком случае ошибка
будет накапливаться аналогично случаю с интегрированием показаний гироскопа[8][4].
При этом, если в случае определения ориентации накопление ошибки компенсировалось
показаниями остальных датчиков, то в задаче линейного перемещения такой возможности
нет. Поэтому для решения этой задачи решено было использовать метод визуальной
одометрии, который позволяет определить движение наблюдателя на основе анализа
видеопотока, получаемого с набора камер, установленных на устройстве.
Термин “визуальная одометрия” (visual odometry) был введен в 2004 году
Дэвидом Нистером. Такое название было выбрано из-за похожести метода на
классический метод одометрии, основанный на использовании данных о движении
приводов, для оценки перемещения.[9]
Визуальная одометрия основана на последовательном вычислении перемещения
камеры между новым и предыдущим кадрами и объединении этих перемещений для
получения траектории движения объекта в реальном времени.
Визуальная одометрия может работать как на монокулярной камере[10, 8], так и
на установке, состоящей из нескольких модулей[11, 12]. В случае с монокулярной
камерой, визуальная одометрия оказывается более сложной в вычислительном и
конструкционном плане (например, моделирование стереопары двигающейся по рельсе
камерой)[9]. В данной работе использовались методы визуальной одометрии для двух
камер, образующих стереопару.
Для обработки кадров стереокамеры использовалась библиотека OpenCV. В ней
реализованы эффективные алгоритмы для калибровки оптической системы, нахождения
оптического потока и триангуляции точек. Эти алгоритмы подробно описаны в книге [13].
В этой книге также приведено описание реализации этих алгоритмов в библиотеке
OpenCV и руководство по их использованию. Последующее описание алгоритмов
калибровки стереокамеры, поиска точек на кадре для обработки, вычисления оптического
потока, диспаритета и триангуляции для них будет приведено согласно этой книге.
16
3.1 Формулировка задачи визуальной одометрии
Наблюдатель движется в трехмерном пространстве. К нему жестко прикреплена
стереокамера, которая делает снимки одновременно с левого и правого модуля через
определенные известные промежутки времени. Для простоты положим, что система
отсчета наблюдателя совпадает с системой отсчета камеры. Для стереопары в качестве
системы координат камеры выбирается система координат левого модуля. Также
положим, что наблюдатель двигается в окружении статических объектов. Благодаря этому
ограничению можно в дальнейшем считать, что трансформация наблюдаемых камерой
объектов между двумя кадрами заключается в перемещении и вращении в системе
координат наблюдателя. Для более сложного случая, когда камера наблюдает другие
движущиеся в среде объекты, используются алгоритмы отделения этих объектов от фона
и оценки их перемещения, которые не рассматриваются в рамках данной работы.
Задачей
визуальной
одометрии
является
вычисление
преобразования,
описывающего движение камеры между двумя кадрами. Преобразования между двумя
последовательными кадрами k-1, k можно представить следующим образом:
t 
R
Tk ,k 1   k ,k 1 k ,k 1 
1 ,
 0
( 11 )
где Rk ,k 1 – матрица, описывающая поворот камеры между двумя кадрами,
t k ,k 1 – вектор перемещения камеры между кадрами.
Для определения всей траектории, которую прошла камера с начала отсчета до
момента измерения k , нужно последовательно применить преобразования T . Также, имея
последовательность
дополнительные
кадров
вычисления
и
соответствующие
для
уточнения
преобразования,
пройденной
можно
камерой
сделать
траектории.
Преобразования между кадрами вычисляются на основе сравнения двух наборов точек,
определенных для последовательных стереокадров. В случае 2-D-to-2-D производится
сравнение наборов двумерных точек в системе координат кадра. В случае 3-D-to-3-D
сравниваются два облака трехмерных точек, полученных путем триангуляции выбранных
точек на кадрах. А в случае 3-D-to-2-D производится сравнение набора трехмерных точек
для первого стереокадра с их проекциями на втором стереокадре [9]. В данной работе
используется метод сравнения 3-D-to-3-D, так в качестве источника наборов трехмерных
точек можно использовать трехмерные карты, получаемые от RGB-D сенсора, который
17
планируется использовать в качестве дополнительного датчика при дальнейшем развитии
работы.
Общий алгоритм визуальной одометрии выглядит следующим образом[9]:
0)
Калибровка стереопары (выполняется один раз перед началом работы
алгоритма)
(далее, этапы выполняются на каждой итерации алгоритма)
1)
Получение нового стереокадра.
2)
Нахождение
точек
на
каждом
из
двух
последовательных
стереокадров для триангуляции.
3)
Установление соответствия между выбранными точками на двух
стереокадрах. Для этого применяются алгоритмы вычисления оптического потока.
4)
Триангуляция выбранных точек для каждого стереокадра. Для
репроекции точек обратно в трехмерное пространство используются данные,
полученные на этапе калибровки.
5)
Вычисление трансформации Tk ,k 1 .
Для уточнения результата можно, если необходимо, провести локальную
корректировку[14].
3.2 Калибровка одного модуля камеры
Суть процесса калибровки заключается в определении параметров камеры, таких,
как фокусные расстояния модулей стереокамеры, параметры искажения их линз,
взаимное расположение и т.п., необходимых для произведения ректификации получаемых
стереокадров и триангуляции выбранной на кадре двумерной точки.
Процесс
ректификации искажает кадр таким образом, чтобы он соответствовал кадру, снятому
двумя выровненными проективными камерами. В процессе триангуляции вычисляются
координаты точки в трехмерном пространстве на основе координат ее проекций на
стереокадре. Эти процессы будут описаны далее.
18
3.2.1 Модель проективной камеры
В модели проективной камеры луч света от объекта сцены, не преломляясь,
проходит через отверстие в непрозрачной плоской стенке и падает на плоскость проекции,
на которой формируется изображение объекта. Причем от каждой точки объекта идет
только один луч. В результате плоскость, на которую проецируется изображение
(плоскость изображения), всегда находится в фокусе. Размер проекции объекта
определяется единственным параметром камеры - фокусным расстоянием. На рисунке 4
показано, как строится проекция изображения, где X – высота объекта, Z – расстояние
от объекта до камеры, f – фокусное расстояние камеры, x – высота проекции объекта,
которая может быть вычислена как
x f
X
Z
( 12 )
Для удобства представления, можно преобразовать эту модель, поменяв местами
плоскость камеры и плоскость проекции (рис 5).
Рисунок 4. Модель проективной камеры
19
Рисунок 5. Преобразованная модель камеры
Трехмерная точка Q  ( X , Y , Z ) проецируется на плоскость изображения в точку
q  ( x, y, f ) . Точка, в которой оптическая ось камеры пересекает плоскость изображения,
называется главной точкой. В физической камере главная точка не обязательно совпадает
с центром матрицы камеры. Для учета возможного несовпадения введем параметры c x и
c y . Тогда точка Q будет иметь проекцию с экранными координатами:
X
xscreen  f x    c x
Z
,
( 13 )
X
y screen  f y 
Z
( 14 )

  cy

.
Где f x и f y – это фокусные расстояния для осей x и y соответственно. Это
разделение необходимо, так как в реальных матрицах пиксели бывают не квадратные, а
прямоугольные. Таким образом
f x , например, представляет собой произведение
физического фокусного расстояния F линзы и размера s x элемента матрицы камеры. В
результате калибровки нельзя получить значения s x и s y , но можно получить параметры
f x  Fs x и f y  Fs y .
20
Параметры f x , f y , c x и c y называются внутренними параметрами камеры.
[13, pp. 370-373]
3.2.2 Проективная геометрия
Трансформация, которая проецирует точку Q с координатами ( X , Y , Z ) в точку
на плоскость проекции с координатами ( x , y ), называется проективной трансформацией.
Для работы с такой трансформацией удобно использовать однородную систему
координат. В такой системе точка в n-мерном пространстве выражается с помощью n+1
мерного вектора. Точки с пропорциональными координатами считаются совпадающими.
Таким образом, координаты проекции трехмерной точки на плоскость изображения будут
представлены трехмерным вектором ( wx , wy , w ). И для того, чтобы получить исходные
координаты, нужно вектор координат поэлементно поделить на w , получив ( x , y , 1 ).
Если w  0 , то такая точка будет лежать на бесконечности.
Внутренние параметры камеры f x , f y , c x , c y можно представить в виде матрицы
3x3. Тогда проекцию точки из физического пространства на плоскость изображения
можно представить следующим образом:
q  MQ ,
( 15 )
 x
q   y 
w
,
( 16 )
X 
Q   Y 
 Z 
,
( 17 )
 fx
M   0
 0
0
fy
0
cx 
c y 
1 
( 18 )
.
После этого преобразования w  Z , и для нормального значения координат нужно
разделить вектор ( x , y , w ) на Z, получив (
x y
,
, 1 ).[13, pp. 373-374]
w w
21
3.2.3 Искажения линзы
Так как линзы в реальных камерах обычно не обладают идеальной формой и
расположением относительно матрицы, то получаемое изображение будет подвергнуто
искажениям, которые нужно скорректировать, чтобы иметь возможность использовать
модель проективной камеры, описанную выше. Рассмотрим два вида искажений:
радиальное и тангенциальное.
Радиальное искажение возникает из-за того, что физическая линза имеет
неправильную форму. Например, в некоторых камерах используют не параболические, а
сферические линзы, которые проще в изготовлении. В результате возникает искажение
изображения, усиливающееся от центра к краям. Такое искажение используется,
например, для создания эффекта “рыбьего глаза”. На рисунке 6 представлена модель
такого искажения.
Рисунок 6. Радиальное искажение
Радиальное искажение увеличивается от центра к краям. В центре линзы
искажения нет. На практике, для обычных камер такое искажение мало, и его можно
представить двумя членами ряда Тейлора в точке r  0 . Для более сильного искажения
можно взять последующие члены. Скорректированные точки можно получить с помощью
следующих уравнений:
( 19 )
( 20 )
22
,где ( x , y ) – исходные координаты полученного изображения.
Тангенциальное искажение возникает из-за того, что линза в камере расположена
не параллельно плоскости матрицы (рис. 7).
Рисунок 7. Тангенциальное искажение
Тангенциальное искажение определяется двумя параметрами p1 и p 2 :
( 21 )
( 22 )
Таким образом, общая модель искажения характеризуется пятью параметрами,
которые составляют вектор искажения ( k1 , k 2 , p1 , p 2 , k3 ).
Остальные искажения, возникающие в оптической системе, вносят значительно
меньший вклад и их можно не учитывать.[13, pp. 375-378]
3.2.4 Гомография
В компьютерном зрении гомография определяется как проективное отображение
точек
одной
плоскости
на
другую.
Например,
таким
преобразованием
будет
проецирование точек плоского изображения-маркера, расположенного в трехмерном
23
пространстве, на плоскость изображения камеры (рис. 8). Это отображение можно описать
в виде матрицы H такой, что
( 23 )
( 24 )
( 25 )
где s – коэффициент масштабирования. Он является частью преобразования, но
его обычно явно выносят как множитель перед матрицей H .
Рисунок 8. Гомографическое преобразование
Гомографическое преобразование включает физическое преобразование и
проецирование на плоскость изображения.
Физическое преобразование состоит из вращения
R и перемещения t . Так как
мы работаем в однородных координатах, мы можем записать эти преобразования в виде
одной матрицы
24
( 26 )
Для операции проецирования используются введенные ранее
внутренние
параметры камеры M .
( 27 )
Тогда преобразование имеет вид
( 28 )
~
~
Рассмотрим точку Q' , которая представляет точку Q на плоскости маркера.
Окончательно, преобразование принимает вид:
( 29 )
,
H  M r1 r2
t ,
( 30 )
где r1 , r2 - это столбцы матрицы поворота R , и матрица H имеет размерность
3×3.
3.2.5 Процесс калибровки
Алгоритм калибровки оптической системы в OpenCV основан на использовании
изображения маркера с известными параметрами. Обычно используется изображение
шахматной доски с известным размером квадрата и их количеством, нанесенное на
ровную плоскую поверхность. Этот маркер снимается стереокамерой с разных ракурсов, и
полученный набор кадров подается на вход алгоритма калибровки.
В процессе калибровки в OpenCV для каждого снимка маркера вычисляется
матрица гомографии, содержащая поворот и перемещение по трем осям, а также
внутренние параметры камеры и параметры искажения, которые одинаковы для каждого
снимка. Преобразование поворота определяется тремя углами, а преобразование
перемещения - тремя интервалами по каждой оси. Таким образом, получается шесть
25
неизвестных внешних физических параметров. Проецирование шахматной доски в
четырехугольник на плоскости изображения дает восемь уравнений.
На каждом калибровочном кадре производится поиск углов квадратов. Алгоритм
поиска углов будет описан ниже. Для вычисления четырех внутренних параметров
камеры и пяти параметров дисторсии линзы составляется и решается система уравнений
на основе вычисленных для каждого кадра координат проекций углов квадратов и
соответствующих известных координат на плоскости маркера.
Предположим, мы имеем N углов и K снимков шахматной доски. Тогда K
изображений дает 2NK ограничений. Без учета параметров дисторсии линзы, на этом
этапе нужно получить четыре внутренних параметра и для каждого из K изображений
нужно найти по шесть параметров: три угла вращения и три координаты по каждой из
осей. Таким образом, для нахождения этих параметров нужно, чтобы 2NK  6K  4 , или
( N  3)K  2 . Так как для калибровки используется плоская шахматная доска с
одинаковыми квадратными клетками, то для каждого кадра N  4 . Таким образом
(4  3)K  2 , откуда следует, что для калибровки нужно использовать больше одного
кадра. Учитывая шумы и погрешности при нахождении углов, на практике используется
около десяти изображений доски, размером 7×8 и больше квадратов, снятой с
разнообразных ракурсов.[13, pp. 384-392]
3.3 Калибровка стереопары
В качестве модели стереокамеры удобно использовать представление каждого
модуля камеры в качестве проективной камеры, которые находятся на расстоянии
определенной базы друг от друга, их плоскости изображения лежат в одной плоскости и
их оптические оси параллельны и направлены в одну сторону (рис. 9). Однако в реальной
стереопаре трудно установить модули таким образом. Для этого выполняют процесс
калибровки стереокамеры, при котором вычисляются параметры для ректификации
получаемых стереокадров.
26
Рисунок 9. Модель стереокамеры
3.3.1 Эпиполярная геометрия
Пусть имеются две камеры, как показано на рисунке 10. Точка P проецируется на
плоскость изображения левой камеры в точку pl , и на плоскость правой камеры в точку
p r . Линия, соединяющая центры обеих камер, пересекает плоскости изображений этих
камер в эпиполярных точках (эпиполях) el и er соответственно. Таким образом, проекция
на плоскость правой камеры p r будет лежать на эпиполярной линии pr er . Аналогично,
проекция pl будет лежать на эпиполярной линии pl el . Эпиполярная плоскость для точки P
проходит через эту точку, и пересекает плоскости изображений левой и правой камер по
эпиполярным линиям, на которых лежат проекции этой точки.
27
Рисунок 10. Эпиполярная геометрия
Для
известных
координат
проекции pl
на
изображении
левой
камеры
соответствующая точка проекции p r на плоскости правой камеры будет лежать на
соответствующей эпиполярной линии.[13, pp. 419-421]
3.3.2 Существенная матрица
Существенная матрица E описывает отношение между точками проекции pl и
p r в физических координатах.
( 31 )
В качестве основной системы отсчета выберем систему отсчета левой камеры. В
этой системе отсчета координата наблюдаемой точки P равняется Pl , а правая камера
находится в точке T . В системе отсчета правой камеры точка P будет иметь координаты
( 32 )
,
28
где T  [Tx , Ty , Tz ] - это вектор перемещения между камерами, R - относительная
ориентация модулей.
Умножив уравнение ( 31 ) на Z l Z r / f l f r , получим
Pr EPl  0
( 33 )
T
.
Откуда E можно выразить, как
E  RS ,
 0

S   Tz
 T y

 Tz
0
Tx
( 34 )
Ty 

 Tx 
0 
( 35 )
.
3.3.3 Фундаментальная матрица
Фундаментальная матрица описывает отношение между точками проекции pl и
p r в экранных координатах. В фундаментальной матрице учитываются внутренние
параметры камеры, поэтому на практике используют именно эту матрицу.
Пусть ql и qr - это точки проекций на плоскость левой и правой камеры
соответственно. Так как q  Mp , где M – матрица внутренних параметров камеры, то
уравнение принимает вид
( 36 )
.
Отсюда фундаментальную матрицу можно выразить, как
( 37 )
,
( 38 )
.
[13, pp. 421-426]
29
3.3.4 Вычисление взаимного расположения камер
Как было показано ранее, точку P можно выразить как Pl  Rl P  Tl в системе
координат левой камеры, и Pr  Rr P  Tr в системе координат правой камеры.
Рисунок 11. Взаимное расположение камер
Эти точки в разных системах координат связаны следующим уравнением
( 39 )
.
Где R и T – это преобразования вращения и перемещения соответственно между
системами отсчета правой и левой камер (рис. 11). Эти параметры имеют следующие
отношения
( 40 )
,
( 41 )
.
Эти
уравнения
решаются
для
каждого
кадра
из
набора
изображений
калибровочной доски. Из-за ошибок округления и шумов результаты вычислений R и T
могут немного отличаться для каждого стереокадра. В библиотеке OpenCV для
30
определения окончательного значения этих параметров используется итеративный
алгоритм Левенберга-Марквардта.[13, pp. 427-428]
3.4 Ректификация
Процесс ректификации заключается в репроекции плоскостей изображения камер
таким образом, чтобы они находились в одной плоскости и строки пикселей обеих матриц
были параллельны (рис 12). Тогда эпиполярные линии для обеих камер будут лежать на
одной прямой, что упростит поиск соответствующих проекций. Вычисленное ранее
взаимное расположение камер R и T позволяет установить плоскости камер параллельно.
Теперь нужно разместить их в одной плоскости.
Рисунок 12. Ректификация
Так как существует бесконечное множество плоскостей, в которые можно
поместить плоскости левого и правого изображения, нужно ввести дополнительные
условия, такие как максимизация общего поля обзора обеих камер, минимизация
31
искажений и тому подобные. Эти условия определяются выбранным алгоритмом
ректификации. В библиотеке OpenCV представлены два алгоритма: алгоритм Ричарда
Хартли и алгоритм, который предложил Жан-Ив Бугейт. В этой работе используется
алгоритм Бугейта, так как он дает большую точность и меньшие искажения по сравнению
с алгоритмом Хартли.
Алгоритм Бугейта использует информацию о взаимном расположении камер R и
T , и основан на минимизации искажений, которые вносит ректификация при
трансформации исходного изображения, и максимизации общего поля обзора обеих
камер.[13, pp. 433-436]
Матрица поворота R разбивается на две матрицы rl и rr для левой и правой
камер соответственно. Каждая камера претерпевает половину исходного вращения, при
этом вектора их оптических осей оказываются параллельны вектору суммы изначального
направления этих осей.
Далее ищется преобразование Rrect для левой камеры, которое переместит ее
эпиполярную точку в бесконечность и сделает эпиполярные линии горизонтальными.
Матрицы для выравнивания камер вычисляются следующим образом:
( 42 )
,
( 43 )
.
Матрицы проекции для камер можно вычислить следующим образом:
( 44 )
,
,
( 45 )
где  r и 1 – это коэффициенты скошенности пикселей матриц левого и правого
модуля. У современных камер они обычно равны 0.
32
Матрица проекции проецирует точку с трехмерными однородными координатами
точку на плоскости с двухмерными однородными координатами ( 46 ).
( 46 )
Откуда экранные координаты проекции могут быть вычислены, как
( 47 )
После получения всех необходимых параметров для стереокамеры, вычисляется
карта корректировки, по которой значение каждого пикселя скорректированного
изображения
вычисляется
на
основе
интерполяции
пикселей,
лежащих
возле
соответствующей точки на исходном изображении.
Процесс преобразования исходного стереокадра для соответствия модели двух
сонаправленных проективных камер показан на рисунке 13.
Рисунок 13. Преобразование исходного изображения
33
[13, pp. 433-438]
3.5 Триангуляция
После всех преобразований, мы можем работать с полученным стереокадром, как
с кадром, полученным от описанной выше модели стереокамеры. Тогда расстояние до
точки по ее проекциям можно вычислить из уравнения ( 48 ) (рис. 14).
Рисунок 14. Вычисление глубины
( 48 )
Имея параметры камеры, можно спроецировать двумерную точку обратно в
трехмерное пространство с помощью матрицы репроекции Q ( 49 ). В качестве двумерной
точки выбирается точка левой проекции.
( 49 )
34
Все параметры, составляющие элементы этой матрицы, взяты для левой камеры,
кроме параметра c' x . Если оптические оси обоих модулей параллельны, то тогда cx  c' x ,
и правый нижний элемент матрицы равен нулю.
Имея двумерную точку в однородных координатах и значение диспаритета d
между координатами проекций, репроекция в трехмерное пространство может быть
записана в следующем виде:
.
( 50 )
Откуда трехмерные координаты могут быть получены, как
.
( 51 )
[13, p. 435]
Для стереокадра можно построить карту диспаритета (рис. 15). Для этого, для
каждой точки левого изображения ищется соответствие на правом кадре. Такое
соответствие может быть и не найдено. Это зависит от используемого изображения и от
структуры самого кадра. Затем, используя полученную карту, с помощью репроекции
можно построить трехмерную карту наблюдаемого участка пространства (рис. 16),
состоящую из облака трехмерных точек.
35
Рисунок 15. Карта диспаритета
Рисунок 16. Триангуляция точек стереокадра на основе карты диспаритета
3.5.1 Поиск соответствий
Считаем, что на этом этапе мы имеем исправленный, в соответствии с
полученными ранее параметрами, стереокадр. Все эпиполярные линии на обеих частях
кадра горизонтальны, поэтому поиск соответствия для точки левого кадра на правом
кадре будет происходить по той же экранной y координате, что существенно облегчает и
ускоряет алгоритм поиска. Исходный кадр перед поиском соответствий обычно переводят
в черно-белый формат для того, чтобы каждый пиксель имел только значение яркости.
36
Для поиска соответствий в OpenCV используется алгоритм, схожий с тем, что
предложил Курт Конолидж. Этот алгоритм использует окно суммы абсолютных разностей
(sum of absolute difference, SAD).
Три основных этапа алгоритма:
1)
Предварительная фильтрация для нормализации яркости и усиления
выраженности текстуры изображения.
2)
Поиск
соответствия
по
горизонтальной
эпиполярной
линии,
используя SAD окно.
3)
Фильтрация для удаления ложных соответствий.
На этапе предварительной фильтрации алгоритм проходит квадратным окном с
нечетным значением стороны. Значение центрального пикселя I c в окне заменяется на
_




minmax I c  I , I cap , I cap  ,




где
( 52 )
_
I - это среднее значение интенсивности в окне, I cap - это целый
положительный коэффициент, значение которого по умолчанию равно 30.
При поиске соответствия окно скользит горизонтально по правому кадру, ища
наиболее подходящую точку с помощью функции соответствия. Соответствие может быть
найдено, если точка находится в поле видимости правой камеры, и изображение имеет
достаточно выраженную текстуру. Соответствующая точка на правом изображении
должна находиться левее этой точки на левом изображении (рис. 17). Для алгоритма
задается значение минимального диспаритета, которое определяет смещение начальной
точки поиска по горизонтали относительно координат рассматриваемой точки на левом
изображении. Количество значений разности определяет длину отрезка в пикселях, по
которому будет производиться поиск из начальной точки.
37
Рисунок 17. Поиск соответствия
Установка
этих
параметров
формирует
гороптер
–
объем
пространства, который покрывается диапазоном поиска алгоритма (рис. 18).
38
трехмерного
Рисунок 18. Гороптер
На рисунке 18 горизонтальные линии представляют плоскости, точки которых
будут проецироваться с одинаковым диспаритетом. Минимальный диспаритет определяет
максимальную
глубину,
которую
может
иметь
спроецированная
в
трехмерное
пространство точка. Количество значений разности определяет диапазон возможных
значений глубины при заданной верхней границе. Вне этого диапазона глубина не будет
найдена.
Наилучшее соответствие проекций ищется, как минимальная сумма модулей
разностей яркости пикселей в окне левого изображения и скользящего окна правого
изображения. Пусть имеется окно 3х3, и длина поиска равна 5 (рис. 19).
39
Рисунок 19. Сумма абсолютных разностей
Проходя окном по диапазону поиска, получим следующие значения SAD: 20 в
левом положении окна, 25 в центральном и 17 в правом. В качестве точки правой
проекции выбирается центр окна с наименьшим значением SAD. В этом примере
наименьшее значение имеет окно в правом положении.
После
нахождения
подходящей
точки, выполняется
отсеивание
ложных
соответствий. Для этого вычисляется значение “уникальности” ( 53 ) найденной точки
uniqueness
SADmatch  SADmin
,
SADmin
( 53 )
где SADmatch - это значение SAD для окна найденной точки, SADmin - это
минимальное значение SAD на всем участке поиска. Соответствие считается ложным,
если значение уникальности меньше заранее заданного порогового значения.
Когда окно оказывается на границе объектов с разной дальностью, то
захватывает части разных планов. Для избегания подобных сравнений на границах
объектов в OpenCV используется специальное окно, с размером 9×9 по умолчанию.
Операция сравнения выполняется только тогда, когда значения абсолютных разностей в
40
этом окне отличаются не больше, чем на заранее заданное значение. В OpenCV это
значение по умолчанию равно 4.[13, pp. 415-445]
3.6 Вычисление оптического потока
3.6.1 Выбор точек для обработки
После нахождения карты диспаритета, нужно сравнить новый стереокадр с
предыдущим, определив смещение интересующих точек. Далее, спроецировав эти точки в
трехмерное пространство, можно найти их перемещение в трехмерном пространстве. Для
вычисления оптического потока будем использовать левую часть стереокадра.
Для начала нужно определить подходящие для отслеживания точки, для которых
будет вычисляться оптический поток.
В OpenCV для определения хороших для отслеживания точек используется
алгоритм Криса Харриса, или его улучшенная версия – алгоритм Ши-Томаси. Эти
алгоритмы основаны на вычислении вторых производных для функции яркости пикселя
I ( x, y) .
Для некоторого окна вокруг исследуемого пикселя вычисляется матрица
( 54 )
,
где I x , I y - это частные производные функции I по осям x и y соответственно,
wi , j – это весовые коэффициенты для задания окна определенной формы.
В алгоритме Ши-Томаси точка считается подходящей, если минимальное из двух
собственных чисел матрицы M больше порогового значения.
Для повышения точности, можно уточнить координаты углов до долей
пиксельных координат[15]. Такие методы обычно основаны на аппроксимации яркости
пикселей какой-либо функцией, и поиском координат пиков этой функции.
[13, pp. 316-318]
41
3.6.2 Алгоритм Лукаса-Канаде
Для определения перемещения точки между двумя кадрами в работе используется
алгоритм Лукаса-Канаде. Он основывается на информации в окне, окружающем
отслеживаемую точку, что делает его эффективным для отслеживания сравнительно
небольшого набора точек, разбросанных по кадру. Недостаток этого метода заключается в
том, что при сильных смещениях искомая точка может выйти за пределы локального окна,
и ее будет невозможно отследить. Для решения этой проблемы используется
пирамидальный алгоритм Лукаса-Канаде, который основывается на последовательном
увеличении детализации изображения, на котором производится поиск. Хотя алгоритм
может работать на цветных изображениях, обычно кадр переводят в черно-белый формат,
с единственным каналом яркости для пикселя.
Алгоритм основан на следующих предположениях:
1)
Пиксели, изображающие движущийся объект не меняют своей
яркости на обоих кадрах.
I ( x  u, y  v, t  1)  I ( x, y, t )
2)
( 55 )
Смещение объекта между кадрами небольшое относительно размера
самого кадра.
3)
Точки, расположенные рядом с отслеживаемой, принадлежат к
проекции одной и той же плоскости и движутся одинаково.
Рассмотрим пиксель p . Из исходных предположений следует, что оптический
поток для всех пикселей окна с центром в p одинаковый. Это значит, что вектор
оптического потока Vx , V y  в точке p должен быть решением системы уравнений
( 56 )
,
где
q1 , q2 ,…, qn — пиксели внутри окна,
I x (qi ) , I y (qi ) , I t (qi ) — частные
производные изображения I по координатам x , y и времени t , вычисленные в точке qi .
42
Это уравнение решается с помощью метода наименьших квадратов.[16, 17]
На практике, в алгоритме используют взвешенное окно. Для этого каждый
пиксель берут с каким-то весовым коэффициентом wi , причем пиксели, находящиеся
ближе к центральному, получают больший вес. В качестве весов обычно используется
нормальное распределение расстояния между q i и p .
В пирамидальном методе на основе исходного изображения строится набор его
уменьшенных копий. Далее последовательно, начиная от самого маленького изображения,
алгоритм Лукаса-Канаде ищет соответствия, используя на следующем шаге информацию
о найденных точках на предыдущем шаге, как область, в которой нужно продолжать
поиск. Такой подход позволяет находить большие перемещения точки между кадрами, но
требует больших вычислительных ресурсов и памяти.[13, pp. 323-334]
3.7 Вычисление перемещения и вращения камеры
Точки на первом кадре и найденные с помощью алгоритма вычисления
оптического потока соответствующие точки на втором кадре репроецируются в
трехмерное пространство. Перемещение камеры между кадрами вычисляется из
расположения эти двух облаков трехмерных точек.
Так как в данной работе рассматривается случай, когда движется только
наблюдатель, а все объекты, окружающие его, находятся в покое, то можно считать, что
облако точек первого кадра перейдет в облако точек второго кадра с помощью
преобразований перемещения и вращения. Для вычисления этих преобразований
используется алгоритм, описанный в статье [18].
Пусть { pi } – облако трехмерных точек первого кадра, { p'i } – облако
трехмерных точек второго кадра, и количество точек в каждом облаке равно N . Переход
из точки pi в точку p'i описывается следующим преобразованием:
p'i  Rpi  T  Ni ,
( 57 )
где R - это матрица поворота, T - это вектор перемещения, N i - это вектор шума.
Необходимо найти такие R и T , чтобы минимизировать значение
43
2
N
S 2   p' i Rpi  T  .
( 58 )
i 1
Если R и T получены с помощью метода наименьших квадратов, то тогда
выполняется равенство
P'  RP  T ,
( 59 )
где P и P' - это центроиды соответствующих наборов точек:
P
P' 
1
N
1
N
( 60 )
N
 pi
i 1
( 61 )
N
 p' i
i 1
Если известна матрица поворота R , то вектор перемещения из ( 59 ) может быть
найден, как
T  P'RP .
( 62 )
Алгоритм вычисления движения камеры выглядит следующим образом:
1) Вычисляются центроиды для обоих облаков точек ( 60 ), ( 61 ).
2) Вычисляются
координаты
точек
каждого
облака
относительно
соответствующего центроида:
qi  pi  P ,
( 63 )
q'i  p'i P' ,
( 64 )
где qi и q' i - это трехмерные вектора-столбцы.
3) Вычисляется матрица H , как
N
H   qi q' i .
T
( 65 )
i 1
4) Для полученной матрицы выполняется сингулярное разложение ( 66 ), откуда
затем вычисляется матрица X ( 67 ).
H  UV t
( 66 )
X  VU t
( 67 )
5) Для матрицы X вычисляется определитель. Если det( X )  1, то X и есть
искомая матрица поворота, переходим на шаг 8.
44
6) Иначе, если det( X )  1, то выбирается нулевое сингулярное собственное
число
матрицы
H.
Например,
таким
окажется
третье
собственное
сингулярное число. Тогда матрица поворота может быть найдена, как
R  V 'U t ,
( 68 )
где матрица V ' получается из матрицы V путем замены в ней знака в
элементах третьего столбца на противоположный.
7) Если у матрицы H нет нулевых собственных сингулярных чисел, то такой
случай не может быть разрешен с помощью данного алгоритма. Но на
практике этот случай обычно не встречается.[18]
8) После определения матрицы поворота, перемещение облака может быть
найдено из уравнения ( 62 ).
9) Из найденных параметров находится матрица поворота Rcam и вектор
перемещения камеры Tcam для текущей итерации. Для определения текущего
положения камеры в пространстве эти значения объединяются с результатами,
полученными на предыдущих итерациях.
Из-за погрешностей при измерениях, получаемые значения ориентации и
перемещения камеры будут подвержены дрейфу со временем[9]. Для решения этой
проблемы можно использовать локальные оптимизации [14]. Для решения
проблемы дрейфа ориентации камеры можно использовать результат обработки
показаний ИИУ, как будет описано далее.
45
4 Использование ориентации ИИУ в визуальной одометрии
Определяемую с помощью ИИУ ориентацию можно использовать для уточнения
результатов визуальной одометрии. Для этого сначала нужно найти матрицу перехода из
системы отсчета ИИУ в систему отсчета камеры. Считаем, что взаимное расположение
стереокамеры и ИИУ не изменяется в процессе отслеживания перемещений наблюдателя.
Так как ИИУ измеряет только ориентацию наблюдателя в пространстве, то матрица
перехода между системами отсчета ИИУ и камеры будет являться матрицей поворота.
Способ вычисления матрицы трансформации, который будет описан далее,
представлен в статье [19].
Закрепим плоскость с калибровочным маркером в пространстве. Далее, сделаем
снимок этой доски с определенного ракурса камерой и зафиксируем показания
ориентации ИИУ для этого снимка. Переместив всю систему, подобную процедуру
проделаем для другого ракурса. Таким образом, имеется два значения ориентации ИИУ в
глобальной системе координат. Для камеры с известными параметрами ориентацию
относительно калибровочного изображения можно вычислить с помощью OpenCV. Пусть
Ci
Cj
C - это матрица поворота камеры между двумя кадрами, вычисленная на основе двух
значений ориентации камеры для этих кадров, а
Bi
Bj
C - аналогичная матрица поворота для
ИИУ. Для матрицы перехода между системой отсчета ИИУ и системой отсчета камеры
C
B
C можно записать следующие уравнения:
Ci
Cj
C BCC BBjiC CBCCCji C BCC BCC BBjiC
( 69 )
C  BC C 1
( 70 )
B
C
Уравнение ( 69 ) преобразуется в аналогичное, представленное с помощью
кватернионов:
Ci
Cj
q CB q  CB q BBji q .
( 71 )
Уравнения ( 71 ) составляются для нескольких пар ракурсов и объединяются в
систему. Далее эта система решается с помощью сингулярного разложения. Для того
чтобы решение было уникальным, необходимо использовать как минимум две пары
46
ракурсов, между которыми система вращается по различным осям. Что означает
использование трех различных ракурсов, как минимум.
Решением системы будет кватернион
C
B
q , описывающий вращение системы
координат камеры к системе координат ИИУ, который далее преобразуется в искомую
матрицу
C
B
C.
С помощью полученной матрицы перехода из уравнения ( 69 ) можно получать
матрицу поворота системы между двумя итерациями алгоритма визуальной одометрии по
показаниям ИИУ. На основе этой матрицы можно вычислить матрицу поворота
R,
используемую для определения перемещения камеры ( 62 ). Такой подход решит проблему
дрейфа значения ориентации камеры, получаемого с помощью алгоритма визуальной
одометрии, описанного ранее, так как корректировка дрейфа включена в алгоритм
определения ориентации наблюдателя на основе показаний ИИУ (см. раздел 2).
[19]
47
5 Практическая реализация
5.1 Описание используемых устройств
Для реализации и проверки работы разработанного метода была собрана
установка, состоящая из стереокамеры и инерциального измерительного устройства.
Данные, поступающие с сенсоров, обрабатывались на персональном компьютере под
управлением операционной системы Microsoft Windows 8. Компьютер оборудован
двуядерным процессором Intel Core i7-4500U с технологией Intel Hyper-Threading, и
графическим процессором NVIDIA Geforce 740M.
5.1.1 Стереокамера
Модуль стереокамеры был создан на основе двух USB камер Logitech C270 (рис.
20), жестко закрепленных на определенном расстоянии друг от друга. Крепление камер
позволяет менять расстояние между ними и их относительную ориентацию.
Рисунок 20. USB камера Logitech C270
Спецификация Logitech C270:
Угол обзора: 60º
Фокусное расстояние: 4.0 мм
Разрешение матрицы: 1280×960, 1.2 Мп
Стандарт съемки видео: 720p
Количество кадров в секунду: 30
Интерфейс: USB 2.0
[20]
48
Для каждого модуля камеры можно настроить параметры контраста, баланса
белого, яркости, экспозиции и насыщенности. Для лучшего результата эти параметры
нужно выровнять вручную для обоих модулей с помощью предоставляемого
производителем программного обеспечения.
5.1.2 Инерциальное измерительное устройство
В качество ИИУ использовался смартфон HTC EVO 3D[21] (рис. 21) под
управлением ОС Android 4.0.3.
Рисунок 21. HTC EVO 3D
Это устройство работает на двуядерном процессоре с частотой 1.2 ГГц, и
содержит необходимые сенсоры: трехосные гироскоп, акселерометр и магнитометр.
Данные от сенсоров передаются на ПК через локальную беспроводную сеть, к которой
подключены и смартфон, и ПК. Скорости передачи данных достаточно для того, чтобы
передавать показания в реальном времени без значимых задержек.
Крепление устройства позволяет задавать его ориентацию относительно
стереокамеры и жестко фиксировать его в таком положении.
49
5.2 Программная реализация
Для регистрации и обработки поступающих на ПК данных было разработано
приложение на языке C# для платформы NET 4.5. Язык был выбран из соображений
удобства разработки и поддержки кода. Приложение позволяет, как получать данные в
реальном времени с сенсоров, так и читать поток записанных данных из файлов, эмулируя
работу сенсоров в реальном времени. Такая возможность позволяет проводить
исследования на одних и тех же данных.
5.2.1 Приложение для смартфона
Для сбора и отправки данных для смартфона было написано приложение на
языке Java для ОС Android. Это приложение подключается к открытому порту на ПК, и с
помощью API, предоставляемого операционной системой, снимает показания с нужных
сенсоров. Показания представляют собой вектор из трех значений типа float. Далее, из
полученных значений формируется сообщение, содержащее помимо самого трехмерного
вектора значений тип сенсора, хранящийся в переменной типа byte, и временную метку
показаний типа int. Это сообщение передается на ПК с помощью протокола TCP.
Для подключения к ПК необходимо ввести IP этого ПК в локальной сети и номер
открытого на нем порта для получения данных с ИИУ в верхнее и нижнее поля
соответственно и нажать кнопку “Connect” (рис. 22). Если устройство успешно
подключилось к ПК, то в строке статуса будет надпись “connected”.
Для отключения нужно нажать на кнопку “Disconnect”. При этом в строке статуса
появится статус “disconnected”. Если при подключении произошла ошибка, то в этом
случае статус будет “error”, и нужно попробовать подключиться еще раз. Таймаут для
подключения составляет 8 секунд.
50
Рисунок 22. Интерфейс приложения для ИИУ
Также, для смартфона было разработано приложение, которое позволяет записать
получаемые с сенсоров данные в память смартфона. Получаемые данные с разных
датчиков записываются в разные файлы в двоичном формате, описанном ранее, по мере
получения.
5.2.2 Emgu CV
Для обработки видеопотока была использована библиотека компьютерного
зрения OpenCV[22]. Эта широко распространенная библиотека с открытым исходным
кодом содержит эффективную реализацию алгоритмов компьютерного зрения и
обработки изображений.
Для работы с этой библиотекой на платформе .Net была использована обертка
Emgu CV[23] версии 2.9.0. Она предоставляет удобные решения для вызова функций
OpenCV, используя оригинальную библиотеку, и работы с объектами изображений.
Также, используемые версии Emgu CV и OpenCV имеют поддержку технологии Nvidia
CUDA, что позволило использовать для вычислений графический процессор. Это дало
51
существенное сокращение времени выполнения таких трудоемких задач, как вычисление
карты диспаритета и оптического потока.
Использование подобной прослойки незначительно увеличивает расход ресурсов
и не мешает выполнению поставленной задачи.
Основным пространством имен библиотеки Emgu CV является Emgu.
Основные операции для работы с матрицами в Emgu CV предоставлены в классе
Emgu.CV.Matrix<T>. Этот класс предоставляет методы для сложения, перемножения,
транспонирования и умножения матрицы на скаляр.
Для
работы
с
изображениями
в
Emgu
CV
предоставлен
класс
Emgu.CV.Image<TColor, TDepth>, где тип TColor определяет количество каналов у
изображения, а TDepth – количество байт, выделяемое под значение каждого канала.
Для захвата кадров видеопотока использовался класс Emgu.CV.Capture. Этот
класс позволяет захватывать кадры, как от подключенной камеры, так и из видео файла.
Для захвата кадров с камеры, в конструктор класса передается идентификатор устройства,
типа int. Для захвата кадров из файла передается путь к этому файлу.
52
5.2.3 Архитектура приложения обработки данных
На рисунке 23 приведена диаграмма классов, описывающая общую архитектуру
приложения.
Рисунок 23. Архитектура приложения. Диаграмма классов.
Класс MEMSProvider предоставляет интерфейс для получения показаний ИИУ.
Наследники этого класса реализуют методы получения этих показаний из различных
источников.
Класс StereoVideoProvider предоставляет интерфейс для получения кадров из
стереоскопического видеопотока. Производные этого класса реализуют методы для
получения видеопотока из определенного источника.
Класс OdometerCalibrator содержит методы для калибровки стереокамеры и
определения ее параметров. Также он реализует алгоритм определения матрицы
трансформации из системы отсчета ИИУ в систему отсчета стереокамеры.
Класс MEMSOrientationCalculator содержит методы определения ориентации на
основе показаний ИИУ.
53
Класс VisualOdometer реализует алгоритмы визуальной одометрии. Также он
позволяет учитывать данные, получаемые с помощью ИИУ.
Класс MainForm является классом главной формы приложения. Помимо
обязанностей по отрисовке формы и регистрации действий пользователя, этот класс
получает и хранит параметры для алгоритмов, заданные пользователем. Также он
содержит обработчики событий получения нового набора показаний ИИУ и очередного
стереокадра. Обработчик такого события регистрирует новые показания и передает их в
метод соответствующего класса для обработки. По завершению обработки, результат
передается для отображения на соответствующей форме.
Класс MEMSForm отвечает за отображение ориентации устройства на отдельной
форме.
Класс VideoForm отвечает за отображение на специальной форме кадров
видеопотока и результатов его обработки.
Класс VOForm отвечает за отображение на отдельной форме траектории
движения устройства.
54
5.2.4 Получение показаний ИИУ
Рисунок 24. Получение данных ИИУ. Диаграмма классов.
Класс MEMSProvider содержит абстрактные методы для открытия и закрытия
потока данных ИИУ, проверки его состояния, а также событие NewMEMSReadingsEvent,
которое вызывается, когда наследник этого класса получает новые показания из
определенного источника (рис. 24). В рамках работы были разработаны классы для
получения данных через локальную сеть в реальном времени, и для работы с записанными
файлами показаний.
Класс DeviceRTWebMEMSProvider реализует получения данных от ИИУ через
локальную сеть. Он создает отдельный поток, в котором прослушивает выделенный порт,
подключает клиента и принимает от него сообщения с показаниями акселерометра,
магнитометра и гироскопа, записывая их в объект класса ReadingsVector3f, который
содержит свойства для вектора показаний типа float[], и временной метки типа int. После
55
того, как придут показания всех трех датчиков, они собираются в объект класса
MEMSReadingsSet3f, являющийся контейнером для набора показаний трех сенсоров. Этот
класс также содержит свойство для временной метки показаний типа int, в качестве
которой выбирается наибольшее значение из временных меток объектов показаний
сенсоров. После получения показаний вызывается событие NewMEMSReadingsEvent, куда
полученный контейнер с показаниями передается как аргумент.
Класс ReadingsFileMEMSProvider реализует имитацию работы ИИУ с помощью
заранее записанных показаний. Показания для каждого сенсора хранятся в отдельном
файле в бинарном виде в формате, аналогичном формату сетевого сообщения с этими
показаниями. После открытия файлов, из них в отдельном потоке последовательно
считываются показания сенсоров. Вызов события получения нового набора измерений и
передача в него аргументов выполняется аналогично случаю работы через сеть. Интервал
между вызовами события определяется временной меткой показаний.
5.2.5 Обработка данных ИИУ
Метод класса MainForm MEMSProvider_NewMEMSReadingsEvent(object sender,
NewMEMSReadingsSetEventArgs e) является обработчиком события получения набора
данных от ИИУ. На рисунке 25 показана последовательность обработки очередного
набора показаний.
Рисунок 25. Обработка показаний ИИУ. Диаграмма последовательности.
56
После получения в обработчике события нового набора показаний ИИУ, они
передаются объекту класса MEMSOrientationCalculator, который содержит реализацию
метода вычисления матрицы ориентации устройства, описанного в разделе 2, в методе
GetOrientationMatrix(...). Этот объект создается для объекта класса MainForm при
создании главной формы.
Метод GetOrientationMatrix вычисляет матрицу ориентации устройства по
очередному набору показаний ИИУ. Параметры метода:
1) Объект с набором показаний сенсоров ИИУ.
2) Флаг, определяющий, будут ли в алгоритме использоваться показания
акселерометра и магнитометра.
3) Флаг, определяющий, будут ли использоваться показания гироскопа.
4) Флаг, определяющий использование низкочастотного фильтра для показаний
акселерометра и магнитометра.
5) Коэффициенты для высокочастотного и низкочастотного фильтров, заданные
пользователем.
Возвращаемым значением метода является матрица 3×3, которая далее передается
для визуализации объекту формы MEMSForm. Описание пользовательского интерфейса
для работы с показаниями ИИУ приведено в приложении А.
5.2.6 Получение видеопотока
Разработанное приложение позволяет получать видеопоток как в реальном
времени с пары USB камер, так и из файла с записанным стереоскопическим
видеофрагментом.
57
Рисунок 26. Получение видеопотока. Диаграмма классов.
Доступ к определенному источнику видеопотка предоставляется наследниками
класса StereoVideoStreamProvider. Они реализуют объявленные им абстрактные методы
запуска, остановки и проверки состояния потока, а также получения текущего кадра.
Также родительский класс содержит событие, которое вызывается на получение нового
стереокадра (рис. 26).
Класс StereoOCVGeminateFileVideoStreamProvider реализует работу с записанным
файлом
стереоскопического
видео.
Для
получения
кадров
используется
класс
Emgu.CV.Capture, в конструктор которого передается путь до файла видео. После
открытия файла получаются параметры видео, типа размера кадра и количества кадров в
секунду. Далее создается отдельный поток, где в цикле происходит получение кадров
видеопотока. Полученный стереокадр представляет собой склеенные левый и правый
кадры. После получения такого кадра, вызывается метод ElementFromRawFrame(…),
который преобразует его в объект класса StereoFrameSequenceElement, содержащий левый
и правый кадры в отдельных объектах и временную метку. Время задержки между
кадрами определяется по параметру количества кадров в секунду. После создания объекта
для очередного стереокадра, вызывается событие NewStereoFrameEvent, оповещающее
58
подписчиков о получении очередного стереокадра, в аргументы которого передается
созданный объект.
Класс StereoOCVUSBVideoStreamProvider получает видеопоток от подключенной
пары USB камер с помощью двух объектов класса Emgu.CV.Capture, в конструктор
которых передаются соответствующие идентификаторы левого и правого модуля. Далее
устанавливается требуемое разрешение для обоих модулей и запускается поток, в котором
происходит захват кадров. После получения левого и правого кадров, из них формируется
объект класса StereoFrameSequenceElement с временной меткой. Далее аналогично
предыдущему случаю вызывается событие получения нового кадра.
5.2.7 Итерация метода визуальной одометрии
На рисунке 27 представлен процесс обработки нового стереокадра и получения
очередного значения перемещения и ориентации наблюдателя.
Рисунок 27. Обработка стереокадра. Диаграмма последовательности.
Класс MainForm содержит обработчик события получения нового стереокадра
StereoVideoStreamProvider_NewStereoFrameEvent(object sender, NewStereoFrameEventArgs
e). При обработке события, объект кадра сохраняется для дальнейшего использования.
Затем, если включен режим одометрии, то этот объект передается объекту класса
VisualOdometer, который осуществляет вычисление перемещения и вращения камеры на
59
основе очередного стереокадра. Алгоритм визуальной одометрии реализован в методе
GetTranslationAndRotation(…). В качестве аргументов ему передаются:
1) Два
последовательных
стереокадра
в
объектах
контейнера
StereoFrameSequenceElement.
2) Параметры камеры, вычисленные в процессе калибровки.
3) Параметры для алгоритма определения точек на кадре для обработки.
4) Параметры для алгоритма вычисления оптического потока.
5) Параметры для алгоритма вычисления диспаритета.
6) Параметры для использования ориентации ИИУ.
Вначале стереокадры ректифицируются с помощью метода Undistort(…) класса
Emgu.CV.IntrinsicCameraParameters, и метода Emgu.Cv.CvInvoke.cvRemap(…), который
преобразует изображение в соответствии с передаваемой в него картой. Такая карта для
ректификации также вычисляется в процессе калибровки.
Основные этапы обработки стереокадров вынесены в отдельные методы.
Алгоритм, используемый на конкретном этапе, определяется на основе переданных для
этого этапа параметров. Такой подход позволяет достаточно просто изменять алгоритмы
для определенного этапа обработки стереокадра. Ниже перечислены алгоритмы,
используемые на данный момент.
Для определения точек на кадре используется метод GoodFeaturesToTrack(…)
класса Emgu.CV.Image.
Алгоритм Лукаса-Канаде для вычисления оптического потока реализован в
методе Emgu.CV.OpticalFlow.PyrLK(…). Для вычисления его на GPU используется метод
Emgu.CV.GPU.GpuPyrLKOpticalFlow(…).
Для
вычисления
Emgu.CV.StereoSGBM
диспаритета
на
CPU
с заданными параметрами,
создается
экземпляр
класса
у которого вызывается метод
FindStereoCorrespondence(…). Для выполнения этой операции на GPU аналогичным
образом используется объект класса Emgu.CV.GPU.GpuStereoBM.
Для триангуляции используется матрица репроекции Q, вычисленная на этапе
калибровки, согласно уравнению ( 50 ).
Для определения матрицы поворота и вектора перемещения вычисляется матрица
для сингулярного разложения. Затем сингулярное разложение выполняется с помощью
60
метода Emgu.CV.CvInvoke.cvSVD(…). На этом этапе возможно использование матрицы
поворота, вычисленной на основе двух значений ориентации ИИУ, если они были
переданы во входных параметрах.
Возвращаемые параметры:
1) Матрица поворота и вектор перемещения камеры.
2) Два набора точек для обоих кадров, использовавшихся для обработки.
3) Массивы значений диспаритета для этих точек.
4) Массивы трехмерных точек после триангуляции.
Полученные значения перемещения камеры объединяются с ранее вычисленными
значениями для получения текущего поворота и траектории и передаются для
отображения форме VOForm. Результаты промежуточных этапов, например, вычисления
оптического потока, могут быть визуализированы с помощью формы VideoForm (рис 28).
Рисунок 28. Результат вычисления оптического потока для выбранных точек. Зелеными линиями
представлены траектории перемещения выбранных точек между кадрами.
5.2.8 Калибровка
Методы для калибровки системы предоставляет класс OdometerCalibrator.
61
Метод
калибровки
стереокамеры
CalibrateStereo
принимает
в
качестве
параметров объект класса StereoCameraCalibrationData, который содержит
1) Набор стереокадров с изображением калибровочного шаблона, снятого с
разных ракурсов.
2) Размеры калибровочного шаблона и размер квадрата.
Калибровочные кадры могут быть получены как с помощью захвата из текущего
видеопотока, так и загружены из набора файлов. На левой и правой части каждого
стереокадра
определяется
положение
углов
доски
с
помощью
метода
Emgu.CV.CameraCalibration.FindChessboardCorners(…). Координаты найденных углов
уточняются с помощью метода FindCornerSubPix(…) объекта Emgu.CV.Image. Далее с
помощью
методов
Emgu.CV.CameraCalibration.StereoCalibrate(…),
Emgu.CV.CvInvoke.cvStereoRectify(…),
Emgu.CV.CvInvoke.cvInitUndistortRectifyMap(…)
вычисляются для каждой камеры внутренние параметры, параметры искажения линзы,
фундаментальная и существенная матрицы, матрицы проекций и карты ректификации.
Полученные
параметры
записываются
в
объект
класса
StereoCameraParams,
и
возвращаются из метода. Пример результата калибровки стереокамеры приведен в
приложении Б.
Для определения матрицы перехода между системами координат ИИУ и камеры
метод IMUCameraCalibrate(…) принимает на вход набор кадров с изображением
калибровочного шаблона и набор соответствующих значений ориентации ИИУ. Эти
значения могут быть захвачены из текущего видеопотока и потока данных от ИИУ
соответственно.
Результат
калибровки
IMUCameraCalibrationParams.
62
возвращается
в
объекте
класса
Заключение
В процессе работы был разработан и реализован метод определения в реальном
времени перемещения и ориентации объекта в трехмерном пространстве на основе
показаний
закрепленного
на
нем
инерциального
измерительного
устройства
и
стереокамеры.
Для реализации метода были разработаны приложения для получения показаний
сенсоров и их обработки.
Для проведения исследования работы метода была спроектирована и собрана
экспериментальная установка.
В дальнейшем разработанный метод планируется использовать для разработки
системы дополненной реальности.
63
Список использованных источников и литературы
1. Hall D. L., Llinas J. An Introduction to Multisensor Data Fusion //Proceedings of the
IEEE. 1997. Vol. 85(1). P. 6-23.
2. Sensors Overview [Electronic resource] // Android Developers. 2014. URL:
http://developer.android.com/guide/topics/sensors/sensors_overview.html (access date
08.05.2013)
3. Lawitzki P. Application of Dynamic Binaural Signals in Acoustic Games. Master’s
Thesis. Stuttgart Media University, Stuttgart, 2012.
4. Sachs D. Sensor Fusion on Android Devices: A Revolution in Motion Processing
[Electronic resource] // Google Tech Talk. 2010. URL:
http://www.youtube.com/watch?v=C7JQ7Rpwn2k/ (access date 08.05.2014)
5. Baerveldt A.-J., Klang R. A Low-cost and Low-weight Attitude Estimation System for an
Autonomous Helicopter // Proceedings of IEEE International Conference on Intelligent
Engineering Systems. 1997. P. 391-395.
6. Colton S. The Balance Filter. A Simple Solution for Integrating Accelerometer and
Gyroscope Measurements for a Balancing Platform [Electronic resource]. 2007. URL:
http://www.chiefdelphi.com/media/papers/download/2059 (access date 08.04.2014)
7. Weisstein E.W. Euler Angles [Electronic resource] // Wolfram MathWorld. 2014.
Electronic data. URL: http://mathworld.wolfram.com/EulerAngles.html (access date
20.11.2013)
8. Corke P., Strelow D., Singh S. Omnidirectional visual odometry for a planetary rover //
In Proc. IEEE/RSJ Int. Conf. Intelligent Robots and Systems. 28 Sept.-2 Oct. 2005. Vol
4. P. 4007–4012.
9. Scaramuzza D., Fraundorfer F. Visual Odometry. Part I: The First 30 Years and
Fundamentals // IEEE Robotics & Automation Magazine. 2011. Vol. 18(4). P. 80-92.
10. Song S., Chandraker M., Guest C.C. Parallel, Real-Time Monocular Visual Odometry //
IEEE International Conference on Robotics and Automation (ICRA), Karlsruhe. 6-10
May 2013. P. 4698-4705.
11. Olson C. F., Matthies L. H., Schoppers M., Maimone M. W. Rover navigation using
stereo ego-motion // Robotics and Autonomous Systems. 2003.Vol. 43(4). P. 215-229.
64
12. Comport A.I., Malis E., Rives P. Accurate quadrifocal tracking for robust 3d visual
odometry // in Proc. IEEE Int. Conf. Robotics and Automation. 2007. P. 40–45.
13. Bradski G., Kaehler A. Learning OpenCV. Sebastopol : O’Reilly Media, Inc., 2008.
14. Fraundorfer F., Scaramuzza D. Visual Odometry. Part II: Matching, Robustness,
Optimization, and Applications // IEEE Robotics & Automation Magazine. 2012. Vol.
19(2). P. 78-90.
15. Chen D., Zhang G. A new sub-pixel detector for x-corners in camera calibration targets//
WSCG Short Papers. 2005. P. 97–100.
16. Lucas B. D., Kanade T. An iterative image registration technique with an application to
stereo vision // Proceedings of Imaging Understanding Workshop. 1981. P. 121-130.
17. Lucas B. D. Generalized Image Matching by the Method of Differences. Doctoral
dissertation. Carnegie-Mellon University, Pittsburgh, Pennsylvania, 1984.
18. Arun K.S., Huang T.S., Blostein, S.D. Least-Squares Fitting of Two 3-D Point
Sets //IEEE Transactions on Pattern Analysis and Machine Intelligence. 1987. Vol.
PAMI-9(5). P. 698-700.
19. Tue-Cuong Dong-Si, Mourikis A.I. Estimator initialization in vision-aided inertial
navigation with unknown camera-IMU calibration // 2012 IEEE/RSJ International
Conference on Intelligent Robots and Systems (IROS), Vilamoura. 2012. P. 1064-1071.
20. Logitech HD Webcam C270 Technical Specifications [Electronic resource] // Logitech.
2014. Electronic Data. URL: http://logitech-enamr.custhelp.com/app/answers/detail/a_id/17556/~/logitech-hd-webcam-c270-technicalspecifications (access date 08.09.2013)
21. HTC EVO 3D [Electronic resource]. 2014. URL://www.gsmarena.com/htc_evo_3d3901.php (access date 02.02.2013)
22. OpenCV documentation [Electronic resource]//OpenCV documentation. 2014. URL:
ttp://docs.opencv.org/ (access date 24.02.2013)
23. Emgu CV: OpenCV in .NET (C#, VB, C++ and more) [Electronic resource]. 2014. URL:
http://www.emgu.com/wiki/index.php/Main_Page (access date 27.02.2013)
65
Приложение А. Пользовательский интерфейс для работы с показаниями
ИИУ.
На рисунке 29 приведен пользовательский интерфейс для задания параметров
комплементарного фильтра.
Рисунок 29. Интерфейс для задания параметров комплементарного фильтра.
В область 1 выводятся получаемые показания ИИУ. С помощью элемента 2
определяется, использовать ли показания акселерометра и магнитометра в алгоритме
определения ориентации. Аналогично, элемент 3 определяет использование показаний
гироскопа.
С помощью элементов 4 и 5 задаются значения высокочастотного и
низкочастотного фильтров.
Кнопка 6 открывает форму для отображения ориентации (рис. 30).
66
Рисунок 30. Форма для отображения ориентации.
На этой форме устройство отображается в виде параллелепипеда, который
вращается согласно вычисляемой в реальном времени ориентации.
67
Приложение Б. Пример результата калибровки стереокамеры.
На рисунке 31 приведен пример стереокадра до и после ректификации. Красные
линии проходят по одинаковым строкам пикселей на левой и правой частях стереокадров.
На кадре до ректификации линии одного ряда пересекают калибровочный шаблон в
разных местах. После ректификации соответствующие линии проходят через шаблон в
одинаковых местах.
Рисунок 31. Пример стереокадра до (сверху) и после (снизу) процесса ректификации.
68
1/--страниц
Пожаловаться на содержимое документа