OpenCV Camera Calibration математический фон - PullRequest
0 голосов
/ 24 июня 2019

Я только начал работать с OpenCV и откалибровал две камеры. Я калибрую камары в питоне с помощью шахматной доски. Я использую функции drawChessboardCorners и calibrateCamera. Все отлично работает.

Документация этих функций описывает, как работать с этими функциями. Но мне было интересно, что это за магия. Я задаюсь вопросом о математическом фоне калибровки камеры в OpenCV.

Как OpenCV определяет углы шахматной доски?

Как именно это используется для калибровки камеры?

Ответы [ 2 ]

1 голос
/ 24 июня 2019

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

Камера - это в основном устройство, которое выполняет преобразование (известное как проект) точек из трехмерного пространства в двухмерное пространство (пространство изображения). При анализе формирования изображения мы довольно часто используем модель, известную как камера-обскура , где изображения формируются следующим образом:

enter image description here

Немного более схематично, мы можем видеть формирование изображения следующим образом:

enter image description here

, где Y1 - плоскость изображения, x3 - расстояние от камеры до объекта (которое мы будем называть z, глубина), x1 - смещение по оси X1 3D-точки P от оптической оси камера х3. O - камера с фокусным расстоянием f, а y1 - расстояние между центром изображения и пикселем Q, соответствующим точке P.

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

enter image description here

, мы можем записать проекцию как:

enter image description here

, где s - действительный коэффициент масштабирования, а матрица pi - матрица проекции.

Эта модель подходит для телеобъективов (с большим фокусным расстоянием) и мелких объектов с учетом их расстояния до камеры. Точно только для телецентрических линз. Более точной моделью для камер, которые мы используем, является перспективная проекция . Чтобы получить интуицию, объекты в плоскости изображения кажутся больше, если трехмерный объект находится ближе к камере. Немного математически, из-за сходства треугольника, y1 пропорционален x1. Коэффициент пропорциональности равен f / x3 или f / z. Если в данный момент f будет 1, это приведет к следующей функции проекции:

enter image description here

Как видите, проекция не может быть представлена ​​в виде умножения матриц, поскольку она больше не является линейным преобразованием. Что не идеально - умножение матриц имеет очень хорошие свойства. Итак, введем трюк, известный как однородные координаты . Для каждой точки мы добавляем еще одну координату (таким образом, 2D-точки теперь представлены с использованием 3 координат, а 3D-точки представлены с использованием 4 координат), и мы сохраняем четвертую координату, нормализованную до 1 (подумайте о неявном делении на последнюю координату).

Теперь наша точка P становится:

enter image description here

и мы можем написать матрицу перспективной проекции как:

enter image description here

, где последнее деление происходит "неявно" из-за использования нами однородных координат, а тильда указывает вектор в однородных координатах.

И вот оно! Это матрица перспективной проекции. И обратите внимание, что это необратимое преобразование.

Однако камеры не только проецируют 3D-точки на плоскость 2D-изображения. После проецирования они выполняют преобразование в дискретное пространство изображения. Это представлено матрицей, известной как матрица камеры intrisinc K:

enter image description here

, где fx и fy - независимые фокусные расстояния по осям x и y (которые обычно разумно считать равными), s - это перекос, который учитывает, что ось изображения не перпендикулярна оптической оси (в современном камеры близки к 0), а cx, cy представляют источник изображения (обычно центр изображения).

Камеры обычно добавляют искажения к изображению, и для них существуют различные математические модели.

Процесс калибровки камеры относится к определению встроенной матрицы камеры и параметров для моделей искажения.

Это можно сделать с помощью следующего грубого процесса:

  • Начните с нескольких изображений с разных точек зрения модели известного макета и размера
  • Для каждого изображения определите несколько точек известного соответствия.Обычно это углы, поскольку их можно легко и надежно сопоставить друг с другом.
  • С каждой из этих точек связана соответствующая матрица гомографии H = l * K * (R | T), где l - реальное масштабированиефактор, K - матрица внутренней камеры, (R | T) - матрица, которая представляет вращение и перемещение камеры в трехмерном пространстве (это называется матрицей внешней камеры).
  • На основе точечных соответствийи используя гомографии, есть решения в замкнутой форме, которые определяют внутренние параметры камеры.Без искажений требуется минимум 3 изображения.Предполагая, что перекос равен 0, требуется как минимум 2 изображения.На практике большее количество изображений приводит к более точным результатам.
  • Как только внутренние значения известны, внешние параметры (вращение и перемещение) для каждого вида могут быть вычислены
  • Также можно оценить искажения.
  • В некоторых процедурах используется оптимизация по всем изображениям для дальнейшего уточнения результатов решения в закрытой форме.

Чтобы увидеть реальные уравнения замкнутой формы, взгляните на очень хороший бумага У. Бургера (Burger, 2016).

«Библия» этого поля - «Геометрия множественного обзора в компьютерном зрении», автор А. Циссерман.

1 голос
/ 24 июня 2019

См. "Изучение OpenCV" Гари Брадски и Адриана Келера.Существует большая глава о калибровке камеры с хорошим математическим фоном о модели камеры с точечным отверстием, различных искажениях и способах их уменьшения (посредством калибровки).

Углы на изображении обнаруживаются с использованием его 2-й производной .

...