内在参数OpenCV解释

时间:2016-10-10 10:56:10

标签: opencv

我使用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

我认为这个值不正确。

有没有人知道我做错了什么?

1 个答案:

答案 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

为了获得更准确的结果,您还应该考虑非径向变形: enter image description here