Что такое калибровка камеры видеонаблюдения
Калибровка камеры (Camera Calibration)
Tags: Калибровка камера матрица внешние внутренние параметры вращение перенос OpenCV искажения объектива шахматная доска Python
Введение
Калибровка — это процедура установления зависимости между входом (эталонные данные) и выходом (измеренные данные)
Калибровка камеры – это задача получения точных математических отношений между точками в 3D пространстве и их 2D проекциями на экране камеры. Цель процесса калибровки — найти матрицы внешних и внутренних параметров, а также коэффициенты радиальных и тангенциальных искажений объектива.
Одна из стандартных процедур калибровки камеры — это использование шаблона шахматной доски. Система координат камеры связывается с системой координат шахматной доски через распознавание углов клеток шахматной доски. По угловым точкам через решение системы уравнений определяются параметры калибровки.
Алгоритм калибровки одной камеры, а также алгоритм стереокалибровки реализован в библиотеке OpenCV.
Матрица внешних параметров
При калибровке внешние параметры определяют взаимное положение камеры и шахматной доски. Перед выводом зависимостей необходимо знать, как привязаны системы координат к этим элементам и какой из них подвижен.
На основе анализа результатов использования функций OpenCV определяем по элементам матрицы смещений, что СК камеры неподвижна, а шахматная доска перемещается относительно нее.
Оси X и Y направлены соответственно влево и вниз. Начало СК шахматной доски привязано к левой верхней вершине. Начало СК камеры находится в точке оптического центра (подробнее см. внутренние параметры камеры).
Для определения положения объекта в 3D пространстве достаточно 6 независимых параметров — 3 угла и 3 перемещения. Выбираем 6 удобных параметров и указываем с ними последовательность из 6 элементарных преобразований:
Для каждого из 6 преобразований запишем матрицы в однородных координатах :
Затем получаем композицию матриц, последовательно перемножая их.
Функция cv2.calibrateCamera выполняет основную задачу по калибровке. Она возвращает векторы поворота (3 * 1) и векторы переноса (3 × 1) калибровочного шаблона относительно камеры. Функция cv2.Rodrigues (rvec) преобразует вектор поворота в матрицу вращения. Функция np.concatenate((R_matrix, tvec), axis=1) объединяет матрицу вращения и вектор переноса в матрицу движения:
Сопоставляя элементы обоих матриц получаем 6 параметров:
Тестирую полученные выражения (программный код приводится ниже):
По модулю и по знаку углы beta, alpha и gamma соответствуют.
Сравниваю результаты для перемещений n, p и h с элементами матрицы смещений для того же фрейма (см. рисунок в начале подраздела).
Эти результаты также соответствуют.
Матрица внутренних параметров
Внутренние параметры определяют проективное преобразование от координат 3-D камеры в 2D координаты изображений в пиксельном представлении.
В матричном виде это преобразование записывается:
Положение точек снимка определяется в пиксельной системе координат uv, начало которой совмещено с верхним левым пикселем изображения.
Координаты центрального пикселя Cx и Cy (оптический центр) находятся на пересечении главной оптической оси объектива с матрицей камеры. Они также как и координаты любой другой точки на изображении определяются в пикселях — округляются с точностью до пикселя.
Посмотрим, как получена матрица внутренних параметров. Представим СК xyz, начало которой совпадает с фокусом камеры. Определим зависимости для проективного преобразования 3D координат xyz в 2D координаты изображения (uv) — в пиксельных единицах измерения:
пиксели в датчике изображения могут быть не квадратными, поэтому у нас два разных фокусных расстояния fx и fy.
Более простое для восприятия представление зависимостей:
Первые слагаемые в зависимостях для u и v округляются до целого.
В матричном виде зависимости запишутся:
Знак при координате y’ зависит от разновидности системы координат цифрового изображения. Различают две прямоугольных системы координат:
В фотограмметрии традиционно применяется левая СК (на рис. слева). В оконных WinAPI приложениях также используют эту систему координат. Правая СК (на рис. справа) принята при записи изображений в файл во всех форматах (включая и формат BMP файла). Для перехода из одной СК в другую достаточно выполнить преобразование v=H-u, где H — размер изображения в пикселях по вертикали.
Коэффициенты радиальных и тангенциальных искажений объектива
Существуют два основных вида дисторсии: радиальная дисторсия и тангенциальная дисторсия.
Радиальная дисторсия — искажение изображения в результате неидеальности параболической формы линзы. Искажения, вызванные радиальной дисторсией, равны 0 в оптическом центре сенсора и возрастают к краям. Как правило, радиальная дисторсия вносит наибольший вклад в искажение изображения.
Тангенциальная дисторсия — искажения изображения, вызванные погрешностями в установке линзы параллельно плоскости изображения.
Для устранения дисторсии координаты пикселей пересчитываются с помощью следующих уравнений:
Особенности калибровки камеры с помощью шахматной доски
Одна из стандартных процедур для вычисления всех неизвестных, указанных выше, или простой калибровки камеры — это использование шаблона шахматной доски. Система координат камеры связывается с системой координат шахматной доски через распознавание углов клеток шахматной доски (места, где два темных квадрата касаются друг друга).
Такие точки легко распознаются. OpenCV предоставляет ряд функций для калибровки камер использованием шаблона шахматной доски (см. Выполнение калибровки).
Можно скачать изображение шахматной доски, распечатать его на принтере и приклеить на жесткую плоскую поверхность — стекло, картон или фанеру. К подготовке шаблона необходимо подходить с особой тщательностью. Подробнее см. статью Калибровка монокулярной камеры и комментарии к статье Как проверить правильность калибровки вебкамеры?.
Если шахматная доска квадратная, то первая вершина однозначно не определена — может изменяться при повороте доски или камеры.
Подготовка изображений для калибровки
Итак, нам нужно выполнить калибровку Web-камеры, встроенной в notebook, по автоматически распознаваемым координатам вершин шахматной доски.
Мы должны заснять шахматную доску при разных ориентациях относительно Web-камеры. Можно зафиксировать камеру, а смещать шахматную доску. С точки зрения математики это одно и тоже.
Для подготовки изображений с Web-камеры ноутбука используем следующее Python приложение:
Запускаете приложение, ожидаете, пока включится камера. Выбираете ориентацию шахматной доски и нажимаете клавишу SPACE. В результате этого сохраняется png-файл изображения в директории проекта, где находится файл кода. Создайте несколько изображений (> 10) и нажмите клавишу ESC для выхода из программы.
Выбирайте ориентацию шахматной доски под наклоном и на расстоянии около 1м.
Выполнение калибровки
Создаем новый Python проект и помещаем изображения для калибровки камеры в папке frames — внутри проекта, там же, где и код приложения. Изображение для тестирования помещаем внутри проекта в папке frames_test.
Следующий Python код калибрует камеру по подготовленным изображениям и демонстрирует тестируемое изображение до и после калибровки:
Перед запуском программы обратите внимание, чтобы значение переменных boardWidth и boardHeight соответствовало количеству вершин шахматной доски. Если соответствия не будет, такие изображения программой игнорируются.
Функция cv2.calibrateCamera выполняет основную задачу по калибровке. Она оценивает внутренние и внешние параметры камеры для каждого из видов калибровочного шаблона. Алгоритм основан на A Flexible New Technique for Camera Calibration и Camera Calibration Toolbox for Matlab.
Для калибровки необходимо знать координаты точек 3D-объекта и определить соответствующие им 2D-проекции. Этого несложно добиться, используя объект с известной геометрией и легко обнаруживаемыми характерными точками. Такой объект называется калибровочным шаблоном, и OpenCV имеет встроенную поддержку шахматной доски в качестве такого шаблона (см. FindChessboardCorners).
rms, mtx, dist, rvecs, tvecs = cv2.calibrateCamera (objpoints, imgpoints, img_size,None,None)
Функция построена на итеративном алгоритме оптимизации. Алгоритм выполняет следующие шаги:
Функция возвращает окончательную ошибку повторного проецирования rms
found, rvec, tvec = cv2.solvePnP (objp, corners, mtx, dist)
где found — (True или False). Смысл других параметров функции solvePnP аналогичен функции calibrateCamera.
Логика использования этих функций следующая. При изменении положения камеры ее внутренние параметры сохраняются. Поэтому, можно сначала откалибровать внутренние параметры камеры с помощью calibrateCamera, а затем использовать функцию solvePnP для определения внешних параметров камеры по заданным внутренним параметрам и точкам всего лишь одного изображения.
Обратите внимание: если внутренние параметры известны, нет необходимости использовать эту функцию calibrateCamera только для оценки внешних параметров. Вместо этого используйте solvePnP.
Подобранные при калибровке коэффициенты дисторсии устраняют искажения только вокруг шахматной доски. За ее пределами искажения усиливаются — очевидно, это компенсация за выравнивание изображения вокруг шахматной доски. Изображение после калибровки может быть представлено обрезанным — удаляется часть рисунка с искажениями. Для этого значение 3-го параметра указанной ниже функции заменяется (с 1 на 0):
R_matrix, _ = cv2.Rodrigues (rvec)
Эта функция преобразует вектор поворота rvec (3 * 1), возвращаемый функциями calibrateCamera и solvePnP, в матрицу поворота (3 * 3). Кроме этого, вы можете объединить их в матрицу движения [R t]:
Точность калибровки
Точность калибровки камеры оценивается по среднеквадратичной ошибке (Root Mean Square Error, RMS Error, RMSE) перепроецирования точки.
Что такое ошибка перепроецирования точки? По положению точки, как минимум на двух изображениях камеры, вычисляются ее трехмерные координаты с использованием внутренних и внешних параметров камеры.
Как только трехмерные координаты точки вычислены, трехмерная точка повторно проецируется на все изображения, которые она появляется. Расстояние между отмеченной и перепроецированной точкой на одном изображении является ошибкой перепроецирования точки.
Функция cv2.calibrateCamera возвращает среднеквадратичную ошибку повторного проецирования (rms), обычно она должна находиться в пределах от 0.1 до 1.0 пикселя при хорошей калибровке.
Среднеквадратичная ошибка 1.0 означает, что в среднем каждая из перепроецируемых точек (Reprojected point) находится на расстоянии 1.0 пикселя от своего фактического положения (3D point, marked on the image).
Rms находится через решение задачи оптимизации — определяется набор параметров (cameraMatrix, distCoeffs, rvecs и tvecs), который минимизирует rms итеративно.
Калибровка камеры с использованием с OpenCV
Камера является неотъемлемой частью многих автоматизированных систем, например, в робототехнике, в наблюдениях и исследовании космоса, в социальных сетях, промышленной автоматизации и даже в индустрии развлечений.
Для эффективного использования камер во многих приложениях особенно важно знать их характеристики.
Здесь вы узнаете шаги калибровки камеры и поймете их значение. Кроме того, на примере шахматной доски мы поделимся кодом Python для калибровки.
Что такое калибровка камеры?
Калибровка એ — это процесс оценки параметров камеры.
Это значит, что у нас есть полная информация (технические характеристики или расчетные коэффициенты) о камере, необходимые для определения точной взаимосвязи между 3D‑точкой в реальном мире и соответствующим 2D‑изображением, проекцией (каждым пикселем) на изображении, снятом откалиброванной камерой.
Обычно для этого необходимо получить два вида параметров:
На рисунке ниже для искажения изображения были использованы параметры объектива, оцененные при геометрической калибровке.
Влияние геометрической коррекции на искажение изображения
Калибровка камеры с использованием OpenCV
Для понимания процесса калибровки, нам сначала необходимо понять геометрию формирования изображения. Как показано в предыдущей публикации (желательно её прочитать, нажав на ссылку), чтобы найти проекцию 3D‑точки на плоскость изображения, сначала надо перевести точку (X_w, Y_w, Z_w) из мировой системы координат в систему координат камеры с учётом внешних параметров (Вращение R и Смещение t ).
\mathbf
= \mathbf
Как упоминалось в предыдущем посте, внутренняя матрица \mathbf
где, f_x, f_y — фокусные расстояния x и y (да, они обычно одинаковы).
c_x, c_y — координаты x и y оптического центра в плоскости изображения. Использование центра изображения обычно является достаточно хорошим приближением.
\gamma — это перекос между осями. Обычно это 1.
Цель калибровки камеры
Таким образом, алгоритм калибровки камеры имеет следующие входы и выходы:
Примечание. В OpenCV встроенная матрица камеры не имеет параметра перекоса. Таким образом, матрица имеет вид
Методы калибровки камеры
Ниже перечислены основные методы калибровки камеры:
Калибровка камеры — шаг за шагом
Процесс калибровки объясняется блок-схемой, приведенной ниже.
Блок-схема калибровки камеры
Шаг 1: Определение действительных мировых координат 3D точек шаблона шахматной доски известного размера
Наши 3D точки — это углы клеток шахматной доски. Любой угол доски может быть выбран в качестве начала мировой системы координат. Оси X_w и Y_w расположены вдоль стены, а ось Z_w перпендикулярна стене. Поэтому все точки на шахматной доске находятся на плоскости XY (т.е. Z_w = 0 ).
Почему шахматная доска так широко используется в калибровке?
Клетки шахматной доски легко различимы на изображении и их легко обнаружить. Более того, углы клеток шахматной доски идеально подходят для их локализации, поскольку имеют резкие градиенты в двух направлениях. Кроме того, углы находятся на пересечении линий шахматной доски. Все эти факторы определяют надежность поиска углов клеток, расположенных в шахматном порядке.
Результат после отображения обнаруженных углов шахматной доски
Шаг 2: Захват нескольких изображений шахматной доски с разных точек наблюдения
Затем, не изменяя местоположение нашей шахматной доски, мы делаем несколько снимков, смещая камеру.
Можно зафиксировать камеру, а смещать шахматную доску. С точки зрения математики это одно и то-же.
Шаг 3: Вычисление 2D координат клеток шахматной доски в пикселях
Теперь у нас есть несколько изображений шахматной доски. Мы знаем 3D координаты точек шахматной доске. Последнее, что нам нужно, это координаты углов клеток шахматной доски на изображениях в пикселях.
3.1 Поиск углов шахматной доски
Возвращаемое значение функции true или false в зависимости от того, был обнаружен шаблон или нет.
3.2 Уточнение координат клеток шахматной доски
Хорошая калибровка — это точность. Чтобы получить хорошие результаты, важно получить координаты клеток с субпиксельной точностью.
Функция OpenCV cornerSubPix берет клетки исходного изображения и ищет лучшее местоположение углов клеток, расположенных по соседству. По своей сути алгоритм является итерационным и поэтому нам необходимо указать критерии завершения (например, количество итераций и/или точность).
Python
Step 4: Калибровка камеры
Последний шаг калибровки состоит в том, чтобы передать 3D-точки в мировых координатах и их 2D-положения на всех изображениях в метод calibrateCamera OpenCV. Реализация основана на статье «A Flexible New Technique for Camera
Calibration» Чжэнъю Чжан. Математика немного сложна и требует знания линейной алгебры.
Давайте посмотрим на синтаксис calibrateCamera :
Код для калибровки камеры
Код для калибровки камеры приведен ниже. Однако загрузить все изображения и код намного проще, посетив Github.
Скрипт Python для калибровки камер
Пожалуйста, внимательно прочитайте комментарии, объясняющие каждыйшаг
Фотограмметрическая калибровка съемочных камер
Задачи и методы калибровки камер
Калибровка камер состоит в определении значений элементов внутреннего ориентирования камеры и систематических ошибок оптической системы, вызванных главным образом дисторсией объектива.
Элементами внутреннего ориентирования являются фокусное расстояние (f) и координаты главной точки (xo, yo).
Для камер имеющих координатные метки, определяют также их координаты.
Систематические ошибки оптической системы определяют отличия реальной физической системы от ее математической модели. Дисторсия объектива влияет на геометрию центрального проектирования, и как следствие не выполняется принцип коллинеарности (нарушается центральная проекция изображения)
Различают два типа дисторсии объектива: радиальную и тангенциальную. Радиальная дисторсия намного превышает тангенсальную, поэтому, как правило, определяют только радиальную дисторсию. На практике, фотокамеры, изготовленные специально для фотограмметрических измерений имеют объективы с очень маленькой дисторсией, поэтому в процессе калибровки достаточно бывает определить только фокусное расстояние и координаты главной точки. Для современных цифровых камер, главной проблемой является низкое качество изготовления объектива, связанное с большой дисторсией (может достигать 100мкм и более) и не центрирование отдельных элементов объектива, что приводит к неперпендикулярности главного оптического луча к плоскости изображения. Поэтому при калибровке таких камер целесообразно определять не только радиальную дисторсию, но и децентрацию оптической системы (нецентрированная или тангенциальная дисторсия объектива).
Дисторсия объектива может быть описана различными уравнениями, например:
(8.1)
(8.2)
Где dx, dy – поправки в координаты точек снимка за дисторсию объектива; x,y – координаты точек снимка; k1,k2,k3 – коэффициенты радиальной дисторсии; p1,p2 – коэффициенты нецентрированной дисторсии объектива; r0 – радиус- вектор, соответствующий нулевой дисторсии; r– расстояние от главной точкиxo, yo:
Существует три метода калибровки камер:
· Калибровка с помощью многокалиматорного калибратора
· Калибровка с помощью тест объекта.
Калибровка с помощью многокалиматорного калибратора выполняется на специальном устройстве, которое позволяет определить элементы внутреннего ориентирования камеры в лабораторных условиях. Этот метод в настоящее время редко используется, из-за необходимости иметь дорогостоящее оборудование.
Калибровка с помощью тест-объекта основана на вычислении параметров калибровки по результатам измерений координат точек снимков тест-объекта. Тест-объект представляет собой специальный объект с множеством точек с известными координатами.
Самокалибровка это метод калибровки камеры, который позволяет определять параметры калибровки в процессе фототриангуляции, выполняемой по снимкам реальной съемки.
Рассмотрим более подробно два последних метода, как наиболее употребимых.
Калибровка камер с помощью пространственного тест-объекта
Этот метод основан на съемке тест-объекта. На рис.8.1 показан пример в виде пространственной фигуры, на которой маркируются точки. Координаты этих точек определяются с необходимой точностью одним из геодезических методов.
Рис.8.1
После съемки этого объекта исследуемой камерой решается обратная засечка, на основе расширенных уравнений коллинеарности:
(8.3)
где dx,dy – поправки в координаты точек снимка за дисторсию объектива, вычисляемые по (8.1) или (8.2). В качестве неизвестных в уравнениях (8.3) выступают элементы внутреннего f,xo,yo, и внешнего ориентирования XS,YS,ZS, w,a,k и коэффициенты дисторсии k1,k2,k3, p1,p2. Для их определения составляют эти уравнения по измеренным координатам точек снимка x,y и координатам X,Y,Z соответствующих точек тест-объекта.Задача решается по способу наименьших квадратов, методом последовательных приближений.
Для камер, в которых происходит преобразование видеосигнала в цифровую форму, рекомендуется добавить к уравнениям (8.3) коэффициенты аффинного преобразования а1 иа2,то есть:
(8.4)
Чтобы решить проблему калибровки камеры корректно и надежно на основе уравнений (8.3) и (8.4) большое значение имеет тест-объект (размеры, количество точек и точность их координат) и метод его съемки. Съемку следует выполнять таким образом, чтобы точки объекта покрывали всю площадь снимка (рис. 8.5)
Размеры тест-объекта зависят от типа камеры, подлежащей калибровке, т.е. зависят от оптимальных отстояний YS съемки, для которых предназначена данная камера. Если приблизительно известно это отстояние и фокусное расстояние камеры, то можно вычислить размеры тест-объекта из рис. 8.5. В качестве теста можно использовать фасад здания, на котором маркируются с большой густатой опорные точки. Что касается распределения точек, то их следует располагать равномерно по всей площади в плоскости, параллельной плоскости снимка (так, чтобы покрыть весь снимок точками для надежного определения коэффициентов дисторсии объектива) и в перпендикулярном направлении (по глубине) для определения фокусного рассояния камеры.
На рис. 8.6 показаны примеры тест-объектов.
Если опорные точки тест-объекта будут находиться в одной плоскости, то в следствии корреляции фокусного расстояния f с отстоянием YS при решении обратной засечки приводит к неопределенности решения. Это обстоятельство поясняет рис. 8.7.
Предположем, что плоский тест-объект был снят камерой с фокусным расстоянием f из точки S,установленной от объекта на отстоянии YS =SN. В результате решения обратной засечки при совместном нахожденииf и Ysвозникает многозначность решения, одним из которых является f’ и Y’S (рис.8.7) при котором все проектирующие лучи пересекаются в точке S’. В тоже время для пространственного объекта существует только одно решение в точке S, так как в точке S’ не пересекаются все лучи (рис. 8.8).
Рис.8.8
Очевидно, что чем больше третье измерение объекта (h), тем более надежно решение. Из экспериментальных исследований известно, что отношение h/YS не должно быть меньше чем 1/5.
Точность координат точек тест-объекта с которой их следует определять, можно подсчитать по простой формуле:
где dx – точность с которой необходимо определить параметры калибровки. Предположим, что dx =0.001mm, фокусное расстояние камеры примерно равно f=100mm, съемка будет выполняться с расстояния YS=30m, тогда dX = 0.1mm