Давайте сосредоточимся на уравнении для ret_x
, которое упрощенно выглядит следующим образом:
ret_x = (-0.0029 * pix_x + 0.47) /
(4.4e-6 * (pix_x - 160.0)^2 + 4.8e-6 * (pix_y - 100.0)^2 - 1.0);
Сначала обратите внимание на магические числа 160 и 100.Разрешение захвата Pixy составляет 320x200, поэтому они предназначены для перевода координат пикселя из пространства, где (0,0) находится в углу, где оно находится в центре.Таким образом, если pix_x
равно 160, а pix_y
равно 100, это центр кадра, а знаменатель будет равен -1.
Остальное представляется коррекцией объектива.Вот значения ret_x
, которые вы получаете в диапазоне допустимых значений pix_x
и pix_y
:
0 40 80 120 160 200 240 280 320
0 -0.56 -0.40 -0.25 -0.12 0.00 0.12 0.25 0.40 0.56
20 -0.55 -0.39 -0.25 -0.12 0.00 0.12 0.25 0.39 0.55
40 -0.54 -0.38 -0.25 -0.12 0.00 0.12 0.25 0.38 0.54
60 -0.53 -0.38 -0.24 -0.12 0.00 0.12 0.24 0.38 0.53
80 -0.53 -0.38 -0.24 -0.12 0.00 0.12 0.24 0.38 0.53
100 -0.53 -0.38 -0.24 -0.12 0.00 0.12 0.24 0.38 0.53
120 -0.53 -0.38 -0.24 -0.12 0.00 0.12 0.24 0.38 0.53
140 -0.53 -0.38 -0.24 -0.12 0.00 0.12 0.24 0.38 0.53
160 -0.54 -0.38 -0.25 -0.12 0.00 0.12 0.25 0.38 0.54
180 -0.55 -0.39 -0.25 -0.12 0.00 0.12 0.25 0.39 0.55
200 -0.56 -0.40 -0.25 -0.12 0.00 0.12 0.25 0.40 0.56
Таким образом, как и ожидалось, ret_x
близко к 0 для пикселей около центра (pix_x == 160
).И оно достигает +/- 0,56 в крайних точках, что предполагает горизонтальное поле зрения приблизительно в 120 градусов (из тригонометрии, ширина 2 * 0,56 метра на расстоянии 1 метр).
Горизонтальная коррекция слегка зависит отвертикальная координата, особенно вблизи углов.Это, по-видимому, исправляет сферические искажения в линзе (что является обычным явлением).
Проницательный признает, что уравнение слегка дефектно: учитывая координаты пикселей в [0,319] и [0,199], значения центра должныбыть 159,5 и 99,5, а не 160 и 100.