极线几何中的预期点是不正确的

时间:2012-04-17 11:17:40

标签: matlab geometry computer-vision projection perspectivecamera

我有2个摄像头(摄像头2正在翻译摄像头1),投影矩阵 P1 P2 。他们拍了一张图片, I1 (相机1)和 I2 (相机2)512x512。

P1 =

-510.0686  -12.9401 -259.3765 -130.4363
-7.6701 -517.0217 -257.2912  -66.5024
-0.0325   -0.0518   -1.0108   -0.4847


P2 =

-736.7330  -13.5206 -388.4970 -828.1644
-12.1721 -749.3048 -375.2760 -560.6533
-0.0291   -0.0623   -1.4690   -3.2141

我计算基本矩阵F:

F =

1.0e+003 *

0.0000    0.0033   -0.6047
-0.0033    0.0000    0.7938
0.5973   -0.8252    5.9205

然后我使用RANSAC, point1 point2 在SURF的两个图像之间找到匹配点。

point1 =

235.3386
135.3108
1.0000

point2 =

242.7049
133.9451
1.0000

我试图计算极线并通过point2

epLineCam2 = F * punto1;

epLineCam2 =

1.0e+004 *

-0.0158
0.0028
3.4824

所以 point2 应该与I2中的预期点 epoint 非常相似,使用极线几何计算(因为SURF使用了很多近似值)。

正如你在8.2 pag上看到的那样。 Hartley & Zisserman's book上的223,

x' = Hπ * x;

其中x'是 epoint ,x是 point1

我的是:

Hpi = P2 * pinv(P1); 

Hpi =

1.4397   -0.1502  296.2940
-0.0008    1.3476  206.4950
-0.0001   -0.0006    2.5772

所以 epoint 是:

epoint =

614.7787
388.6410
2.4873

我记得你的图像尺寸是512x512,所以 epoint.x 在图像之外...... 如您所见,epoint与point2不同(很多不同)

point2 =

242.7049
133.9451
1.0000

我的问题是,为什么?我犯了哪些错误?

由于

1 个答案:

答案 0 :(得分:2)

由于您尚未发布任何matlab代码,因此很难确定您在哪里犯错,但我可以向您提出一些建议:

首先,SURF找到的匹配点不一定是正确的点。你有没有检查point1是否与point2实际匹配,只是将它们绘制到图像上?

此外,我知道你是如何获得你的投影矩阵的,但如果它们是正确的,那么下面的条件确实应该成立:

x' = P2 * pinv(P1) * x

如果您的投影矩阵是正确的,您可以通过绘制x和x'并查看它们是否匹配点来轻松验证。请注意,x'和x是Homogeneous coordinates。本说明还让您了解为什么epointpoint2有很大不同。如果将矢量epoint除以其z坐标,您将得到一个更类似于point2的结果:

         614.7787     247.1671
epoint = 388.6410  =  156.2502
         2.4873       1.0000