Проекция модели камеры «рыбий глаз» от Scaramuzza - PullRequest
0 голосов
/ 27 января 2020

Я пытаюсь понять модель «рыбий глаз» Scaramuzza, которая реализована в Matlab, см. https://de.mathworks.com/help/vision/ug/fisheye-calibration-basics.html#mw_8aca38cc -44de-4a26-a5b c -10fb312ae3c5

Обратная проекция ( uv to xyz) кажется довольно простым в соответствии со следующим уравнением: enter image description here, где rho = sqrt (u ^ 2 + v ^ 2)

Однако, как работает проекция (из xyz to uv) работа ?! В моем понимании мы получаем довольно сложный набор уравнений. К сожалению, я не нахожу подробностей об этом ....

1 Ответ

0 голосов
/ 27 января 2020

Хорошо, я думаю, что теперь я полностью понимаю это после анализа функций (windows) панели инструментов калибровки Scaramuzza, см. https://sites.google.com/site/scarabotix/ocamcalib-toolbox/ocamcalib-toolbox-download-page

Метод 1 найден в файле " world2cam.m "

Для проекции используйте то же уравнение, что и выше. В проекционном случае уравнение имеет три известные (x, y, z) и три неизвестные переменные (u, v и лямбда). Сначала мы заменяем лямбду на rho, понимая, что

u = x/lambda
v = y/lambda
rho=sqrt(u^2+v^2) = 1/lambda * sqrt(x^2+y^2)  --> lambda = sqrt(x^2+y^2) / rho

После этого у нас есть неизвестные переменные (u, v и rho)

u = x/lambda = x / sqrt(x^2+y^2) * rho
v = y/lambda = y / sqrt(x^2+y^2) * rho
z / lambda = z /sqrt(x^2+y^2) * rho = a0 + a2*rho^2 + a3*rho^3 + a4*rho^4

Как видно, последнее уравнение теперь есть только одно неизвестное, а именно rho. Таким образом, мы можем легко решить эту проблему, используя, например, функцию корней в Matlab. Однако результат не всегда существует и не обязательно является уникальным. После решения неизвестной переменной rho вычисление uv очень просто, используя приведенное выше уравнение.

Эту процедуру необходимо выполнять для каждой точки (x, y, z) отдельно и, таким образом, она довольно затратна в вычислительном отношении для изображения.

Метод 2 найден в файле "world2cam_fast.m"

Последнее уравнение имеет вид rho (x, y, z). Однако, если мы определим m = z / sqrt (x ^ 2 + y ^ 2) = tan (90 ° -тета), это зависит только от одной переменной, а именно rho (m).

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

Это становится понятным, потому что "world2cam_fast.m" использует ocam_model.pol, который вычисляется в "неискаженном виде". м». «undistort.m», в свою очередь, использует «findinvpoly.m».

...