Как получить наиболее точную калибровку камеры?

16

Прежде всего, я надеюсь, что это правильная доска обмена стека. Мои извинения, если это не так.

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

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

Существует ли оптимальный набор представлений для функции, чтобы получить наиболее точную калибровку камеры? Что влияет на точность калибровки?

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

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

гепард
источник

Ответы:

8

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

Коэффициент искажения больше присутствует в «специальных» камерах, таких как широкоугольные или 360 °.

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

mirror2image
источник
Под углами Эйлера я предполагаю, что вы имеете в виду вращение камеры вокруг шахматной доски (с шахматной доской в ​​качестве оси поворота) по x, y и перемещение камеры к шахматной доске и от нее по оси z? Я читал о ком-то, кто просто распечатывал преобразованные шахматные доски и держал камеру на том же месте. Например: i.imgur.com/rYzV4.png и i.imgur.com/McG9z.png . Является ли использование таких вещей плохим решением, поскольку оно не может представлять, как все будет искажаться в реальности?
Гепард
Да о движущейся камере. Да, еще раз о сохранении на месте.
mirror2image
@ mirror2image Вы имеете в виду, что в практических операциях лучше менять разные углы. Но это означает, что разные взгляды будут иметь разные системы координации мира. Нужно ли мне использовать общую систему координации мира, чтобы сохранить точки объекта в одной и той же системе координации?
Ричард
3

@Ben - количество просмотров зависит от камеры и требуемой конечной точности.

С очень высоким качеством линзы с низким уровнем искажений (высококачественные 35-мм зеркальные фотоаппараты), использующие множество изображений шахматной доски для отображения искажений, могут быть нестабильными - поскольку искажения представляют собой доли пикселя.
Вам все еще нужно сделать несколько снимков с повернутой доской (или камерой), поскольку центр изображения обычно находится в пределах пары пикселей от номинальных x / 2, y / 2 и будет меняться в зависимости от фокуса. И конечно зум все меняет.

Если у вас есть центр и фокусное расстояние чипа объектива (в X и Y), вам понадобится только одна шахматная доска в кадре, чтобы определить положение камеры.

Мартин Беккет
источник
Я продолжаю получать действительно плохую калибровку, и я честно не могу понять, почему. У меня на стене напечатана шахматная доска, и я перемещаю камеру в разные позиции, чтобы у нее были разные виды на шахматную доску, но всякий раз, когда я использую функцию неискаженности в opencv, она просто получается очень странной и искаженной по сравнению с оригиналом. Моя камера представляет собой Microsoft LifeCam Studio 1080p.
Гепард
@Ben Отключить любой автофокус. На крошечных линзах веб-камеры фокусное расстояние и центр линзы меняются с фокусом. Вы вращаетесь достаточно, чтобы он хорошо подходил для центра? Есть ли квадраты, выходящие в углы? Наконец, убедитесь, что все цели имеют все обнаруженные квадраты.
Мартин Беккет
Автофокус уже отключен. Определить достаточно? Я стараюсь изо всех сил пытаться подобрать очки. Не уверен, что вы подразумеваете под «квадратами, выходящими в углы», если вы имеете в виду функцию, которая рисует извлеченные углы на изображении - тогда да. У меня уже есть проверка, чтобы увидеть, что все углы были обнаружены. Я думаю, что моя проблема МОЖЕТ быть связана с тем, что я установил начальное фокусное расстояние во внутренней матрице, которую я передаю функции калибровки. Я пробовал 1: 1, 16: 9 (что я считаю, соотношение сторон веб-камеры), а также пробовал НИЧЕГО (что вы можете сделать)
Гепард
@ Мартин Можно ли выполнить калибровку, удерживая камеру в стационарном положении и меняя ориентацию шахматной доски, не меняя расстояния между камерой и шахматной доской?
@ Сантош - да, это, очевидно, в точности эквивалентно. Вы должны убедиться, что вы охватили много разных точек зрения
Мартин Беккет
3

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

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

Хотя он ориентирован на стереокалибровку, а точнее на Kinect, я считаю, что советы помогут всем, кто пытается откалибровать камеру.

Кроме того, на случай, если я когда-нибудь умру или забуду обновить хостинг, вот измененная цитата из поста:

  1. Убедитесь, что у вас есть максимально возможный калибровочный шаблон. Следуйте тому, что я сказал выше. Получите хороший шаблон, профессионально напечатанный. Убедитесь, что каждый квадрат имеет размер не менее 8 см х 8 см. Кроме того, убедитесь, что одна сторона калибровочного шаблона имеет нечетное число квадратов, а другая сторона имеет четное количество квадратов (например, 9 × 6 или 7 × 8). Это важно для правильного определения позы цели. Кроме того, некоторые наборы инструментов не смогут обнаружить шаблон, при этом требования не выполняются. Как упоминалось ранее, использованные мной рисунки, которые подходят для печати на больших листах, загружаются здесь (для квадратов по 9 см) и здесь (для квадратов по 10 см).
  2. Убедитесь, что напечатанный шаблон имеет достаточно белую рамку вокруг него, в противном случае он не может быть легко обнаружен большинством наборов инструментов.
  3. Убедитесь, что Kinect не двигается. Я использовал крепление, чтобы установить Kinect на штатив.
  4. Постарайтесь получить как можно больше изображений цели калибровки. Моя лучшая калибровка была получена с использованием 300 изображений на расстояниях от 0,5 до 10 метров от камеры. Убедитесь, что вы вращаете шаблон вокруг осей X, Y и Z. Также попробуйте «разбить» вид на изображения, снятые на одном и том же расстоянии: т.е. взять одно изображение, переместить цель на следующую плитку в поле зрения, взять еще одно и повторять, пока вы не «разложите» все текущие изображения. поле зрения. Цель состоит в том, чтобы максимально охватить все поле зрения на каждом расстоянии.
  5. Если возможно, используйте приложение стереокалибровки MATLAB. Это позволяет избавиться от выбросов после каждого этапа калибровки.
M2X
источник
3

Вот список «лучших практик» для калибровки камеры, который я первоначально разместил здесь: https://calib.io/blogs/knowledge-base/calibration-best-practices

  • Выберите правильный размер калибровки цели. Достаточно большой, чтобы правильно ограничить параметры. Предпочтительно оно должно охватывать ок. половина общей площади, если смотреть на фронт-параллель на изображениях с камеры.
  • Выполните калибровку на приблизительном рабочем расстоянии (WD) вашего окончательного применения. Камера должна быть сфокусирована на этом расстоянии, и после калибровки фокусировка должна быть неизменной.
  • Цель должна иметь большое количество объектов. Использование тонких рисунков предпочтительнее. Однако в какой-то момент надежность обнаружения страдает. Мы рекомендуем использовать точные подсчеты шаблонов для камер с разрешением более 3 мегапикселей, а также при хорошем освещении.
  • Собирайте изображения из разных областей и наклонов. Переместите цель, чтобы полностью покрыть область изображения и стремитесь к равномерному освещению. Искажение линзы может быть правильно определено только по фронтально-параллельным изображениям, но оценка фокусного расстояния зависит от наблюдения ракурса. Включите как фронтопараллельные изображения, так и изображения, снятые с доской, наклоненной на +/- 45 градусов в обоих горизонтальных и вертикальных направлениях. Наклон больше, как правило, не очень хорошая идея, так как страдает точность локализации.
  • Используйте хорошее освещение. Это часто упускается из виду, но очень важно. Цели калибровки предпочтительно должны быть диффузно освещены с помощью управляемого фотографического освещения. Источники с сильными точками приводят к неравномерному освещению, что может привести к сбою в обнаружении и не очень хорошему использованию динамического диапазона камеры. Тени могут сделать то же самое.
  • Достаточно наблюдений. Обычно калибровку следует выполнять как минимум для 6 наблюдений (изображений) цели калибровки. Если используется камера более высокого порядка или модель искажения, больше наблюдений выгодно.
  • Подумайте об использовании уникально закодированных целей, таких как платы CharuCo. Они позволяют собирать наблюдения с самых краев датчика камеры и объектива и, следовательно, очень хорошо ограничивают параметры искажения. Кроме того, они позволяют собирать данные, даже если отдельные характерные точки не соответствуют другим требованиям.
  • Калибровка является настолько точной, насколько используемая цель калибровки. Используйте лазерные мишени только для проверки и проверки.
  • Правильная установка калибровочной мишени и камеры. Чтобы свести к минимуму искажения и изгибаться в более крупных целях, устанавливайте их либо вертикально, либо плоско на жесткой опоре. Вместо этого рассмотрите возможность перемещения камеры в этих случаях. Используйте качественный штатив и не касайтесь камеры во время съемок.
  • Удалить плохие наблюдения. Внимательно осмотрите ошибки перепроектирования. Оба за просмотр и за функцию. Если какие-либо из них выглядят как выбросы, исключите их и выполните повторную калибровку.

Онлайн-инструмент для создания PDF-файлов для целей калибровки находится здесь: https://calib.io/pages/camera-calibration-pattern-generator

Jakob
источник
Привет, добро пожаловать в DSP SE. Саморекламные ответы, как правило, здесь не приветствуются. Пожалуйста, подумайте над тем, чтобы сделать ответ более качественным.
jojek