我使用OpenCv算法测量了固有的相机参数。成像仪的分辨率为(752,480)
值为:
焦距X 1021.477666;
焦距Y 1021.146888
校长点X 376.2966754
校长点Y 253.7513058
K1 -0.263658008
K2 -0.206264024
P1 -0.001102641
P2 -0.000980475
错误0.122991565
现在我想计算一个像素的扭曲度。 “旧”像素的坐标是
(x = 680,y = 390)。
我使用以下公式计算校正像素的坐标
x_ {correct} = x(1 + k_1 r ^ 2 + k_2 r ^ 4)
y_ {correct} = y(1 + k_1 r ^ 2 + k_2 r ^ 4)
r 我使用了距离
r = sqrt((x_shifted ^ 2 - x_principalPoint ^ 2)+(y_shifted ^ 2 - y_principalPoint ^ 2))
我做的计算:
x_corrected = 680 *(1 +(-0.26365 * 333 ^ 2)+( - 0.2062 + 333 ^ 2))
= 55524658.09
我认为这个值不正确。
有没有人知道我做错了什么?
答案 0 :(得分:0)
您需要在标准化坐标中表示未失真的点。所以你需要先转换它:
x_norm = (x-px)/px = 0.8071
和
y_norm = (y-py)/py = 0.5369
然后计算半径:
r = sqrt(x_norm^2+y_norm^2)
使用这些值,您可以获得校正的标准化坐标:
x_corr_norm = x_norm*(1+k1*r^2+k2*r^4) = 0.4601
y_corr_norm = y_norm*(1+k1*r^2+k2*r^4) = 0.3061
你必须再次将它们转换回来:
x_corr = (x_corr_norm+1)*px = 549.4409
y_corr = (y_corr_norm+1)*py = 331.4280