问题描述
我正在逐步从单眼视觉测距管道建立束调整。使用2D-2D功能对应关系(例如ORB功能),已编写了简单的VO管道。最重要的是,在通常10帧的窗口中,每个帧中的公共点都存储在数组中。因此,如果总共有10帧,则这是10帧末尾可用的不同输出。
- 9个相似度转换(4x4),即
i
的帧i+1
和i=0:9
之间的一次转换 -
10xN
个关键点值,其中在所有10个帧中跟踪N
个公共关键点。N
通常是25
。每个关键点的格式为(x,y)
现在,要在此窗口中执行任何类型的束调整,必须找到公共点的3D位置。我的问题是,如何获得3D点。我知道3D点是通过使用它们之间的帧变换对相应2D点进行三角剖分而获得的。 (使用cv2.triangulatePoints
)但是,必须选择哪些框架进行三角剖分?假设3D点相对于框架0
的参考,有很多选择可以进行三角剖分。即一个人可以选择框架1
并进行三角剖分以获得3D点,或者甚至可以选择框架9
并通过应用框架0
和9
之间的变换进行训练(仅通过链接帧间翻译),或类似地介于两者之间的任何帧。
从理论上讲,如果所有帧间姿态估计都是正确的(具有正确的比例),则使用帧0
和任何其他帧进行三角剖分的3D点应相同。但是,束调整的重点是细化稍微不正确的姿势估计。我的理解是,所有姿势的准确性在很大程度上取决于初始三角剖分3D点的准确性。因此,为了获得最佳性能,最佳的框架选择是什么。如何做到这一点?
还是有一种无需显式三角剖分即可执行束调整的方法?
注意:请不要建议将视觉里程计流水线(使用2D-2D对应关系)更改为PNP算法,因为我想知道如何针对纯2D-2D情况(使用基本矩阵)来做到这一点。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)