Из фото в 3D, ч.1: геометрия формирования изображения

Схема пинхол-камеры — простейшей конструкции, работающей по принципу камеры-обскура — удачный пример для изучения основ формирования изображения

Схема пинхол-камеры — простейшей конструкции, работающей по принципу камеры-обскура — удачный пример для изучения основ формирования изображения

Казалось бы, жизнь невозможно повернуть назад, а предмет из фотографии не восстановишь. Хотя с последним можно поспорить: из плоского 2D-изображения реально восстановить 3D-модель объекта. Подобная «магия» часто практикуется в AR/VR, управлении беспилотниками и других сферах. Для этого первым делом производится калибровка камеры. Чтобы понять процесс калибровки, сперва следует освоить базовые принципы преобразования трехмерных координат точек в двухмерные на плоскости. 

Сегодня мы рассмотрим:

  • геометрию формирования изображения на сенсоре камеры (pinhole модель);

  • как рассчитываются координаты точки на сенсоре для точки из реального мира;

  • как переходить от одной системы координат к другой;

  • что такое внутренние и внешние параметры камеры и зачем они нужны.

Начнем с основ геометрии формирования изображения, для чего в лучших традициях математических задачек из учебников поупражняемся на яблоках, точнее — одном яблоке. Представим, что оно лежит где-нибудь посреди комнаты. Берем камеру, чтобы сфотографировать яблоко. Итак, нам дан объект в трехмерной системе координат мирового пространства, который мы хотим запечатлеть в двухмерной среде. 

Основная задача здесь — поиск координат пикселей (u, v)на фотографии с камеры. Они соответствуют трехмерным координатам центра яблока в 3D пространстве. А вот здесь уже стоит поговорить о четырех различных системах координат, каждая из которых играет важную роль в описании пространства и объектов. 

Мировая система координат

Это глобальная точка отсчета, которая помогает определить положение предмета в трехмерном пространстве. Она служит стандартом для измерения и описания координат объектов независимо от точки наблюдения.

Возвращаясь к примеру, мировая система координат находит позицию яблока в пространстве комнаты независимо от того, где именно расположилась камера. На помощь в этом приходят те самые числа X_w, Y_w, Z_w, которые фиксируют положение объекта вдоль трех взаимно перпендикулярных осей (Декартова система координат). Это горизонтальная ось X_w, вертикальная Y_w и глубина Y_w.

На рисунке ниже желтым цветом показана мировая система координат:

Рисунок 1. Мировая система координат. Источник

Рисунок 1. Мировая система координат. Источник

Начальную точку координат (0, 0, 0) можно выбрать в любом пункте комнаты, например, в одном из углов. Тогда оси X и Y будут ориентированы в горизонтальной плоскости вдоль двух стен, в то время как ось Z — вдоль вертикального угла стены.

Чтобы вычислить положение яблока, необходимо измерить расстояние от начала координат в мировой системе до объекта. В итоге мы получим X_w, Y_w, Z_w

Система координат камеры

Теперь представим, что камеру установили в начале координат комнаты и настроили так, что оси X, Y, Zсовпадают с соответствующими осями X_w, Y_w, Z_wпомещения. То есть две системы координат сливаются воедино и становятся эквивалентными друг другу.

Рисунок 2. Оси камеры где ось Z смотрит в направлении объектов, ось Y — вниз, а ось X — направо.

Рисунок 2. Оси камеры где ось Z смотрит в направлении объектов, ось Y — вниз, а ось X — направо.

Но нам важно иметь возможность поставить камеру в любой точке комнаты, из которой можно наблюдать за нужной областью. Для этого-то и ищут связь между 3D координатами мира и 3D координатами камеры.

Чаще всего расположение осей камеры выглядит следующим образом:

Мировые координаты и координаты камеры связаны матрицей вращения R и вектором перемещения t.

R — матрица поворота размером 3×3. Она описывает ориентацию камеры, с помощью которой мы выравниваем направления осей мировой системы координат и системы координат камеры.

t— вектор параллельного переноса размером 3×1. Он определяет положение центра камеры, с помощью которого мы смещаем начало координат в мировом пространстве в начало координат в матрице камеры.

Соответственно, у нашего яблока будут значения координат X_w, Y_w, Z_w в мировой и X_c, Y_c, Z_c— в системе камеры. Используя приведенную ниже формулу, можно перевести координаты точек из одной системы в другую.

\begin{bmatrix} X_с \\ Y_с \\ Z_с \end{bmatrix}=R \begin{bmatrix} X_w \\ Y_w \\ Z_w \end{bmatrix} + t

Однородные координаты

Это концепция применяется в геометрии и компьютерной графике для представления точек, векторов и преобразований в более простой и обобщенной форме. Однородные координаты позволяют легко выполнять различные геометрические преобразования путем умножения матриц (например, трансляцию, масштабирование и поворот). Главное удобство в том, что все можно выразить линейной операцией. В однородных координатах точка в трехмерном пространстве представляется четырьмя числами (X,Y,Z,W), где Wявляется весовым коэффициентом. В декартовых координатах она соответствует точке:

(\frac {X}{W}, \frac {Y}{W}, \frac {Z}{W})

Например, для плоскости мы задаем каждую точку парой координат (u, v) Чтобы перевести ее в однородные координаты, добавляется ещё одна координата w Отсюда мы получаем следующие свойства:

  1. Точке (u, v) будет соответствовать однородная координата (u, v, 1)

  2. При умножении на любое число координаты будут задавать ту же точку.

Например, точка (2, 3) в однородных координатах будет (2, 3, 1), и при умножении на 5 будет (10, 15, 5), но она всё равно задаёт ту же точку (2, 3, 1), и таких примеров бесконечное множество.

То же самое работает и для трехмерного пространства. Для нас наиболее интересно представлять точку с единичной глубиной, то есть z = 1. Поэтому для однородных координат (10, 15, 5) мы можем разделить все координаты на z и получить (10/5, 15/5, 5/5), что равно (2, 3, 1)

Что такое однородные координаты, в общих чертах обрисовали. Теперь воспользуемся их свойствами для получения универсальных координат на изображении. Разделим на глубину Zи подвинем изображение на единичное расстояние от центра проекции. В результате мы получаем точку на изображении (u, v, 1) После этого можно использовать свойства однородных координат, отбросить Z и прийти к(u, v)

Таким образом, получается компактно представить данные в более простой реализации и объединить несколько преобразований в одно.

Модель камеры с точечной диафрагмой

Жаль разрывать рассказ о четырех системах координат на полуслове, но чтобы лучше понять последнюю из них, придется сделать небольшое отступление. Отдохнем от формул и посмотрим на девайс, который позволяет применить все эти расчеты на практике. Одно из самых простых оптических устройств для получения изображения — пинхол-камера. Понял принцип ее работы — считай, постиг основы основ фотографии.

Рисунок 3.  Принцип работы пинхол-камеры

Рисунок 3. Принцип работы пинхол-камеры

Такая камера пропускает свет через небольшое отверстие (пинхол) и фокусирует его на противоположную внутреннюю стенку, служащую экраном (так называемая «плоскость изображения»). В нашем случае это матрица камеры (сенсор). На ней формируется 2D изображение внешнего мира. Картинка получается перевернутой вверх ногами и отраженной слева направо, поскольку свет распространяется по прямым линиям

Важную роль играет промежуток между pinhole и плоскостью изображения, который называется фокусным расстоянием f. Оно зависит от размеров камеры и отверстия, а также от оптических свойств пинхола. Чем больше фокусное расстояние, тем четче и одновременно мельче по размеру будет проекция. 

Притом для упрощения работы и анализа часто используется концепция виртуальной плоскости изображения. Она размещается на расстоянии f перед отверстием и служит для формирования такой же картинки, как на сенсоре, но уже без перевернутого представления.

Если вы хотите не просто прочитать об этом, но и увидеть все в действии, то здесь можно поиграть с простой моделью pinhole-камеры. Вы досконально рассмотрите 2D изображения при изменении размера диафрагмы и количества света.

Система координат изображения

Теперь мы знаем, что такое фокусное расстояние и с чем его едят и готовы идти дальше. Представим, что мы получили точку с координатами X_c, Y_c, Z_c. Далее ее можно спроецировать на плоскость изображения.

Координаты точки на изображении сильно зависят от расстояния оптического центра, или центра проекции O_c.

Плоскость изображения размещается на фокусном расстоянии fот оптического центра O_c.

Последний обозначает точку внутри камеры, через которую проходит главная оптическая ось Z_c от фокусного объектива к сенсору (или матрице) камеры.

Во время формирования изображения на плоскости матрицы оптический центр O_c определяет точку (u, v), в которой линии проекции из объектива пересекаются и создают точное представление трехмерных объектов на двумерной поверхности.

Рисунок 4.  Модель пинхол-камеры. Источник

Точки p на плоскости изображения и P в 3D координатах камеры эквивалентны:

p \sim P

Это означает, что точка p на плоскости изображения соответствует точке P в трехмерном пространстве. Между их координатами есть определенное отношение, а именно — принадлежности к одному лучу, где w — константа:

\frac {u}{X} = \frac {v}{Y} = \frac {z}{Z} = w

Такое отношение остается постоянным для всех точек, расположенных на одной линии проекции точки P на плоскость изображения. Оно позволяет установить связь между 2D координатами на изображении и 3D координатами объектов в пространстве.

Из проекции треугольников OPP^\primeи OpF на плоскости XZ и YZ соответственно мы получаем:

u = f \frac {X_c}{Z_c}, \quad v = f \frac{Y_c}{Z_c}

где (u, v) — координаты на изображении, f (OF на рисунке 3) — фокусное расстояние, X_c, Y_c, Z_c — координаты точки в системе координат камеры.

Формулы выше можно получить и в матричном виде:

\begin{bmatrix} u \\ v \\ 1 \end{bmatrix}= \frac {1}{Z_c} \begin{bmatrix}     f & 0 & 0 \\     0 & f & 0 \\     0 & 0 & 1 \\ \end{bmatrix} \begin{bmatrix} X_c \\ Y_c \\ Z_c \end{bmatrix}

Принцип подобия треугольников связывает однородные и декартовы координаты, поэтому мы можем записать формулу так:

\begin{bmatrix} u \\ v \end{bmatrix}\sim \begin{bmatrix} f & 0 & 0 \\ 0 & f & 0 \\ 0 & 0 & 1 \\ \end{bmatrix} \begin{bmatrix} X_c \\ Y_c \\ Z_c \end{bmatrix}

Матрица 3×3 в формуле выше — это внутренние параметры камеры.

K = \begin{bmatrix}     f & 0 & 0 \\     0 & f & 0 \\     0 & 0 & 1 \\ \end{bmatrix}

Важно, что матрица Kсейчас не учитывает положение главной точки F (principal point), ориентацию осейO_cи Z, а также размеры пикселей камеры, которые влияют на фокусное расстояние. Поэтому далее мы рассмотрим изменение матрицы K в более реалистичных условиях.

Матрица K показывает одинаковое фокусное расстояние при условии квадратного пикселя на матрице камеры. Так происходит не всегда, поэтому матрица с двумя разными фокусными расстояниями будет выглядеть следующим образом:

K = \begin{bmatrix}     f_x & 0 & 0 \\     0 & f_y & 0 \\     0 & 0 & 1 \\ \end{bmatrix}

Оптический центр Oc и ось Z камеры должны пересекаться в начале координат изображения в точке F(c_x, c_y) (principle point). Однако бывают исключения, например, если сдвинулся сенсор или произошло искажение при перемещении объектива. Возможен и небольшой перекос \gamma между осями x и y датчика камеры.

K = \begin{bmatrix}     f_x & \gamma & c_x \\     0 & f_y & c_y \\     0 & 0 & 1 \\ \end{bmatrix}

Ранее мы получили калибровочную матрицу, или матрицу внутренних параметров камеры (intrinsic matrix). С ее помощью у нас получится следующее выражение:

\begin{bmatrix} u \\ v \end{bmatrix} \sim \begin{bmatrix}     f_x & \gamma & c_x \\     0 & f_y & c_y \\     0 & 0 & 1 \\ \end{bmatrix} \begin{bmatrix} X_с \\ Y_с \\ Z_с \end{bmatrix}

Пока что на этом с общей теорией закончим. Если у вас возникли какие-то вопросы, буду рад ответить на них в комментариях. В следующей публикации  мы рассмотрим уже непосредственно калибровку камеры, сбор датасета, различные виды маркеров и проблему дисторсии.

P.S.

Первая версия статьи написана для deepschool-pro, на Хабре публикуется с изменениями и дополнениями.

© Habrahabr.ru