31.08.2019

Калибровка камеры в Adobe Camera RAW. Калибровка Kinect v2 с помощью OpenCV на Python


Не так давно мы начали пару проектов, в которых необходима оптическая система с каналом дальности, и решили для этого использовать Kinect v2. Поскольку проекты реализуются на Python, то для начала нужно было заставить работать Kinect из Python, а затем откалибровать его, так как Kinect из коробки вносит некоторые геометрические искажения в кадры и дает сантиметровые ошибки в определении глубины.

До этого я никогда не имел дела ни с компьютерным зрением, ни с OpenCV, ни с Kinect. Исчерпывающую инструкцию, как со всем этим хозяйством работать, мне найти тоже не удалось, так что в итоге пришлось порядком повозиться. И я решил, что будет не лишним систематизировать полученный опыт в этой статье. Быть может, она окажется небесполезной для какого-нибудь страждущего, а еще нам нужна популярная статья для галочки в отчетности.


Минимальные системные требования : Windows 8 и выше, Kinect SDK 2.0, USB 3.0.

Таблица I. Характеристики Kinect v2:


Таким образом, передо мной стояли следующие задачи:

  1. завести Kinect на Python;
  2. откалибровать RGB и ИК камеры;
  3. реализовать возможность совмещения кадров RGB и ИК;
  4. откалибровать канал глубины.
А теперь подробно остановимся на каждом пункте.

1. Kinect v2 и Python

Как я уже говорил, до этого я с компьютерным зрением дел не имел, но до меня доходили слухи, что без библиотеки OpenCV тут никуда. А поскольку в ней есть целый модуль для калибровки камер, то первым делом я собрал OpenCV с поддержкой Python 3 под Windows 8.1. Тут не обошлось без некоторой мороки, обычно сопровождающей сборку open-sourсe проектов на Windows, но все прошло без особых сюрпризов и в целом в рамках инструкции от разработчиков.
С Kinect-ом же пришлось повозиться несколько подольше. Официальный SDK поддерживает интерфейсы только для C#, С++ и JavaScript. Если зайти с другой стороны, то можно увидеть, что OpenCV поддерживает ввод с 3D камер, но камера должна быть совместима с библиотекой OpenNI. OpenNI поддерживает Kinect, а вот сравнительно недавний Kinect v2 - нет. Впрочем, добрые люди написали драйвер для Kinect v2 под OpenNI. Он даже работает и позволяет полюбоваться на видео с каналов устройства в NiViewer, но при использовании с OpenCV вылетает с ошибкой. Впрочем, другие добрые люди написали Python-обертку над официальным SDK. На ней я и остановился.

2. Калибровка камер

Камеры не идеальны, искажают картинку и нуждаются в калибровке. Чтобы использовать Kinect для измерений, было бы неплохо устранить эти геометрические искажения как на RGB камере, так и на датчике глубины. Поскольку ИК камера является одновременно и приемником датчика глубины, то мы можем использовать ИК кадры для калибровки, а затем результаты калибровки использовать для устранения искажений с кадров глубины.

Калибровка камеры осуществляется с целью узнать внутренние параметры камеры, а именно - матрицу камеры и коэффициенты дисторсии.

Матрицей камеры называется матрица вида:

где

(с u , c v ) - координаты принципиальной точки (точки пересечения оптической оси с плоскостью изображения, в идеальной камере находиться точно в центре изображения, в реальных немного смещена от центра);

f u , f v - фокусное расстояние f , измеренное в ширине и высоте пикселя.

Существуют два основных вида дисторсии: радиальная дисторсия и тангенциальная дисторсия.

Радиальная дисторсия - искажение изображения в результате неидеальности параболической формы линзы. Искажения, вызванные радиальной дисторсией, равны 0 в оптическом центре сенсора и возрастают к краям. Как правило, радиальная дисторсия вносит наибольший вклад в искажение изображения.

Тангенциальная дисторсия - искажения изображения, вызванные погрешностями в установки линзы параллельно плоскости изображения.

Для устранение дисторсии координаты пикселей можно пересчитать с помощью следующего уравнения :

Где (u,v ) - первоначальное расположение пикселя,
(u corrected ,v corrected ) - расположение пикселя после устранения геометрических искажений,
k 1 , k 2 , k 3 - коэффициенты радиальной дисторсии,
p 1 , p 2 - коэффициенты тангенциальной дисторсии,
r 2 =u 2 +v 2 .

Точность измерения параметров камеры (коэффициенты дисторсии, матрица камеры) определяется средней величиной ошибки перепроэцирования (ReEr, Reprojection Error ). ReEr - расстояние (в пикселях) между проекцией P" на плоскость изображения точки P на поверхности объекта, и проекцией P"" этой же точки P , построенной после устранения дисторсии с использованием параметров камеры.

Стандартная процедура калибровки камеры состоит из следующих шагов:

1) cделать 20-30 фотографий с разными положениями объекта с известной геометрией шахматной доски;

2) определить ключевые точки объекта на изображении;

Found, corners = cv2.findChessboardCorners(img, #изображение PATTERN_SIZE,#сколько ключевых точек, в нашем случае 6x8 flags)#параметры поиска точек

3) найти такие коэффициенты дисторсии которые минимизирует ReEr .

ReEr, camera_matrix, dist_coefs, rvecs, tvecs = cv2.calibrateCamera(obj_points,#координаты ключевых точек в системе координат объекта #(х", y", z"=0) img_points,#в системе координат изображения (u,v) (w, h),#размер изображения None,#можно использовать уже известную матрицу камеры None, #можно использовать уже известные коэффициенты дисторсии criteria = criteria,#критерии окончания минимизации ReEr flags = flags)#какие коэффициенты дисторсии мы хотим получить
В нашем случае, для RGB камеры среднее значение ReEr составило 0.3 пикселя, а для ИК камеры - 0.15. Результаты устранения дисторсии:

Img = cv2.undistort(img, camera_matrix, dist_coefs)

3. Совмещение кадров с двух камер

Для того чтобы получить для пикселя как глубину (Z координату), так и цвет, для начала необходимо перейти из пиксельных координат на кадре глубины в трехмерные координаты ИК камеры :

Где (x 1 ,y 1 ,z 1 ) - координаты точки в системе координат ИК камеры,
z 1 - результат возвращаемый датчиком глубины,
(u 1 ,v 1 ) - координаты пикселя на кадре глубины,
c 1,u , c 1,v - координаты оптического центра ИК камеры,
f 1,u , f 1,v - проекции фокусного расстояния ИК камеры.

Затем нужно перейти из системы координат ИК камеры к системе координат RGB камеры. Для этого требуется переместить начало координат с помощью вектора переноса T и повернуть систему координат с помощью матрицы вращения R :

После чего нужно перейти из трехмерной системы координат RGB камеры к пиксельным координатам RGB кадра:

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

Как видно на результирующей картинке, изображение местами двоится. Такой же эффект можно наблюдать и при использовании класса CoordinateMapper из официального SDK. Впрочем, если на изображении нас интересует только человек, то можно воспользоваться bodyIndexFrame (поток Kinect, позволяющий узнать, какие пиксели относятся к человеку, а какие к фону) для выделения области интереса и устранения двоения.

Для определения матрицы вращения R и вектора переноса T необходимо провести совместную калибровку двух камер. Для этого нужно сделать 20-30 фотографий объекта с известной геометрий в различных положениях как RGB, так и ИК камерой, лучше при этом не держать объект в руках, чтобы исключить возможность его смещения между снятием кадров разными камерами. Затем нужно воспользоваться функцией stereoCalibrate из библиотеки OpenCV. Данная функция определяет позицию каждой из камер относительно калибровочного объекта, а затем находит такое преобразование из системы координат первой камеры в систему координат второй камеры, которое обеспечивает минимизацию ReEr.

Retval, cameraMatrix1, distCoeffs1, cameraMatrix2, distCoeffs2, R, T, E, F = cv2.stereoCalibrate(pattern_points, #координаты ключевых #точек в системе координат объекта (х", y", z"=0) ir_img_points,#в системе координат ИК камеры (u1, v1) rgb_img_points, #в системе координат RGB камеры (u2, v2) irCamera["camera_matrix"],#матрица камеры ИК (брать из calibrateCamera), irCamera["dist_coefs"], #коэф. дис. ИК камеры (брать из calibrateCamera) rgbCamera["camera_matrix"], #матрица RGB камеры (брать из calibrateCamera) rgbCamera["dist_coefs"], #коэф. дис. RGB камеры (брать из calibrateCamera) image_size) #размер изображения ИК камеры (в пикселях)
И в итоге мы получили ReEr = 0.23.

4. Калибровка канала глубины

Датчик глубины Kinect возвращает глубину (именно глубину, т.е. Z-координату, а не расстояние) в мм. Но насколько точны эти значения? Судя по публикации , ошибка может cоставлять 0.5-3 см в зависимости от дистанции, так что есть смысл провести калибровку канала глубины.

Эта процедура заключается в том, чтобы найти систематическую ошибку Kinect (разницу между эталонной глубиной и глубиной, выдаваемой сенсором) в зависимости от расстояния до объекта. А для этого необходимо знать эталонную глубину. Наиболее очевидный путь - расположить плоский объект параллельно плоскости камеры и измерить расстояние до него линейкой. Постепенно сдвигая объект и делая серию измерений на каждом расстоянии, можно найти среднюю ошибку для каждой из дистанций. Но, во-первых, это не очень удобно, во-вторых, найти идеально плоский объект относительно больших размеров и обеспечить параллельность его расположения относительно плоскости камеры сложнее, чем может показаться на первый взгляд. Поэтому в качестве эталона, относительно которого будет рассчитываться ошибка, мы решили взять глубину, определяемую по известной геометрии объекта.

Зная геометрию объекта (например размеры клеток шахматной доски) и расположив его строго параллельно плоскости камеры можно определить глубину до него следующим образом:

Где f - фокусное расстояние,
d - расстояние между проекциями ключевых точек на матрице камеры,
D - расстояние между ключевыми точками объекта,
Z - расстояние от центра проекции камеры до объекта.

В случае если объект расположен не строго параллельно, а под некоторым углом к плоскости камеры, глубину можно определить на основе решения задачи Perspective-n-Point (PnP) . Решению этой проблемы посвящен ряд алгоритмов, реализованных в библиотеке OpenCV, которые позволяют найти преобразование |R, T | между системой координат калибровочного объекта и системой координат камеры, а значит, и определить глубину с точностью до параметров камеры.

Retval, R, T = cv2.solvePnP(obj_points[:, ],#крайние точки в координатах объекта img_points[:, ], #крайние точки в координатах изображения rgbCameraMatrix,#матрица камеры rgbDistortion,#коэффициенты дисторсии flags= cv2.SOLVEPNP_UPNP)#метод решения PnP R, jacobian = cv2.Rodrigues(R)#переходим от вектора вращения к матрице вращения for j in range(0, numberOfPoints): # цикл по ключевым точкам point = numpy.dot(rgb_obj_points[j], R.T) + T.T # Важно! В документации нигде об этом не сказано, #но по итогам экспериментов с модельными изображениями, выяснилось, что нужно транспонировать матрицу вращения computedDistance[j] = point * 1000 # Z-координата в мм
Для калибровки канала глубины мы произвели серию съемок калибровочного объекта на расстояниях ~0.7-2.6 м с шагом ~7 cм. Калибровочный объект располагался в центре кадра параллельно плоскости камеры, на сколько это возможно сделать «на глазок». На каждом расстоянии делался один снимок RGB камерой и 100 снимков датчиком глубины. Данные с датчика усреднялись, а расстояние, определенное по геометрии объекта на основе RGB кадра, принималось за эталон. Средняя ошибка в определении глубины датчиком Kinect на данной дистанции определилась следующем образом:

Где z i RGB - расстояние до i-й ключевой точки по геометрии,
z i depth - усредненное по 100 кадрам расстояние до i-й ключевой точки по данным датчика глубины,
N - количество ключевых точек на объекте (в нашем случае 48).

Затем мы получили функцию ошибки от расстояния путем интерполяции полученных результатов.

На рисунке ниже показано распределение ошибок до и после коррекции на калибровочных кадрах. Всего было сделано 120000 измерений (25 дистанций, 100 кадров глубины на каждой, 48 ключевых точек на объекте). Ошибка до коррекции составила 17±9.95 мм (среднее ± стандартное отклонение), после - 0.45±8.16 мм.

Затем было сделано 25 тестовых кадров (RGB и глубина) калибровочного объекта в различных положениях. Всего 1200 измерений (25 кадров, 48 ключевых точек на каждом). Ошибка до коррекции составила 7.41±6.32 мм (среднее ± стандартное отклонение), после - 3.12±5.50 мм. На рисунке ниже представлено распределение ошибок до и после коррекции на тестовых кадрах.

Заключение

Таким образом, мы устранили геометрические искажения RGB камеры и датчика глубины, научились совмещать кадры и улучшили точность определения глубины. Код этого проекта можно найти

Теория предельного дохода гласит: если понемногу претворять в жизнь небольшие изменения в каждом аспекте вашей деятельности, то результирующее улучшение будет весьма впечатляющим. Эту теорию легко применить и к фотографическому рабочему процессу.

Travel-фотографу, коим я и являюсь, приходится делать огромное количество фотографий с совершенно разными сюжетами. Из недавней двухдневной поездки в Бельгию я привез около двух тысяч фото. И если вы любите вдумчиво просматривать и сортировать карточки на компьютере за чашечкой кофе, то даже нескольких дней вам может не хватить на то, чтобы обработать весь фотосет. В таком случае оптимальный вариант – добиться максимального сходства камерного JPEG с реальной картинкой, а на постобработку тратить минимум времени.

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

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

Разные модели камер видят цвет по-разному, поэтому, чтобы передать картинку так, как запомнил ее ваш глаз и мозг, при постобработке необходимо совершить набор определенных действий. Предварительная калибровка же дает вам весомое преимущество – вам нужно будет совершить эти телодвижения всего один раз для всех снимков. Таким образом, время, затрачиваемое на обработку, значительно сокращается.

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

Несколько лет назад я понял на собственном опыте, что калибровка важна. Тогда я обрабатывал фото заката в Ирландии, снятого на Nikon D2x. Цвета в JPEG по умолчанию получились блеклыми и с явным наличием желтого оттенка, в то время как я отлично помнил яркие пурпурные краски этого заката. Вдруг, по какому-то наитию, я решил использовать калибровочное фото с эталонной цветопередачей, которое я по привычке делал перед каждой съемкой, но никогда до этого не использовал. Я создал с его помощью профиль, применил его ко всей съемке и с удивлением увидел, как каждое фото заиграло новыми, гораздо более реалистичными красками и оттенками.

Применение профиля не всегда заметно меняет цветопередачу, но, как мы уже упомянули выше, теория предельного дохода учит - незаметные улучшения имеют свойство накапливаться. Создание цветовых профилей под вашу камеру - довольно несложное дело. Я использую Xrite ColorChecker Passport и специальный плагин, который позволяет создавать профили прямо из файлов в Adobe Lightroom. Никто не запрещает использовать отдельное, обычно идущее в комплекте с камерой, ПО, чтобы создавать подогнанные под определённый экземпляр камеры профили для Adobe Camera Raw. Компания Adobe хранит эти профили в файлах с DNG расширением, но у вас нет нужды конвертировать гигабайты ваших RAW-архивов в DNG (аббревиатура для Adobe Digital Negative) для применения этих профилей.


Классический вариант эталонной мишени для калибровки состоит из 24 цветов .

Создание профиля камеры

Для начала просто сфотографируйте эталонную мишень в том освещении, при котором будет вестись съемка. Если у вас несколько камер – сделайте снимок каждой, желательно одним и тем же объективом. Я, как правило, использую для этого зум со средним диапазоном фокусных расстояний (вроде 24-70) - чаще всего я снимаю именно им. С учетом того, что я снимаю не в JPEG, а строго в RAW, нет разницы в том, какое выставлять цветовое пространство – AdobeRGB или sRGB. Лично я всегда использую AdobeRGB при обработке – таким образом обеспечивается более широкий цветовой охват. Запомните – для калибровочного фото и для всей последующей съемки важно использовать одно и то же цветовое пространство.

В Lightroom выберите предварительно импортированный калибровочный снимок. В меню File выберите команду Export и далее загрузите пресет ColorChecker Passport, который был установлен автоматически вместе с ПО для корректной работы калибратора. Вам нужно только решить, как назвать новый профиль - автоматика сделает остальное.

После перезапуска Lightroom, получившийся профиль может быть применен к снимку в выпадающем списке Profile панели Camera Calibration. Однако стоит помнить, что вам будут доступны только профили той камеры, которой вы сделали обрабатываемый RAW-файл. Продвинутые пользователи могут сохранить данный профиль как часть профиля Developer Preset и применить его сразу к нескольким фото при импорте.

Есть один нюанс. Теоретически, калибровать камеру, то бишь делать калибровочный снимок, нужно при каждой смене объектива, изменении источника освещения или даже смене значения ISO.

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

Использование индивидуальных профилей

Мне, как travel-фотографу, удобно под каждое место съемки иметь специально заточенный профиль. Если я снимаю в индийском Ладакхе, что близ Гималай, я использую калибровочные снимки оттуда. Если в этой же поездке я отправляюсь в совершенно другой район, например, пышно цветущий Керал в Южной Индии, я повторяю всё заново.

Программа из комплекта ColorChecker Passport позволяет объединить два калибровочных изображения в одно, создавая при этом так называемый двойной профиль Dual-Illuminant DNG Profile. Таким образом можно обеспечить более точную цветопередачу в случае, если вы снимаете при постоянно меняющемся освещении, отличающемся от того, при котором сделан первый калибровочный кадр. Для создания такого двойного профиля необходимо сделать два калибровочных фото в кардинально разных условиях освещения. Затем из этих двух снимков создается двойной профиль, который обладает более точной цветопередачей, чем первоначальный вариант с одиночным снимком.

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

Если вы не пользуетесь Lightroom, можно использовать отдельное ПО для калибратора ColorChecker Passport, чтобы с его помощью создавать DNG профили. Эти DNG профили читаются множеством программ для RAW-процессинга, в том числе Adobe Camera Raw и Capture One. К сожалению, на данный момент Apple Aperture не поддерживает такие профили.

Об авторе. Стив Дэйви – фотограф и писатель из Лондона. Большую часть времени путешествует по самым экзотическим и живописным уголкам этой планеты. Недавно выпустил второе издание книги Footprint Travel Photography, которая стала настольной книгой любого путешественника с камерой в руках.

Если Вам понравился этот материал, то мы будем рады, если Вы поделитесь им со своими друзьями в социальной сети:


Заметим сразу, что поскольку фокусное расстояние и масштабные коэффициенты и входят в матрицу только в комбинациях и , то раздельно оценить все три этих параметра невозможно. Введем новые параметры и , которые и будут подлежать оцениванию.

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

Если положение камеры относительно этой системы известно (т.е. известны матрица и вектор в выражении (6.3)), можно сразу пересчитать координаты опорных точек в стандартную систему камеры и для оценивания внутренних параметров воспользоваться соотношениями (6.1), подставив вместо и и соответственно. Перепишем (6.1) в виде

, .

Для опорных точек получим две системы, состоящие из линейных уравнений каждая, относительно неизвестных , и , :

где , , , , , .

Очевидно, достаточно двух опорных точек, чтобы получить оценки внутренних параметров камеры:

, ,

, .

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

Для увеличения точности оценок внутренних параметров следует использовать большее количество опорных точек. Системы (6.13) в этом случае становятся переопределенными, и для их решения можно применить МНК. Минимизируя норму вектора невязки получим оценки внутренних параметров

, .

Рассмотрим теперь задачу калибровки в более общей постановке. Пусть неизвестны не только матрица , но и положение камеры относительно глобальной системы координат (т.е. матрица и вектор в выражении (6.3)). Такая постановка обусловлена тем, что технически довольно сложно выполнить точные измерения положения камеры и особенно ее ориентации относительно произвольной системы координат. Используя (6.2) и (6.3) и вводя вектор , связь между глобальными координатами опорной точки и координатами ее изображения можно представить в виде

. (6.14)

Матрица имеет размер и называется калибровочной. Обозначим

, ,

, .

Отметим два важных свойства этой матрицы, которые легко получить из (6.15), учитывая (6.4) и (6.5):

. (6.16)

Оказывается, что если элементы калибровочной матрицы известны, через них можно вычислить матрицы , и вектор . Действительно, учитывая (6.4), легко показать, что

Кроме того, непосредственно из (6.14) следует, что

,

, (6.18)

,

.

Задача калибровки, следовательно, сводится к предварительному оцениванию элементов матрицы .

Рассмотрим сначала линейный метод оценивания матрицы . Запишем матричное уравнение (6.14) как систему трех обычных уравнений

или, подставляя в два первых уравнения значение из третьего,

Зная координаты опорных точек в трехмерном пространстве и координаты их проекций в плоскости изображения камеры, получим однородную систему из линейных уравнений относительно 12 неизвестных элементов калибровочной матрицы :

. (6.19)

Представим эту систему в матрично-векторном виде:

, .

Сначала рассмотрим некоторые общие особенности этой системы. Очевидно, что одним из решений этой системы является тривиальное , которое не имеет физического смысла. Известно , что если однородная линейная система имеет хотя бы одно ненулевое решение, то она имеет бесконечное множество решений, причем, если - решение, то и , где - произвольное число, тоже является решением. Здесь необходимо различать два случая.

Первый – когда ранг матрицы на единицу меньше размера вектора . Тогда существует только одно (с точностью до произвольного скалярного множителя) решение. Именно этот случай и представляет практический интерес. Для реализации этого условия необходимо (но недостаточно), чтобы количество уравнений в (6.20) было не менее 11, следовательно, количество опорных точек должно быть не менее шести. Ограничить множество решений можно, воспользовавшись первым из условий (6.16). Действительно, определив некоторое решение , в качестве оценки компонент калибровочной матрицы выберем такое, чтобы Такая нормировка определяет калибровочную матрицу с точностью до знака. Выбрать правильный знак матрицы можно, например, зная, с какой стороны от плоскости глобальной системы координат находится камера, и учитывая первое из соотношений (6.18). Знак должен совпадать со знаком компоненты вектора трансляции.

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

Рис.6.5. Калибровочный объект

Рассмотрим теперь непосредственно метод решения системы (6.20). Обычно, чтобы уменьшить влияние ошибок измерений трехмерных координат опорных точек и координат их изображений в камере, используют больше, чем шесть опорных точек. Тогда система (6.20) становится переопределенной. Кроме того, как и в разделе 6.2, из-за ошибок в измерениях координат реально система (6.20) принимает вид

При условии

Другой подход к оцениванию матрицы основан на минимизации расстояний между измеренными проекциями опорных точек и вычисленными в соответствии с (6.14). Определим величину

которая представляет сумму квадратов этих расстояний, и минимизируем ее по с учетом ограничений (6.16). Решить эту задачу можно посредством методов условной минимизации , изложение которых выходит за рамки данного учебника. Следует отметить только, что такой подход обычно дает результаты оценивания, более устойчивые к ошибкам измерений, чем рассмотренный выше линейный.

Задачи и методы калибровки камер

Калибровка камер состоит в определении значений элементов внутреннего ориентирования камеры и систематических ошибок оптической системы, вызванных главным образом дисторсией объектива.

Элементами внутреннего ориентирования являются фокусное расстояние (f ) и координаты главной точки (x o , y o ).

Для камер имеющих координатные метки, определяют также их координаты.

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

Различают два типа дисторсии объектива: радиальную и тангенциальную. Радиальная дисторсия намного превышает тангенсальную, поэтому, как правило, определяют только радиальную дисторсию. На практике, фотокамеры, изготовленные специально для фотограмметрических измерений имеют объективы с очень маленькой дисторсией, поэтому в процессе калибровки достаточно бывает определить только фокусное расстояние и координаты главной точки. Для современных цифровых камер, главной проблемой является низкое качество изготовления объектива, связанное с большой дисторсией (может достигать 100мкм и более) и не центрирование отдельных элементов объектива, что приводит к неперпендикулярности главного оптического луча к плоскости изображения. Поэтому при калибровке таких камер целесообразно определять не только радиальную дисторсию, но и децентрацию оптической системы (нецентрированная или тангенциальная дисторсия объектива).

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



Где d x , d y – поправки в координаты точек снимка за дисторсию объектива; x,y – координаты точек снимка; k 1 ,k 2 ,k 3 – коэффициенты радиальной дисторсии; p 1 ,p 2 – коэффициенты нецентрированной дисторсии объектива; r 0 – радиус- вектор, соответствующий нулевой дисторсии; r – расстояние от главной точкиx o , y o :

Существует три метода калибровки камер:

· Калибровка с помощью многокалиматорного калибратора

· Калибровка с помощью тест объекта.

· Самокалибровка.

Калибровка с помощью многокалиматорного калибратора выполняется на специальном устройстве, которое позволяет определить элементы внутреннего ориентирования камеры в лабораторных условиях. Этот метод в настоящее время редко используется, из-за необходимости иметь дорогостоящее оборудование.

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

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

Рассмотрим более подробно два последних метода, как наиболее употребимых.

Калибровка камер с помощью пространственного тест-объекта

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


Рис.8.1

После съемки этого объекта исследуемой камерой решается обратная засечка, на основе расширенных уравнений коллинеарности:

(8.3)

где d x ,d y – поправки в координаты точек снимка за дисторсию объектива, вычисляемые по (8.1) или (8.2). В качестве неизвестных в уравнениях (8.3) выступают элементы внутреннего f,x o ,y o , и внешнего ориентирования X S ,Y S ,Z S , w,a,k и коэффициенты дисторсии k 1 ,k 2 ,k 3, p 1 ,p 2 . Для их определения составляют эти уравнения по измеренным координатам точек снимка x,y и координатам X,Y,Z соответствующих точек тест-объекта.Задача решается по способу наименьших квадратов, методом последовательных приближений.

Для камер, в которых происходит преобразование видеосигнала в цифровую форму, рекомендуется добавить к уравнениям (8.3) коэффициенты аффинного преобразования а 1 иа 2 , то есть:

(8.4)

Чтобы решить проблему калибровки камеры корректно и надежно на основе уравнений (8.3) и (8.4) большое значение имеет тест-объект (размеры, количество точек и точность их координат) и метод его съемки. Съемку следует выполнять таким образом, чтобы точки объекта покрывали всю площадь снимка (рис. 8.5)



Размеры тест-объекта зависят от типа камеры, подлежащей калибровке, т.е. зависят от оптимальных отстояний Y S съемки, для которых предназначена данная камера. Если приблизительно известно это отстояние и фокусное расстояние камеры, то можно вычислить размеры тест-объекта из рис. 8.5. В качестве теста можно использовать фасад здания, на котором маркируются с большой густатой опорные точки. Что касается распределения точек, то их следует располагать равномерно по всей площади в плоскости, параллельной плоскости снимка (так, чтобы покрыть весь снимок точками для надежного определения коэффициентов дисторсии объектива) и в перпендикулярном направлении (по глубине) для определения фокусного рассояния камеры.

На рис. 8.6 показаны примеры тест-объектов.

Если опорные точки тест-объекта будут находиться в одной плоскости, то в следствии корреляции фокусного расстояния f с отстоянием Y S при решении обратной засечки приводит к неопределенности решения. Это обстоятельство поясняет рис. 8.7.


Рис.8.8

Очевидно, что чем больше третье измерение объекта (h ), тем более надежно решение. Из экспериментальных исследований известно, что отношение h/Y S не должно быть меньше чем 1/5.

Точность координат точек тест-объекта с которой их следует определять, можно подсчитать по простой формуле:

где d x – точность с которой необходимо определить параметры калибровки. Предположим, что d x =0.001mm, фокусное расстояние камеры примерно равно f =100mm, съемка будет выполняться с расстояния Y S =30m, тогда d X = 0.1mm

Калибровка камер состоит в определении значений элементов внутреннего ориентирования камеры и систематических ошибок оптической системы, вызванных главным образом дисторсией объектива.

Элементами внутреннего ориентирования являются фокусное расстояние (f ) и координаты главной точки (x o , y o ).

Для камер имеющих координатные метки, определяют также их координаты.

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

Различают два типа дисторсии объектива: радиальную и тангенциальную. Радиальная дисторсия намного превышает тангенсальную, поэтому, как правило, определяют только радиальную дисторсию. На практике, современные метрические камеры имеют объективы с очень маленькой дисторсией, поэтому в процессе калибровки достаточно бывает определить только элементы внутреннего ориентирования. Для неметрических камер, главной проблемой является низкое качество изготовления объектива, связанное с большой дисторсией (может достигать 100мкм и более) и не центрирование отдельных элементов объектива, что приводит к неперпендикулярности главного оптического луча к плоскости изображения. Поэтому при калибровке таких камер целесообразно определять не только радиальную дисторсию, но и децентрацию оптической системы (нецентрированная или тангенциальная дисторсия объектива).

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

Где d x , d y – поправки в координаты точек снимка за дисторсию объектива; x,y – координаты точек снимка; k 1 ,k 2 ,k 3 – коэффициенты радиальной дисторсии; p 1 ,p 2 – коэффициенты нецентрированной дисторсии объектива; r 0 – радиус- вектор, соответствующий нулевой дисторсии; r – расстояние от главной точки x o , y o :

Существует три метода калибровки камер:

    Калибровка с помощью многокалиматорного калибратора

    Калибровка с помощью тест объекта.

    Самокалибровка.

Калибровка с помощью многокалиматорного калибратора выполняется на специальном устройстве, которое позволяет определить элементы внутреннего ориентирования камеры в лабораторных условиях. Этот метод в настоящее время редко используется, из-за необходимости иметь дорогостоящее оборудование.

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

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

Рассмотрим более подробно два последних метода, как наиболее употребимых.

8.2. Калибровка с помощью тест-объекта

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