小编Dap*_*nee的帖子

选择正确的基本矩阵

我想使用 Matlab 自己编写 sfm 管道,因为我需要一些 opencv 函数不提供的输出。不过,我使用 opencv 进行比较。

Opencv 函数[E,mask] = cv.findEssentialMat(points1, points2, 'CameraMatrix',K, 'Method','Ransac');使用 Nister 的五点算法和 RANSAC 提供基本的矩阵解。

使用以下方法找到内点指数:InliersIndices=find(mask>0);

我使用了 Nister 算法的 Matlab 实现:

Fivepoint_算法_代码

该函数的调用如下:

[E_all, R_all, t_all, Eo_all] = five_point_algorithm( pts1, pts2, K, K);
Run Code Online (Sandbox Code Playgroud)

该算法最多输出 10 个基本矩阵的解。但是,我遇到了以下问题:

  1. 上述实现仅用于完美对应(没有 Ransac),我使用 向算法提供 5 个对应InliersIndices,输出的基本矩阵(最多 10 个)都与 Opencv 返回的矩阵不同。
  2. 所有返回的基本矩阵都应该是解,那么为什么当我使用以下函数对每个矩阵进行三角测量时,我没有获得相同的 3D 点?
  3. 如何选择正确的基本矩阵解决方案?

我使用matlab工具箱的功能进行三角测量

投影矩阵:

P1=K*[eye(3) [0;0;0]];
P2=K*[R_all{i} t_all{i}];

[pts3D,rep_error] = triangulate(pts1', pts2', P1',P2');
Run Code Online (Sandbox Code Playgroud)

编辑

返回的E来自[E,mask] = cv.findEssentialMat(points1, points2, 'CameraMatrix',K, 'Method','Ransac');

E = …
Run Code Online (Sandbox Code Playgroud)

matlab opencv computer-vision

5
推荐指数
1
解决办法
1070
查看次数

标签 统计

computer-vision ×1

matlab ×1

opencv ×1