使用openCV的极线几何/立体视觉

时间:2016-03-28 08:12:10

标签: c++ opencv

我正在使用openCV开发极线几何。 (最终目标是使用相同的相机估算从不同视点拍摄的两幅图像的模型或深度信息的世界坐标)

然而,我正在努力估计用于极线几何的基本矩阵和基本矩阵。

corresponding points with different viewpoint of camera

如上所示,我捕获了两个具有不同视点的图像(相同的相机)。相同的颜色点是对应点。

确切的坐标是(如果你想验证我写的)

points1:left

points1.push_back(Point2f(157,223));
points1.push_back(Point2f(190,312));
points1.push_back(Point2f(157,541));
points1.push_back(Point2f(136,443));
points1.push_back(Point2f(355,374));
points1.push_back(Point2f(346,406));
points1.push_back(Point2f(252,410));
points1.push_back(Point2f(254,379));

points2:正确

points2.push_back(Point2f(190,188)); 
points2.push_back(Point2f(303,284)); 
points2.push_back(Point2f(252,512)); 
points2.push_back(Point2f(166,420)); 
points2.push_back(Point2f(422,311));
points2.push_back(Point2f(412,339));
points2.push_back(Point2f(341,366));
points2.push_back(Point2f(345,335));

使用积分,

Mat FundamentalMatrix = findFundamentalMat(points1,points2,FM_RANSAC,1.0,0.99);

openCV函数用于计算基本矩阵。但是,我猜计算的基础很奇怪。

calculated fundamental matrices and constraints

  • left:使用FM_RANSAC,右:使用CV_FM_8POINTS

计算的基本矩阵应满足x< T F x = 0

其中x'是(u2,v2,1)^ T和x是(u1,v1,1)^ T

使用u1,v1 =点1坐标和u2,v2 =点2坐标。

如上所示,我计算了x< T F x = 0.然而第三种情况(第三对应点),它不是零。

当然我尝试了不同的方法。

Mat FundamentalMatrix = findFundamentalMat(points1, points2, CV_FM_8POINT);

也尝试了。

但是对于这种情况,所有相应的点都不满足约束条件。

问题是什么?我做错了吗? (我的想法是8分仍然不足,应该有更多分数)

此外,我估计了不同观点的模型(外在矩阵)的姿态。并执行相机校准。因此估计E1(视点1的外在矩阵),E2,K(内在矩阵)。 (我猜这几乎是准确的。因为如果我使用E1,E2和k投影模型点,那么它将被投影到图像上的正确点)。 - >然后我估计基本矩阵E = K ^ T F K. E应该满足E应该为0的行列式并且具有特征值(1,1,0)或(sigma,sigma,1) 但事实并非如此。

有什么问题?

0 个答案:

没有答案