opencv sift算法,如何从findHomography中获得信心

时间:2013-06-18 23:12:59

标签: ios opencv image-processing computer-vision sift

我正在尝试为iPhone创建一个应用程序,但我是openCV和iOS的新开发人员。我有50多个物体图像,我有一个来自相机的场景图像。每次我在场景中都有这些对象之一。我可以通过sift算法找到一个对象,但我找不到计算置信度与对象之间进行比较的方法,因为有些对象非常相似。我使用了findHomography功能,但仍然不知道如何获得信心。我从openCV库中找到了这个,

    struct CV_EXPORTS MatchesInfo
{
    MatchesInfo();
    MatchesInfo(const MatchesInfo &other);
    const MatchesInfo& operator =(const MatchesInfo &other);

    int src_img_idx, dst_img_idx;       // Images indices (optional)
    std::vector<DMatch> matches;
    std::vector<uchar> inliers_mask;    // Geometrically consistent matches mask
    int num_inliers;                    // Number of geometrically consistent matches
    Mat H;                              // Estimated homography
    double confidence;                  // Confidence two images are from the same panorama
};

但我不知道如何使用它。

由于

2 个答案:

答案 0 :(得分:0)

您应该提供一些您使用的图像示例。 SIFT可能适合您正在尝试的内容,也可能不适合。这项任务有很多不同的方法。

请注意单应性是P2到P2的可逆映射,这基本上意味着它对于平面物体(或远处的场景)是精确的,并且因为你的物体(可能)不是平面的近似值。

你可能想出很多方法来衡量这种信心。基本上重要的是单应性的支持(即RANSAC从您计算单应性的所有SIFT匹配中选择了多少个点)以及这些“inlier”点如何通过单应性映射。要查找分数,请使用单应性将点投影到第二个图像上,并找到原始点的重新投影累积距离。得分越低,匹配越好(请注意,您需要按点数进行标准化,否则对于较少数量的对应,您将得到更好的分数,这不是您想要的)

希望这有帮助, 亚历

答案 1 :(得分:0)

如果你想在对象之间找到信心。我认为以下步骤会有所帮助:

(因为你提到了单应矩阵,所以我认为它是平面物体)

  1. 从每个平面物体图像中抽取筛选关键点

  2. 通过匹配关键点将场景图像与对象图像进行比较。

  3. 对于某些对象图像,您无法在它们之间找到单应矩阵。但是对于其他人来说,你可以在它们之间找到单应矩阵,通过使用同质矩阵将对象图像转换为场景图像,或许与函数warppes **相关。

  4. 然后您可以使用模板匹配来查找场景中的对象,还可以获得置信度值。

  5. 我希望它能解决你的问题。