Почему там 3 конфликтующих формулы калибровки фотоаппарата OpenCV?

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

(1) В их книге "Изучение OpenCV …" Bradski и запись Kaehler относительно искажения объектива (страница 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).

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

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

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

Однако...

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

В ссылке 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) К сожалению, вещи становятся еще более темными, когда мы обращаемся к записям в разделе Lens Distortion Руководства Справочного руководства по библиотеке Машинного зрения 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 + финансовый год * 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 ̃, совпали с этими двумя выражениями, данными наверху этой записи, включающей xcorrected и ycorrected. Однако x ̃ и y ̃ не относятся к исправленным координатам, согласно данному описанию. Я не понимаю различия между значением координат (x ̃, y ̃) и (u ̃, v ̃), или в этом отношении, между парами (x, y) и (u, v). Из их описаний кажется, что их единственное различие - то, что (x ̃, y ̃) и (x, y) относятся к 'физическим' координатам, в то время как (u ̃, v ̃) и (u, v) не делают. О чем является это различие всеми? Разве они все не физические координаты?Я заблудился!

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

12
задан Jav_Rock 11 June 2012 в 20:40
поделиться

1 ответ

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

Каждый раз, когда вы видите:

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

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

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

3
ответ дан 2 December 2019 в 23:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: