Фотограмметрическая калибровка съемочных камер. Калибровка камеры для повышения точности цветопередачи

21.09.2019

Большинство современных цифровых камер отличаются корректной цветопередачей. Ушли в прошлое времена, когда цветные фотографии выглядели так, как будто их снимали через цветные фильтры. Более того, если снять цветовую мишень с установками в камере JPEG -sRGB или JPEG -AdobeRGB , то попадание в цвет при лабораторном контроле будет довольно точным.

Многие студийные камеры и ПО для них позволяют использовать технологию управление цветом. Для конкретного источника освещения управление цветом с помощью профиля можно без особого труда реализовать, как постпроцесс для любой камеры (допускающей ручные установки экспозиции, баланса белого и контраста). Для этого надо лишь построить профиль камеры так, как это описано в статье «Профили для цифровых камер. Пакет XLProfiler»). А затем «присвоить» профиль файлу-снимку в графическом редакторе.

Одно из основных препятствий для внедрения управления цветом в съемочную технику - непостоянство источника освещения. Если требуется точное попадание в цвет, то калибровать камеру нужно, фактически, под каждую конкретную съемку (под каждый конкретный источник света). С другой стороны, при оперативной съемке точное попадание в цвет редко является важным критерием качества. Заложенные в камеру или ПО алгоритмы коррекции баланса белого и «пересчета» фильтров на матрице в RGB-цвета файлов JPEG/TIFF/RAW, как отмечалось выше, работают вполне корректно. Калибровка камеры в Adobe Camera RAW

В модуле есть подменю «Калибровка камеры» :

Подменю называется «Калибровка» и вообще не предназначено для выполнения задач управления цветом. В этом подменю всего семь «движков»: для коррекции цветового оттенка теней и трех основных цветов в координатах «оттенок-насыщенность». Фактически, это дополнительная возможность цветокоррекции изображений, получаемых с помощью конкретной камеры, для которой профиль «заложен» в Camera RAW или содержится в файле TIFF/JPEG/DNG (Camera RAW теперь открывает и эти файлы, а в поле «Имя - Профиль камеры» можно выбрать внедренный в них профиль, RAW-файлы пока не поддерживают профили). Целью такой цветокоррекции может быть как более точная цветопередача, так и намеренное искажения цветов, к примеру, для имитации съемки в ИК-диапазоне.

В общих чертах процесс выглядит так:
съемка мишени в определенных условиях освещения в RAW,
обработка RAW-файла в Camera RAW в подменю «Основной» для коррекции экспозиции, контраста, баланса белого и оттенка/насыщенности,
калибровка в окне «Калибровка камеры» по цветовым координатам мишени,
сохранение построенного калибровочного набора параметров, как «пользовательского набора» или «набора по умолчанию».

Методика, предложенная Брюсом Фрезером , предполагает калибровку по трем полям R, G, B мишени Macbeth Color Checker. Ручная калибровка

Опишем процесс калибровки, предложенный Брюсом Фрезером .

Прежде чем приступить к калибровке, нужно снять в RAW мишень Macbeth Color Checker. Затем приготовить цифровую идеализированную мишень, преобразовав ее исходник в пространстве LAB (ссылка на файл приведена выше) в то цветовое пространство, в котором вы привыкли работать (поддерживаемые Camera RAW пространства Adobe RGB или ProPhoto , к примеру). Для ручной калибровки удобно нанести на цветовые поля мишени их цифровые значения и распечатать такую мишень или вывести в независимом окне на дисплей, если он достаточно большой.

Когда подготовительные операции выполнены, открываем в Camera RAW снимок мишени и начинаем калибровку:

Первый этап

Открыв мишень в Camera RAW , устанавливаем «пипетки цветов» на серые поля и настраиваем параметры изображения в подменю «Основной» . Сначала, по второму серому полю устанавливаем «баланс белого», затем по первому «экспозицию», по третьему и четвертому - «яркость», по второму, пятому и шестому полю «контраст» и «точку черного». Возможно, потребуется два-три этапа регулировок всех параметров для того, чтобы координаты снимка с точностью до ошибки (неоднородность полей на снимке в пределах трех единиц R, G, B можно считать такой ошибкой) совпали с координатами не цветных полей на идеализированной мишени.

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

Второй этап

Следующий этап - собственно калибровка:

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

После нескольких десятков минут калибровки и нескольких исписанных заметками листов бумаги, удается приблизиться к идеалу, но не очень близко - ошибка по отдельной компоненте цвета достигает 10-15 единиц (при начальной ошибке до 20-30 единиц) при калибровке конкретной камеры Canon PowerShot G2 .

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

Третий этап

Столкнувшись с невозможностью настроить вручную цвета лучше, чем с точностью в десяток единиц, я отказался от использования инструмента «Калибровка». Но в новой версии Camera RAW , кроме калибровки есть еще подменю выборочной коррекции цветов «HSL» . Если к настройке привлечь его возможности, то удается попасть в цвет не только для трех, но для большего числа полей мишени:

Отметим, что подменю Camera RAW «HSL» и «Разбиение тона » вообще более эффективный инструмент калибровки, чем сама «Калибровка».

Использование калибровки

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

Полуавтоматический процесс калибровки с помощью AcrCalibrator

Ручная калибровка трудоемкий рутинный процесс. Для его автоматизации можно воспользоваться модулем для Photoshop AcrCalibrator , созданным Томом Форсом (Thomas Fors) . С его можно загрузить сам модуль и инструкцию по применению. Когда готовилась статья, корректно работала с ACR версиями до 4.1. Тем, кто будет пробовать модуль, загрузив с сайта Adobe пробный Photoshop и последний ACR к нему, следует скачать так же ACR 4.1 и установить его на место более свежих конверторов RAW файлов.

Работать с AcrCalibrato r не сложно. Его (файл AcrCalibrator.jsx) нужно загрузить в папку PhotoshopCS3/Presets/Scripts и перегрузить Photoshop . Снимок мишени открывается в Camera RAW в режиме 8 бит/цвет, ProPhoto RGB, наименьшего разрешения (для ускорения обработки). Баланс белого устанавливается по второму слева «серому» полю. Файл открывается в Adobe Photoshop . Инструментом «перо» на мишени нужно нарисовать прямоугольник, выставив его углы в центры полей мишени: «темная кожа» - «белый» - «черный» - «зелено-голубой» (угловые поля нужно выбрать именно в такой последовательности). Затем запустить скрипт и подождать. В моем случае скрипт выдал на экран данные калибровки примерно через полтора часа.


На иллюстрации приведено окно отчета AcrCalibrator, идеализированная мишень и окно Adobe Camera RAW с введенными установками, полученными с помощью AcrCalibrator. Если сравнить цветовые координаты «синего», «зеленого» и «красного» полей идеальной мишени и мишени, полученной с установками AcrCalibrator, станет ясно, что и автомат не может уменьшить ошибку цветопередачи до менее чем десяти единиц.



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


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


Чтобы сравнить эффективность различных вариантов калибровки приведем фрагменты мишени, полученные разными способами. Настройки «Основной» - одинаковые для всех способов и соответствуют тем, которые были найдены при калибровке в ручном режиме, так как именно они обеспечивают наиболее близкие идеальным координаты «серых» полей. Отличаются настройки в окнах подменю «Калибровка» и «HSL» (установки «HSL» отличаются от «по умолчанию» только в случае «ручной калибровки» по методу Брюса Фрезера ).

Левая верхняя четверть - идеализированная мишень. Правая верхняя - результат обработки снимка в Camera RAW с установками «по умолчанию» для камеры Canon PowerShot G2. Левая нижняя четверть - обработка в Camera RAW с ручными установками «калибровки» и «HSL» для трех основных цветов R, G, B, насыщенных желтого и пурпурного. Правая нижняя четверть - обработка в Camera RAW с установками калибровки, полученными с помощью AcrCalibrator.


Как только появился Photoshop CS с Camera RAW и вышла книга Брюса Фрезера , я испытал методику для камеры Canon PowerShot G2 . Оказалось, что вручную добиться хорошего (с некоторой небольшой ошибкой) попадания «в цвет» по координатам не просто. Но еще хуже то, что и после калибровки остальные поля (те, по которым калибровка не производилась) мишени не приводятся к своим числовым значениям. Стоит ли тратить на такую калибровку время? Есть задачи, при решении которых точное попадание в определенные цвета может быть актуально. Для таких калибровка подходит. Но просто «улучшать» цветопередачу с помощью «Калибровки», скорее всего, не очень хорошая идея.

Не так давно мы начали пару проектов, в которых необходима оптическая система с каналом дальности, и решили для этого использовать 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 камеры и датчика глубины, научились совмещать кадры и улучшили точность определения глубины. Код этого проекта можно найти

1.2.1. Общие положения

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

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

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

Параметры внутренней калибровки:

· фокусное расстояние по обеим координатам (fx, fy);

· принципиальная точка (спец. точка на оптической оси);

· коэффициенты дисторсии (k1, k2, p1, p2).

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

Параметры внешней калибровки:

· вектор переноса T.

· матрица поворота R.

1.2.2Алгоритмы калибровки

«Классический» метод - последовательное определение внутренних и внешних параметров камеры, предложенный Р. Цаем (R.Tsai) в . Этот алгоритм восстанавливает параметры камеры, используя прямое вычисление, основанное на отношении между точками калибровочного изображения и теми же точками на плоскости изображения камеры. Цай использует модель камеры-обскуры, изображенной на рисунке 1.1, для описания преобразования точек из 3D пространства в пиксели.

Данная модель имеет следующие параметры для оценки:

f – фокусное расстояние камеры.

k – коэффициент радиальных искажений линз.

C x , C y – координаты центра радиальных искажений линз.

S x – масштабный коэффициент для учета любых неопределенностей возникших из-за несовершенства тайминга аппаратного обеспечения для сканирования и оцифровки.


Рисунок 1.1 – Модель камеры-обскуры

R x , R y , R z - углы поворота для преобразования между реальным миром и координатами камер,

T x , T y , T z - Компоненты перевода для преобразования из координат реального мира в координаты камеры.

P i = [X i w , Y i w , Z i w ] T - известное 3D положение i точки в системе координат реального мира

p i = [x i , im , y i , im ] T - координаты изображения i -ой точки

- матрица вращения, (1.1)

Вектор смещения, (1.2)

Матрица камеры, с четырьмя неизвестными параметрами. (1.3)

1) Преобразование из координат реального мира (X w ,Y w ,Z w ) в координаты изображения (X i ,Y i ,Z i ), содержащие внешние параметры камеры (перевод T и поворот R ), можно представить в виде уравнения:

(1.4)

где R и T характеризуют 3D преобразование из реального мира в систему координат камеры и определяются как:

, (1.5)








(R x ,R y ,R z ) - углы Эйлера, вращение вокруг трех осей.

(T x ,T y ,T z ) - параметры перевода из 3D координат реального мира в координаты камеры.

2) Преобразование из 3D положения (из координат кадра изображения) в плоскость изображения затем вычисляются по следующим шагам в соответствии с рисунком 1.2:

Рисунок 1.2 - Модель репроекции камеры Цая с проекцией перспективы и радиальным искажением

А) Преобразование из 3D координат реального мира (X i ,Y i ) в координаты неискаженной плоскости изображения (X u ,Y u )

В) Преобразование из неискаженных (X u ,Y u ) в искаженные (X d ,Y d ) координаты изображения

, (1.9)

, (1.10)

где , и k является коэффициентом дисторсии линзы.

Преобразование из искаженных координат плоскости изображения (X d ,Y d ) в итоговые координаты изображения (X f ,Y f ) :

, (1.11)

где (d x ,d y ) - расстояние между соседними элементами датчика в направлении X и Y,

d x и d y фиксированные параметры камеры. Они зависят только от размера ПЗС и разрешения изображения, (X f , Y f ) итоговое положение пикселей в изображении.

На первом этапе определяются внешние параметры Sx , R и две первые компоненты вектора смещения, Tx и Ty . Также на данном этапе оценивается фокусное расстояние f и компонента z вектора смещения Tz . Это достигается решением системы линейных уравнений, которые включают в себя координаты точек на калибровочном шаблоне, как на изображении, так и в реальном мире. Различные параметры затем восстанавливаются при решении данной системы.

Второй этап включает в себя поиск наискорейшего спуска. Он используется для определения коэффициента дисторсии k 1 , который не может быть определен из калибровочного шаблона. f и Tz также корректируются в процессе поиска. Оптимизация не использует полную модель камеры для увеличения производительности. Таким образом, вычисленный остаток совершенно не имеет значения для погрешности измерения, которое сделано в данном случае отдельно с помощью построения полной модели камеры, собирая все полученные параметры из предыдущих шагов. Последняя получаемая здесь ошибка возникает из-за разницы между рирпроекционными 3D координатами в реальном мире и их соответствующими точками изображения.

Чувствительность решения

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

Плюсы

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

Данный метод имеет широкое распространение, так как подходит для компланарных и некомпланарных точек.

Решение, как правило, используется для калибровки с одним ракурсом, но также может применяться и для многоракурсной калибровки. Для этого плоскую модель передвигают на разные уровни по оси z для калибровки множества изображений.

Минусы

Учитываются только радиальные искажения.

Модель, в общем, не распознает асимметрию или отсутствие ортогональности проекции.

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

Так как большинство современных камер оснащены линзами с авто-фокусировкой и автоматической апертурой, то могут возникнуть проблемы из-за несовпадения ожидаемых внутренних параметров, которые должны оставаться постоянными на всем диапазоне настроек фокуса, масштабирования и апертуры. Данная проблема была рассмотрена Вилсоном (R.G.Willson) .

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

«Гибкий » метод» – в данном методе, предложенном Ж. Жанг в 2000 г. (Zhang, 2000), используется плоский калибровочный объект (шахматная доска) при различных ориентациях . Она представляет собой массив черно-белых квадратов N х N в виде «шахматной доски». Алгоритм использует извлеченные точки углов шахматной доски для вычисления проекции преобразования между точками изображения на разных изображениях.

Основные этапы алгоритма калибровки

1) Необходимо сделать несколько изображений калибровочного объекта в различных положениях перемещая либо объект, либо камеру.

2) Обнаружение точек функции на изображениях.

3) Оценить пять внутренних параметров и все внешние параметры используя решение в аналитическом виде:

Из координат изображения p = (u,v, 1) и их известного соответствующего набора координат в реальном мире P = (X,Y, Z = 0,1 ) , гомография A = (a1a2a3) можно вычислить:

Sp = AP, A = λK(r1r2t ) , (1.13)

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

a 1 T K -T K -1 a 2 = 0, a 1 T K -T K -1 a 1 = a 2 T K -T K -1 h 2 . (1.14)

Изображение абсолютного конуса В = K - T K -1 как правило симметрично и может быть описано как 6D вектор b = (b 11 ,...b 33) т . Таким образом для каждой из N проекций цели мы получаем набор из 2 уравнений, чтобы решить для b, что означает что нам необходимо по крайней мере 3 ракурса калибровочной цели чтобы решить систему для всех неизвестных.

4) Оценить искажения радиальных искажений решением метода наименьших квадратов:

k = (D T D) -1 D T d . (1.15)

5) Уточнить все восстановленные параметры, используя нелинейную минимизацию репроекции ошибки:

Плюсы

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

Движение не должно быть известно.

Лучше значения конвергенции при многоракурсной калибровке, чем у алгоритма Цая.

Данный метод более устойчив по сравнению с автокалибровкой.

Минусы

Необходимо как минимум три различные проекции плоского калибровочного объекта.

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

Автокалибровка в реальном времени - одновременное определение внутренних и внешних параметров. Технологии этой категории используют только движение камеры в статической сцене. Если изображения будут браться от тех же самых камер с фиксированными внутренними параметрами, соответствия между тремя картинками достаточно для получения и внутренних, и внешних параметров, которые позволят реконструировать 3D структуру. Мэйнибанк и Фаугерас впервые предложили самокалибровки на основе уравнений Круппа . В последнее время многие исследователи выдвинули ряд аналогичных методов . Все эти методы основаны на абсолютном коническом сечении и абсолютной квадрики, для которых необходимо составлять нелинейных уравнений из нескольких значений. Автокалибровка будет надежной, если геометрия сети благоприятна, т.е. изображения конвергентны и имеется большое число измеренных точек, расположенных на всей поверхности снимка.

Плюсы

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

Минусы

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

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

Не всегда возможно применить данный метод калибровки в короткобазисных измерениях.

1.2.3 Программное обеспечение для калибровки камер

Для программной калибровки стереокамер чаще всего используется такое программное обеспечение как Matlab и библиотека OpenCV, со специально разработанными алгоритмами.

На рисунке 3 показаны шаги калибровки камеры методом Цая в инструментах Matlab. В первом шаге, получают набор изображений и определяют ошибки между левым и правым кадрами. Если изображения не сходятся друг с другом, система будет регулировать положение камеры, пока они не сойдутся. Результаты будут содержать внутренние и внешние параметры.

Алгоритм калибровки стереокамер OpenCV основан на том, что функции используют модели камеры-обскуры. То есть, сцены формируется путем проецирования 3D-очки в плоскости изображения с использованием перспективного преобразования.

Существует множество вариантов алгоритмов калибровки: от простых до очень сложных и требующих больших ресурсов и времени для вычислений. Алгоритм, предложенный Жангом (Zhang, 2000), блок схем которого представлена на рисунке 1.3, является наиболее простым в реализации при достаточно хороших результатах и чаще других применяется при калибровке стереокамер. Самый труднореализуемый алгоритм и в тоже время самый востребованный, так он практически отсутствует в современных стереокамерах - автокалибровка камер. Его реализация позволила бы сократить время выполнения и повысить эффективность калибровки.


Рисунок 1.3 – Блок схема метода Цая

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

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

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

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

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

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

Для этого рассмотрим сначала возможности съемки с экрана монитора.

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

Элементами внутреннего ориентирования являются фокусное расстояние (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 показан пример в виде пространственной фигуры, на которой маркируются точки. Координаты этих точек определяются с необходимой точностью одним из геодезических методов.

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

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, которая стала настольной книгой любого путешественника с камерой в руках.

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




© dagexpo.ru, 2024
Стоматологический сайт