从匹配像素计算FOV

时间:2014-01-24 18:49:44

标签: opengl computer-vision linear-algebra

鉴于从相同位置和FOV拍摄的2张图像,并且只有方向改变(偏航,俯仰,滚动),如何使用匹配的像素使用特征匹配算法计​​算图像的FOV?

鉴于每个图像中的匹配像素集应该取消投影(通过逆模型 - 视图 - 投影矩阵变换的像素位置)到相同的单位矢量,我假设我可以在透视投影矩阵中求解F并且从那里计算出FOV。

注意:相机的位置和方向角度是已知的。

解决透视投影矩阵让我解决了F所在的VecA / | VecA | = VecB / | VecB |。我不知道如何解决这个问题,因为矢量在归一化时需要相等。 VecA和VecB中的矢量分量分解为:

mv = inverse Model-View matrix for image
width = width of image in pixels
height = height of image in pixels
px = pixel location of matching feature
F = tan(FOV/2)

Vec.X = (mv.m11 * F * px.x) + (mv.m12 * F * height/width * px.y) - mv.m13
Vec.Y = (mv.m21 * F * px.x) + (mv.m22 * F * height/width * px.y) - mv.m23
Vec.Z = (mv.m31 * F * px.x) + (mv.m32 * F * height/width * px.y) - mv.m33

示例数据:

width  = 704
height = 480
pxA = 0.28409090909090917, -0.16666666666666663
pxB = 0.0, 0.0
mvA = -0.6560590289905072, -0.0902630302223078,  -0.7492924234603735, 
      -0.7547095802227721,  0.0784644550873574,   0.6513499664602825,
       0.0,                 0.9928221969028145,  -0.11959968786359426
mvB = -0.7116393973440803, -0.06257611232965804, -0.6997525264787975, 
      -0.7025449225122575,  0.06338616284802252,  0.7088108536215074,
       0.0,                 0.9960253131949559,  -0.08907062071687842

    F = 0.2679491924311227   
 VecA = 0.7021003426128247, -0.7111890623383523,   0.08936947128543493
 VecB = 0.6997525264787975, -0.7088108536215074,   0.08907062071687842
|VecA|= 1.0033552092278133
|VecB|= 1.0

1 个答案:

答案 0 :(得分:0)

有各种用已知旋转进行自校准的方法。

我使用过Hartley的这个:http://users.cecs.anu.edu.au/~hartley/Papers/calibration/eccv94/calib.pdf

另见这一篇:http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.128.5281&rep=rep1&type=pdf