我有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 。
我的Hπ是:
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
我的问题是,为什么?我犯了哪些错误?
由于
答案 0 :(得分:2)
由于您尚未发布任何matlab代码,因此很难确定您在哪里犯错,但我可以向您提出一些建议:
首先,SURF找到的匹配点不一定是正确的点。你有没有检查point1
是否与point2
实际匹配,只是将它们绘制到图像上?
此外,我知道你是如何获得你的投影矩阵的,但如果它们是正确的,那么下面的条件确实应该成立:
x' = P2 * pinv(P1) * x
如果您的投影矩阵是正确的,您可以通过绘制x和x'并查看它们是否匹配点来轻松验证。请注意,x'和x是Homogeneous coordinates。本说明还让您了解为什么epoint
与point2
有很大不同。如果将矢量epoint除以其z坐标,您将得到一个更类似于point2的结果:
614.7787 247.1671
epoint = 388.6410 = 156.2502
2.4873 1.0000