Почему существуют 3 конфликтующие формулы калибровки камеры OpenCV? - PullRequest
12 голосов
/ 19 мая 2010

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

(1) В своей книге «Изучение OpenCV…» Брадски и Келер пишут о искажении линзы (стр. 376):

xcorrected = x * ( 1 + k1 * r^2 + k2 * r^4  + k3 * r^6 ) + [ 2 * p1 * x * y + p2 * ( r^2 + 2 * x^2 ) ],

ycorrected = y * ( 1 + k1 * r^2 + k2 * r^4  + k3 * r^6 ) + [ p1 * ( r^2 + 2 * y^2 ) + 2 * p2 * x * y ],

где r = sqrt (x ^ 2 + y ^ 2).

Предположительно, (x, y) - это координаты пикселей в неоткорректированном снятом изображении, соответствующие объектам мировой точки с координатами (X, Y, Z), привязанными к кадру камеры, для которых

xcorrected = fx * ( X / Z ) + cx    and     ycorrected = fy * ( Y / Z ) + cy,

где fx, fy, cx и cy - внутренние параметры камеры. Таким образом, имея (x, y) из захваченного изображения, мы можем получить нужные координаты (xcorrected, ycorrected), чтобы создать неискаженное изображение сцены захваченного мира, применив вышеупомянутые первые два выражения коррекции.

Однако ...

(2) Усложнение возникает, когда мы смотрим на ссылку на ссылку OpenCV 2.0 C в разделе «Калибровка камеры и 3D-реконструкция». Для удобства сравнения мы начнем со всех координат мировой точки (X, Y, Z), выраженных относительно системы отсчета камеры, как в # 1. Следовательно, матрица преобразования [R | т] не имеет значения.

В ссылке C выражается, что:

x' = X / Z,

y' = Y / Z,

x'' = x' * ( 1 + k1 * r'^2 + k2 * r'^4  + k3 * r'^6 ) + [ 2 * p1 * x' * y' + p2 * ( r'^2 + 2 * x'^2 ) ],

y'' = y' *  ( 1 + k1 * r'^2 + k2 * r'^4  + k3 * r'^6 ) + [ p1 * ( r'^2 + 2 * y'^2 )  + 2 * p2 * x' * y' ],

где r '= sqrt (x' ^ 2 + y '^ 2) и, наконец,

u = fx * x'' + cx,

v = fy * y'' + cy.

Как можно видеть, эти выражения не эквивалентны представленным в # 1, в результате чего два набора исправленных координат (xcorrected, ycorrected) и (u, v) не совпадают. Почему противоречие? Мне кажется, что первый набор имеет больше смысла, так как я могу прикрепить физический смысл к каждому x и y в нем, в то время как я не нахожу никакого физического смысла в x '= X / Z и y' = Y / Z, когда фокус камеры длина точно не равна 1. Кроме того, нельзя вычислить x 'и y', поскольку мы не знаем (X, Y, Z).

(3) К сожалению, все становится еще мрачнее, когда мы обращаемся к статьям в разделе «Искажение линзы» в Справочном руководстве Intel по открытому компьютерному видению Intel (стр. 6-4), которое частично гласит:

"Пусть (u, v) - истинные координаты изображения в пикселях, то есть координаты с идеальной проекцией, а (u ̃, v ̃) - соответствующие реальные наблюдаемые (искаженные) координаты изображения. Аналогично, (x, y) идеальные (без искажений) и (x ̃, y ̃) физические координаты реального (искаженного) изображения. Принимая во внимание два условия расширения, получаем следующее:

x ̃  =  x * ( 1 +  k1 * r^2 + k2 * r^4 ) + [ 2 p1 * x * y + p2 * ( r^2 + 2 * x^2 ) ] 

y ̃  =  y * ( 1 +  k1 * r^2 + k2 * r^4 ] + [ 2 p2 * x * y + p2 * ( r^2 + 2 * y^2 ) ],

где r = sqrt (x ^ 2 + y ^ 2). ...

"Поскольку u ̃ = cx + fx * u и v ̃ = cy + fy * v, ... результирующая система может быть переписана следующим образом:

u ̃  = u + ( u – cx ) * [ k1 * r^2 + k2 * r^4 + 2 * p1 * y + p2 * ( r^2 / x + 2 * x ) ]

v ̃  = v + ( v – cy ) * [ k1 * r^2 + k2 * r^4 + 2 * p2 * x + p1 * ( r^2 / y + 2 * y ) ]

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

Что ж, может показаться, что выражения, включающие x y и y ̃, совпадают с двумя выражениями, приведенными в верхней части этого документа, включая xcorrected и ycorrected. Тем не менее, x ̃ и y ̃ не относятся к исправленным координатам согласно данному описанию. Я не понимаю различия между значениями координат (x ̃, y ̃) и (u ̃, v ̃), или, между прочим, между парами (x, y) и (u, v). Из их описаний видно, что их единственное различие заключается в том, что (x ̃, y ̃) и (x, y) относятся к «физическим» координатам, а (u ̃, v ̃) и (u, v) - нет. В чем заключается это различие? Разве они не все физические координаты? Я потерян!

Спасибо за любой вклад!

1 Ответ

3 голосов
/ 24 июня 2010

Нет единственной формулы для калибровки камеры, все они действительны.Обратите внимание, что первая содержит константы K1, K2 и K3 для r ^ 2, r ^ 4 и r ^ 6, а две другие имеют только константы для r ^ 2 и r ^ 4?Это потому что они все приблизительные модели.Первый из них, вероятно, будет более точным, поскольку в нем больше параметров.

В любое время, когда вы видите:

r = sqrt( x^2 + y^2 )

, вероятно, можно предположить, что x = (пиксель координаты x) - (центр камеры в пикселях), поскольку r обычно означает радиус от центра.

Что вы пытаетесь сделать, кстати?Оценить параметры камеры, исправить искажения объектива или и то, и другое?

...