Назад
272

Геометрия формирования изображения

272

Введение

Наша статья — предисловие к следующей статье, посвященной калибровке камеры.

Для полного понимания процесса калибровки камеры нужно знать основы преобразования трехмерных координат точек в соответствующие двумерные координаты на плоскости. Изучим для этого геометрию формирования изображения.

В качестве примера давайте представим себя в комнате, где мы фотографируем яблоко. На начальном этапе у нас есть объект в трехмерной системе координат мирового пространства. В этом контексте объект — яблоко в трехмерном мире, которое мы хотим изобразить на фотографии.

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

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

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

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

В нашем примере с фотографированием яблока мировая система координат находит положение яблока в пространстве комнаты независимо от расположения камеры. Координаты \( X_w, Y_w \) и \( Z_w \) представляют собой числа, которые определяют положение яблока вдоль трех взаимно перпендикулярных осей (декартова система координат): горизонтальная ось (\( X_w \)), вертикальная ось (\( Y_w \)) и глубина (\( Z_w \)).

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

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

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

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

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

Предположим, что камера была установлена в начале координат комнаты и настроена таким образом, что ее координатные оси \( X, Y \) и \( Z \)совпадали бы с соответствующими осями \( X_w, Y_w \) и \( Z_w \) комнаты. В такой ситуации эти две системы координат стали бы эквивалентны друг другу.

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

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

Рисунок 2. Оси камеры

где ось \( Z \) смотрит в направлении объектов, ось \( Y \) — вниз, а ось \( X \) — направо.

Мировые координаты и координаты камеры связаны матрицей вращения \( 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 \)

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

Перед тем, как перейти к камере с точечной диафрагмой (pinhole) и системе координат изображения, нам нужно вспомнить однородные координаты.

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

Однородные координаты позволяют легко выполнять различные геометрические преобразования с использованием умножения матриц (например, трансляцию, масштабирование и поворот). Это удобно, потому что все преобразования можно выразить линейной операцией, просто умножением на матрицу.

В однородных координатах точка в трехмерном пространстве представляется четырьмя числами \( (X,Y,Z,W) \), где \( W \) является весовым коэффициентом. И эта точка соответствует точке \( (\frac {X}{W}, \frac {Y}{W}, \frac {Z}{W}) \) в декартовых координатах.

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

Преимущества однородных координат: компактное представление данных в более простой реализации преобразований и возможность объединения нескольких преобразований в одно с использованием матричных операций.

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

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

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

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

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

2D картинка объекта на плоскости изображения будет перевернута (вверх ногами) и обратна (слева направо), так как свет распространяется по прямолинейным линиям.

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

Для упрощения работы и анализа часто используется концепция виртуальной плоскости изображения вместо фактической. Эта виртуальная плоскость размещается на расстоянии \( f \) перед отверстием и служит местом, где «виртуально» формируется аналогичное изображение, как на сенсоре, но уже без перевернутого представления.

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

Мы получили точку с координатами \( X_c, Y_c, Z_c \). Теперь мы сможем спроецировать эту точку на плоскость изображения.

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

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

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

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

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

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

\( p \sim P \)

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

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

где \( 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} \)

Заключение

В этой статье мы рассмотрели, как координаты точек в трехмерном пространстве преобразуются в координаты камеры с помощью матрицы вращения \( R \) и вектора переноса \( t \), после чего проецируются в изображение на фотографии с учетом различных параметров камеры \( K \).

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

В следующей статье мы рассмотрим калибровку камеры, сбор датасета, различные виды маркеров и проблему дисторсии.

Телеграм-канал

DeepSchool

Короткие посты по теории ML/DL, полезные
библиотеки и фреймворки, вопросы с собеседований
и советы, которые помогут в работе

Открыть Телеграм

Увидели ошибку?

Напишите нам в Telegram!