0

我有 2 台摄像机(摄像机 2 正在平移摄像机 1)及其投影矩阵P1P2。他们拍摄了一张图像,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、 point1point2找到了两个带有 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 页上看到的那样。223 在Hartley & Zisserman 的书上,

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

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

谢谢

4

1 回答 1

2

由于您还没有发布任何 matlab 代码,因此很难说出您到底在哪里犯了错误,但我可以给您一些建议:

一方面,SURF 找到的匹配点不一定是正确的点。您是否检查过是否point1实际匹配point2,例如仅将它们绘制到图像上?

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

x' = P2 * pinv(P1) * x

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

         614.7787     247.1671
epoint = 388.6410  =  156.2502
         2.4873       1.0000
于 2012-04-18T02:04:50.710 回答