2

我正在尝试为 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
};

但我不知道如何使用它。

谢谢

4

2 回答 2

0

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

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

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

希望这会有所帮助,亚历克斯

于 2013-06-19T04:52:47.263 回答
0

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

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

  1. 从每个平面对象图像中抽象筛选关键点

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

  3. 对于某些对象图像,您无法在它们之间找到单应矩阵。但是对于其他人,您可以找到它们之间的单应矩阵,使用单应矩阵将对象图像转换为场景图像,可能与函数warppespective**有关。

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

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

于 2013-06-19T05:48:03.593 回答