【问题标题】:How do I estimate camera pose from two sets of features in openCV?如何从 openCV 中的两组特征估计相机姿态?
【发布时间】:2015-07-30 20:33:18
【问题描述】:

我有一系列图像。我想估计我序列中每一帧的相机姿势。

我计算了每一帧的特征,并通过序列跟踪它们。我现在想估计每一帧的相机姿势。我这样做是使用以下 openCV 例程:

Mat essentialMatrix = findEssentialMat(pointsA, pointsB, f, pp, RANSAC, 0.999, 1.0, mask);
recoverPose(essentialMatrix, pointsA, pointsB, R, T, focalLength, principlePoint);

其中 pointsA 和 pointsB 由两个帧中都存在的特征的 2D 坐标组成。 pointsA 与 pointsB 之前的帧相关联。

我遇到的问题是 R 和 T 估计非常嘈杂,以至于我认为我的姿势估计有问题。

我的问题是,如何从两组特征中估计相机位姿?

注意:我熟悉this 已回答的问题。不过,我相信 openCV3 现在包含的方法可以更雄辩地解决这个问题。

以下是 X 平移的帧间差异。如您所见,它们非常不同(平滑 = 预期,锯齿状 = 估计)...

【问题讨论】:

    标签: opencv image-processing computer-vision opencv3.0


    【解决方案1】:

    您是否尝试查看您的特征中是否存在错误匹配?关于匹配中特征的位置,您有什么样的噪音?

    OpenCV 实现了一个非常基本的 RANSAC,它在现实生活中不是很健壮。您需要传递一组非常好的匹配项(可能包含 100 多个特征,以便内部计算更加稳健)。

    RANSAC 也可能选择退化配置(例如线上的点)作为最佳配置。

    其他问题可能是您通过的点大多位于同一对象/平面上,因此算法没有足够的信息来可靠地计算姿势。

    【讨论】:

    • 我对特征(轨道长度,cv::KeyPointsFilter::retainBest)进行了一些基本的过滤,每帧传入几百个特征。我正在使用的测试序列是使用 Blender 生成的,因此地面真实路径是平滑的。
    • 你能在预期输出的同时添加一些示例输出吗?
    • 我在上面添加了一些x-translation对比数据
    • 您能否也发布您正在使用的完整代码,如果没有更多信息,很难提供帮助。图像对上的点匹配示例也很棒。
    • 不幸的是,发布代码有点棘手。我正在使用 SURF 特征检测器和跟踪器。对轨道的目视检查表明它们很好。
    猜你喜欢
    • 1970-01-01
    • 2015-09-09
    • 1970-01-01
    • 2018-07-25
    • 1970-01-01
    • 1970-01-01
    • 2022-07-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多