Докладчик: Вадим Литвинов, Hola Networks Ltd., Новосибирск.
«Надоели Ангуляры и Аджайлы? Устал от Scrum и NoSQL? Тогда приходи и мы погрузимся в увлекательный мир математики и увидим как с её помощью можно просто и элегантно решать сложные задачи.
Конкретно на этом докладе мы поговорим о том, как воссоздать 3D модель поверхности по видеозаписи.
О себе: родился и живу в Новосибирске, но молодость свою провел во Франции, где я прожил суммарно 15 лет. Несмотря на то что я закончил институт по специальности
“Компьютерные сети и связь”, админ из меня не вышел. Занимался я в основном
научными вычислениями. Защитил диссер по машинному зрению. Работал над многими интересными вещами от расчетов сопромата до робототехники. Самый мой любимый проект это разработка прототипа машины без водителя в 2010/11 годах. В настоящий момент работаю над Video CDN нового поколения в Hola Networks Ltd.»
6. Моделируем камеру
Матрица проекции:
⎡
⎣
q′
x
q′
y
1
⎤
⎦ ≡ K
⎡
⎣
qx
qy
qz
⎤
⎦ где K =
⎡
⎣
fx s c′
x
0 fy c′
y
0 0 1
⎤
⎦ (1)
Обратная проекция:
⎡
⎣
d′
x
d′
y
d′
z
⎤
⎦ ≡ K−1
⎡
⎣
q′
x
q′
y
1
⎤
⎦ (2)
⎡
⎣
dx
dy
dz
⎤
⎦ =
1
||(d′
x , d′
y , d′
z)T ||
⎡
⎣
d′
x
d′
y
d′
z
⎤
⎦ (3)
7. Моделируем камеру
Способы убрать оптические искажения линзы:
Работать с выправленными изображениями
Таблицей соответствий
Моделировать их полиномиальной функцией
. . .
8. Позиционируем камеру
Определяем две системы координат:
{xw , yw , zw } - система координат мира
{xc, yc, zc} - система координат камеры
Разница между ними определяется вектором и матрицей:
tw
c - вектор сдвига
Rw
c - матрица поворота
Позиция камеры: {Rw
c , tw
c }
10. От 2D к 3D
Метод средней точки:
c1
I1
c2
I2
q1
q2
q
d1 d2
𝛼d1 − 𝛼′d2 = c2 − c1
q = c1+𝛼d1+c2+𝛼′d2
2
11. Игры с камерой
3 Игры с камерой
Интересные точки
Соединяем точки
Итеративное обновление
12. Алгоритм SfM
Цель: найти относительные позиции камер
фотографировавших каждое изображение.
В этой секции кратко описывается алгоритм:
Etienne Mouragnon, Maxime Lhuillier, Michel Dhome, Fabien
Dekeyser and P. Sayd. Generic and real-time structure from motion
using local bundle adjustment. In Image and Vision Computing
(IVC), vol. 27(8), pp. 1178–1193, july 2009.
14. Интересные точки
Принцип работы:
Нет изменений во
всех направлениях:
плоский регион
Изменения в одном
направлении: грань
Изменения во всех
направлениях: угол
17. Итеративное обновление
Поддерживаем в памяти:
Позиции камер
Облако точек
Для каждого нового изображения (кроме первых трёх):
1 Рассчитываем позицию камеры
2 Рассчитываем координаты новых точек
18. Позиция камеры
1 Мы знаем 3D координаты некоторых
2 Мы знаем их 2D координаты в текущем изображении
3 Трех достаточно что-бы рассчитать позицию камеры
⎡
⎣
q′
x
q′
y
1
⎤
⎦ ≡ KRwT
c [I3| − tw
c ]
⎡
⎢
⎢
⎣
qx
qy
qz
1
⎤
⎥
⎥
⎦ (6)
20. Добавим надёжность
Используем RANSAC:
Выбираем 3 случайных точки
Рассчитываем позицию камеры
Рассчитываем ошибку для всех 3D точек
Их сумма в квадрате очки этого результата
Повторяем N раз
Оставляем результат с наименьшим количеством очков
21. Считаем точки и оптимизируем
Считаем координаты 3D точек:
Рассчитываем 3D координаты точек видимых как
минимум в 3 кадрах
Используем третий кадр для проверки
Оптимизируем результат при помощи алгоритма
Levenberg-Maquard:
Улучшаем позицию 3 последних камер
Улучшаем точки видимые в 10 последних кадрах
22. Инициализация процесса
Мы работаем с 3 первыми кадрами
Если мы знаем соответствия между 5 точками в двух
кадрах:
Мы можем рассчитать позиции камер
И 3D координаты этих точек
Мы рассчитываем координаты первой и третьей камеры
Потом мы рассчитываем координаты второй
Используем RANSAC для надёжности
23. Пиксели и воксели
4 Пиксели и воксели
Метод и его ограничения
Разделяем и сортируем
Красим воксели
Результаты
Плюсы и минусы
24. Voxel coloring
Рассмотрим метод описанный в
Steven M. Seitz, Charles R. Dyer. Photorealistic scene
reconstruction by voxel coloring. In International Journal of
Computer Vision (IJCV), vol. 35(2), pp. 151–173, november 1999
28. Красим воксели
Обрабатываем слой за слоем:
Для каждого вокселя:
Для каждой камеры Ci :
Проецируем воксель в камеру
Проверяем что луч от вокселя к камере не пересекает
заполненных вокселей
Запоминаем цвет ci соответствующего пикселя
Считаем корреляцию между цветами c1,. . . ,cn:
Если корреляция заданного значения:
Помечаем воксель как заполненный
Цвет вокселя, среднее между c1,. . . ,cn
Если меньше: воксель отмечается как пустой
33. Плюсы и минусы
Плюсы:
Простота реализации
Хорошие результаты
Минусы:
Объект должен быть цветастым
Большое количество вычислений
Огромное потребление памяти с ростом размера модели
35. Space carving
Рассмотрим метод описанный в
Maxime Lhuillier, Shuda Yu. Manifold surface reconstruction of an
environment from sparse Structure-from-Motion data. In Computer
Vision and Image Understanding (CVIU), vol. 117(11), pp.
1628–1644, november 2013.
На вход он принимает позиции камер и облако точек и связи
между ними
37. Делим пространство
Этап 2: Сортируем тетраэдры на пустые и полные
00
2
0
2
0
2
3
2
0
2
0
0
0
0
0
0
c1
c2
38. Экстрагируем поверхность
Если использовать границу между свободным и заполненным
пространством из предыдущего этапа, то поверхность будет
некорректна.
Корректно Артефакт
50. Экстрагируем поверхность
Резюме алгоритма:
1 Добавляем тетраэдры по одному, пока возможно
2 Для каждой вершины поверхности:
1 Пытаемся добавить тетраэдры содержащие вершину
одновременно
2 Если получилось, останавливаем цикл
3 Если пустое пространство увеличилось, goto 1
53. Плюсы и минусы
Плюсы:
Быстрота вычислений
Возможность работать с большими пространствами
Минусы:
Визуальный результат среднего качества
54. Заключение
Надеюсь что реконструкция поверхностей больше не кажется
вам черной магией.
Полезные инструменты:
OpenCV - http://opencv.org
Ceres - http://ceres-solver.org
CGAL - http://www.cgal.org
Для связи со мной: vadim_litvinov (Гав-гав!) fastmail.com