Розробка роботів - архів - калібрування камери на opencv

Розробка роботів - архів - калібрування камери на opencv
При створенні мобільних роботів іноді виникає спокуса поставити на них систему технічного зору. Але як з'ясувалося змусити СТЗ працювати завдання не з легких, тому ми почнемо з простого - побудуємо математичну модель камери і визначимо значення всіх параметрів, що входять в модель, за допомогою OpenCV. Ця модель виявляється дуже корисною, коли ми хочемо виробляти якісь вимірювання за допомогою камери.


Почнемо з моделі камери.

Image plane - ПЗС матриця камери;

Pinhole plane - площина тонкої лінзи;

X - спостережувана точка;

f - фокусна відстань;

Optical axis - головна оптична вісь.

Розробка роботів - архів - калібрування камери на opencv

Якщо хто пам'ятає шкільний курс геометричної оптики, рівняння перспективної проекції виглядає так:

Тепер врахуємо той факт, що зазвичай головна оптична вісь не проходить через точку ПЗС матриці з координатами (0, 0).

Тут c - координата точки перетину головної оптичної віссю ПЗС матриці.

Запишемо дані рівняння для координат X і Y, з огляду на факт, що через технологічну похибки виготовлення матриці пікселі мають злегка прямокутну форму.

su і sv - коефіцієнти форми пікселя.

Запишемо рівняння перспективної проекції в матричному вигляді, щоб з ними було зручніше працювати. Та й OpenCV дружить в основному з матрицями.


- координати точки у зовнішній системі координат

- координати проекції точки

- матричне рівняння перспективної проекції

Тепер врахуємо факт, що лінзу не обов'язково тонка, і вона вносить спотворення в зображення.

Розробка роботів - архів - калібрування камери на opencv

Даний вид спотворення називається радіальним. Він враховується в такий спосіб:

Тут r - відстань від точки перетину головної оптичної віссю ПЗС матриці до точки проекції; k1, k2 - коефіцієнти радіального спотворення.

Тепер матричне рівняння перспективної проекції має вигляд:

Крім радіального спотворення існує ще тангенціальне. Воно виникає через те, що площина ПЗС матриці не перпендикулярна головної оптичної осі. Його в моделі я враховувати не буду: воно дуже мало. OpenCV визначає і коефіцієнти тангенціального спотворення.

При установці камери теж з'являються похибки - врахуємо в моделі і їх.

Розробка роботів - архів - калібрування камери на opencv

Результуюча матриця обертання камери навколо необхідної системи координат:

Вектор зміщення камери щодо необхідної системи координат:

Тепер модель камери з урахуванням радіального спотворення і похибок установки виглядає так:

Перейдемо до однорідних координатах:

Тут Rij - відповідні компоненти результуючої матриці обертання камери навколо необхідної системи координат.

tx, ty, tz - компоненти вектора зміщення камери щодо необхідної системи координат.

Ось ми і отримали модель камери.

У неї входять внутрішні параметри:

fu, fv - фокусні відстані

cu, cv - положення оптичного центру

Зовнішні параметри: 3 кута Ейлера, 3 компонента вектора трансляції.

А тепер перейдемо до визначення цих параметрів на OpenCV, тобто до калібрування камери.

Сам принцип калібрування дуже простий - ми спостерігаємо декілька зображень шахівниці, розпізнаємо її кути. І знаючи як в дійсності розташовані кути шахівниці, чисельно підбираємо параметри камери. OpenCV має набір вбудованих засобів для підтримки такої моделі калібрування. Я буду використовувати інтерфейси OpenCV на C ++.

Схожі статті