Single Camera Calibration


最近做了single camera calibration,程序很快就搞定了,但是结果验证却花了近一个星期的时间,各个坐标系的转化搞得我晕头晕脑的,正确的结果还以为是错的。

calibration直接调用opencv里的函数,实现的是zhang’s A flexible new technique for camera calibration的算法,矫正的参数用pov-ray生成的image验证了一把,还是很准的。

我在pov-ray里定义的camera为:
location <5, -8, -16>
look_at 0
angle 60
resolution 800×600
right 1.33
up 1

所以intrinsic parameters 应该为:

[fx 0 cx]     [692.8203 0 400]
[0 fy cy] =  [0 692.8203 300] (fx = fy = 600 * (2 / 3) * 3 ^ 0.5 = 692.8203.)
[0  0   1]     [0 0        1        ]

calibration的结果为:

693.979 0 399.431
0 692.647 300.201
0 0 1

extrinsic parameters应该为:

calibration的结果为:

-0.954613 1.60057e-005 -0.297849
-0.12835 -0.902411 0.411317
-0.268776 0.430877 0.861455

T’ = 0.0100281 -0.000391165 18.578

从上面的结果来看zhang’s的算法还是很准的,难怪opencv都用他的算法。只是extrinsic parameters产生的结果让我迷了很长时间,我一直以为translation matrix T应该就是camera location <5, -8, -16>,但是结果是 <0.0100281 -0.000391165 18.578>。实在想不明白,最后还是到yahoo opencv论坛上问了一把,才知道这个R,T都是在定义在camera coordinate下面的,所以最终的T是用R*t’得到的,因为要将该向量转化到camera coordinate下面。因为这郁闷了很长一段时间,现在总算搞明白了。

Advertisement

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s