多视图几何--基础矩阵

一、原理

1、计算图像对的特征匹配,并估计基础矩阵。【基础矩阵F,是将一台摄像机的像平面上的点在图像坐标(像素)上的坐标和另一台摄像机的像平面上的点关联起来。】使用外极线作为第二个输入,通过在外极线上对每个特征点寻找最佳的匹配来找到更多的匹配。
特征匹配采用的是SIFT方法进行特征匹配,之后再用RANSAC方法:
step1.从样本集中随机选取一组样本,计算得到模型参数
step2.判断模型参数的质量,采集的正确数据(inliers,可以被模型描述的数据)
step3.重复上述步骤,记录质量最好的模型;满足迭代条件时退出(达到迭代次数)

参考博文:
https://blog.csdn.net/lwx309025167/article/details/80590549

2、制作一个多图像的数据集,挑选一堆图像,计算三维点和照相机矩阵。匹配特征到剩下的图像中以获得对应。然后利用这些对应的三维点使用后方交汇法,计算其他图像的照相机矩阵,绘制这些三维点和照相机的位置。

具体步骤:
step1.载入图像,并计算特征,匹配特征。
step2.使用齐次坐标表示,并使用 inv(K) 归一化:
ndx = matches.nonzero()[0]
x1 = homography.make_homog(l1[ndx, :2].T)
ndx2 = [int(matches[i]) for i in ndx]
x2 = homography.make_homog(l2[ndx2, :2].T)
step3.使用 RANSAC 方法估计 E:
model = sfm.RansacModel()
F, inliers = F_from_ransac(x1n, x2n, model, maxiter=5000, match_threshold=1e-5)
print (F)
step4.计算照相机矩阵(P2 是 4 个解的列表):
P1 = array([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0]])
P2 = sfm.compute_P_from_fundamental(F)
step5.绘制这些三维点和照相机的位置。

二、调试结果

1、在同一个角度拍摄三张图像特征匹配以及估计基础矩阵结果:
多视图几何--基础矩阵_第1张图片
多视图几何--基础矩阵_第2张图片
多视图几何--基础矩阵_第3张图片
多视图几何--基础矩阵_第4张图片
多视图几何--基础矩阵_第5张图片
多视图几何--基础矩阵_第6张图片
多视图几何--基础矩阵_第7张图片
2、在不同角度拍摄三张图像特征匹配以及估计基础矩阵结果:
多视图几何--基础矩阵_第8张图片
多视图几何--基础矩阵_第9张图片
多视图几何--基础矩阵_第10张图片
多视图几何--基础矩阵_第11张图片
多视图几何--基础矩阵_第12张图片

三、实验结果分析

根据上面的两组实验结果,可以很明显的看到,第一组在同一个角度拍的,它的SIFT特征匹配结果比起第二组在不同角度拍的要好很多。第二组还出现了很多错配点,出现很多错误的原因有可能是因为建筑之间长的有点像,还有一种可能就是图像拍的比较暗也会照成匹配结果不好。而且第二组图像拍摄的角度差较大,可能也是造成结果不好的原因之一。

你可能感兴趣的:(多视图几何--基础矩阵)