Ответ 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). "Сгустки" выбросов или округлости облаков остатков кричат тревожные звонки, что что-то очень не так - скорее всего, выбросы или неправильная модель искажения объектива.
-
Возьмите дополнительные изображения, чтобы проверить точность решения - используйте их, чтобы убедиться, что искажение объектива действительно удалено, и что плоская гомография, предсказанная калиброванной моделью, фактически соответствует той, которая восстановлена из измеренных углов.