Подтвердить что ты не робот

Как проверить правильность калибровки веб-камеры?

Я совершенно новичок в методах калибровки камеры... Я использую технику шахматной доски OpenCV... Я использую веб-камеру из Quantum...

Вот мои наблюдения и шаги.

  • Я сохранил каждую квадратную сторону шахмат = 3,5 см. Это шахматная доска размером 7 х 5 с внутренними углами 6 х 4. Я принимаю в общей сложности 10 изображений в разных представлениях/позициях на расстоянии от 1 до 1,5 м от веб-камеры.
  • Я следую C-коду в Обучение OpenCV Bradski для калибровки. мой код для калибровки

    cvCalibrateCamera2(object_points,image_points,point_counts,cvSize(640,480),intrinsic_matrix,distortion_coeffs,NULL,NULL,CV_CALIB_FIX_ASPECT_RATIO);
    
  • Перед вызовом этой функции я делаю первый и второй элементы по диагонали внутренней матрицы, чтобы поддерживать постоянство отношения фокусных расстояний и используя CV_CALIB_FIX_ASPECT_RATIO

  • С изменением расстояния до шахматной доски fx и fy меняются с fx:fy, почти равным 1. Существуют значения cx и cy в порядке от 200 до 400. fx и fy находятся в порядке 300 - 700, когда я изменяю расстояние.

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

Я правильно делаю калибровку?. Должен ли я использовать любой другой вариант, чем CV_CALIB_FIX_ASPECT_RATIO?. Если да, то какой?

4b9b3361

Ответ 1

Хм, вы ищете "красивый" или "точный"?

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

Если вы посмотрите на геометрические характеристики даже очень дешевых комбинаций объективов /ccd (в мегапиксельной области и выше), становится очевидным, что точность калибровки суб-sub-mm теоретически достижима в пределах объема стола на столе, Просто выполните (со спецификаций вашего датчика камеры) телесный угол, натянутый на один пиксель, - вы будете ослеплены пространственным разрешением, которое у вас есть в пределах досягаемости вашего кошелька. Тем не менее, фактически достижение ПОВТОРНОГО ТОГО, что-то вблизи этой теоретической точности принимает работу.

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

  • Если ваш метод использует плоскую цель ( "шахматная доска" или аналогичная), создайте хороший. Выбирайте очень плоскую основу (для размера, о котором вы говорите, стекло из стекла толщиной 5 мм или более отлично, хотя, очевидно, хрупкое). Проверьте его плоскостность относительно другого края (или, лучше, лазерного луча). Распечатайте шаблон на бумаге толстой бумаги, которая не будет растягиваться слишком легко. Положите его после печати на подложке перед склеиванием и убедитесь, что квадратные стороны действительно очень ортогональны. Дешевые струйные или лазерные принтеры не предназначены для строгой геометрической точности, не доверяйте им слепо. Лучшей практикой является использование профессионального типографического магазина (даже Kinko будет работать намного лучше, чем большинство домашних принтеров). Затем аккуратно прикрепите рисунок к основанию, используя напыленный клей и медленно протирая мягкой тканью, чтобы избежать пузырей и растяжения. Подождите один день или дольше для отверждения клея и стресса клейкой бумаги, чтобы достичь ее длительного устойчивого состояния. Наконец, измерьте угловые положения с помощью хорошего суппорта и лупы. Вы можете уйти с одним номером для "среднего" квадратного размера, но это должно быть среднее значение фактических измерений, а не надежд-н-молитв. Лучшей практикой является фактическое использование таблицы измеренных позиций.

  • Следите за изменениями температуры и влажности: бумага адсорбирует воду из воздуха, подложка расширяется и сжимается. Удивительно, сколько статей вы можете найти, что точность калибровки субмиллиметра отчета без указания условий окружающей среды (или целевой ответ на них). Излишне говорить, что они в основном дерьмо. Более низкий температурный коэффициент расширения стекла по сравнению с обычным листовым металлом является еще одной причиной предпосылки первого использования в качестве основы.

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

  • Поместите камеру на устойчивое крепление, которое не будет легко вибрировать. Фокус (и f-stop объектив, если он имеет диафрагму), как это необходимо для приложения (а не калибровка - процедура калибровки и цель должны быть разработаны для приложений, а не наоборот). Даже не думайте о касании камеры или объектива. Если это вообще возможно, избегайте "сложных" линз - например, зум-объективы или очень широкоугольные. Фолиевые или анаморфотные линзы требуют гораздо более сложных моделей, чем доступно для использования OpenCV.

  • Сделайте много измерений и снимков. Вы хотите сотни измерений (углов) на изображение и десятки изображений. Где данные, тем более веселее. Шахматная доска 10x10 - это абсолютный минимум, который я бы рассмотрел. Я обычно работал в 20х20.

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

  • Минимизируйте вибрации и соответствующее смазывание при съемке.

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

  • Следите за тем, что делает ваш код извлечения кода. Нарисуйте обнаруженные угловые положения поверх изображений (например, в Matlab или Octave) и оцените их качество. Удаление рангов с использованием жестких пороговых значений лучше, чем полагаться на робастификатор в коде настройки пакета.

  • Ограничьте свою модель, если сможете. Например, не пытайтесь оценить основную точку, если у вас нет веских оснований полагать, что ваш объектив значительно не в центре w.r.t изображения, просто исправьте его в центре изображения с первой попытки. Основное местоположение точки обычно плохо наблюдается, потому что оно по своей сути путается с центром нелинейного искажения и компонентом, параллельным плоскости изображения трансляции от цели к камере. Для правильной работы требуется тщательно разработанная процедура, которая дает три или более независимых точки схождения сцены и очень хороший брекетинг нелинейных искажений. Аналогичным образом, если у вас нет оснований подозревать, что фокусная ось объектива действительно наклонена w.r.t. плоскость датчика, зафиксировать на нуле (1,2) компонент матрицы камеры. Вообще говоря, используйте простейшую модель, которая удовлетворяет вашим измерениям и потребностям вашего приложения (для вас используется бритва Ockam).

  • Когда у вас есть решение для калибровки вашего оптимизатора с достаточно низкой ошибкой RMS (несколько десятых пикселя, как правило, см. другой ответ ниже), постройте шаблон XY остаточных ошибок (предсказано_xy - measured_xy для каждого угол во всех изображениях) и посмотреть, облачно ли оно округлено в (0, 0). "Сгустки" выбросов или округлости облаков остатков кричат ​​тревожные звонки, что что-то очень не так - скорее всего, выбросы или неправильная модель искажения объектива.

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

Ответ 2

Это довольно поздний ответ, но для людей, приходящих на это из Google:

Правильный способ проверки точности калибровки - использовать ошибку повторения, предоставленную OpenCV. Я не уверен, почему это не упоминалось нигде в ответе или комментариях, вам не нужно вычислять это вручную - это возвращаемое значение calibrateCamera. В Python это первое возвращаемое значение (за которым следует матрица камеры и т.д.).

Ошибка повторного воспроизведения - это ошибка RMS между точками проецирования точек с использованием внутренних коэффициентов и их фактическим изображением. Обычно вы должны ожидать ошибку RMS менее 0.5px. Я могу регулярно обходиться 0.1px с камерами машинного зрения. Ошибка перепрограммирования используется во многих документах для просмотра компьютера, нет более простого или более точного способа определить, насколько хороша ваша калибровка.

Если у вас нет стереосистемы, вы можете работать только там, где что-то находится в 3D-пространстве до луча, а не в точке. Однако, поскольку можно выработать позу каждого планарного калибровочного изображения, можно разработать, где каждый угол шахматной доски должен падать на датчик изображения. Процесс калибровки (более или менее) пытается решить, где эти лучи падают, и минимизирует ошибку по всем различным калибровочным изображениям. В оригинальной работе Чжана и последующих оценках, кажется, достаточно 10-15 изображений; в этот момент ошибка не уменьшается значительно с добавлением большего количества изображений.

Другие программные пакеты, такие как Matlab, дадут вам оценки ошибок для каждого отдельного встроенного, например. фокусное расстояние, центр проекции. Я не мог заставить OpenCV выплевывать эту информацию, но, возможно, она где-то там. Калибровка камеры теперь является родной в Matlab 2014a, но вы все равно можете получить панель инструментов калибровки камеры, которая чрезвычайно популярна среди пользователей компьютерного зрения.

http://www.vision.caltech.edu/bouguetj/calib_doc/

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

Процедура, предоставленная Франческо, хороша, следуйте этому. Я использую полку в качестве своего самолета, с рисунком, напечатанным на плакатной бумаге. Убедитесь, что изображения хорошо открыты - избегайте зеркального отражения! Я использую стандартный шаблон 8x6, я пробовал более плотные шаблоны, но я не видел такого улучшения в точности, что это имеет значение.

Я думаю, что этого ответа должно быть достаточно для большинства людей, желающих откалибровать камеру - реалистично, если вы не пытаетесь откалибровать что-то экзотическое, как Fisheye, или вы делаете это по образовательным причинам, OpenCV/Matlab - это все, что вам нужно. Метод Чжан считается достаточно хорошим, что практически каждый в исследовании компьютерного зрения использует его, и большинство из них либо используют набор инструментов Bouguet, либо OpenCV.