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

Я делаю калибровку камеры, используя calibration.cpp образец предоставлен в выпуске OpenCV 3.4. Я использую простую шахматную доску 9×6 с длиной квадрата = 3,45 мм.

Команда для запуска кода:

Calib.exe -w=9 -h=6 -s=3.45 -o=camera.yml -oe imgList.xml

imgList.xml

Я использую партию из 28 доступных изображений Вот

camera.yml (выход)

Вывод изображений из drawChessboardCorners: Вот

Есть 4 изображения без нарисованного наложения шахматной доски, findChessboardCorners не удалось для них.

Результаты выглядят странно (если я правильно их понимаю). Я принимаю значение фокусного расстояния как само собой разумеющееся, но основной момент, кажется, далеко с = (834, 1513). Я ожидал точку ближе к центру изображения в (1280, 960), так как ориентация камеры на видимую поверхность очень близка к 90 градусам.

Кроме того, если я помещаю объект в главную точку и перемещаю его по оси Z, я не должен видеть, что он движется вдоль x и y на изображении, это правильно?

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

2

Решение

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

На всех 28 изображениях вы изменили только ориентацию шахматной доски вокруг оси z в одной плоскости. Вам не нужно делать столько фотографий, для меня около 15 — это нормально. Вам нужно добавить больше ddl к вашим изображениям: измените расстояние шахматной доски от камеры и наклоните шахматную доску вокруг ее осей X и Y. Повторно откалибруйте камеру, и вы получите правильные параметры.

0

Другие решения

Это действительно зависит от камеры и объектива, который вы используете.
Более конкретно на такие вещи, как:

  • точность размещения чипа
  • крепление винтовой резьбы линзы
  • изготовление самого объектива

У некоторой дешевой веб-камеры с небольшим чипом даже может быть главное значение размера изображения (это означает, что это может быть и отрицательное число). Так что в вашем случае С может быть и — (834,1513) или (1513,834).
Если вы используете промышленную камеру или что-то подобное, С должно быть в пределах десятков процентов вокруг центра изображения -> например. (1280,960) + — 25%.

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

0