我正在尝试为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
};
但我不知道如何使用它。
由于
答案 0 :(得分:0)
您应该提供一些您使用的图像示例。 SIFT可能适合您正在尝试的内容,也可能不适合。这项任务有很多不同的方法。
请注意单应性是P2到P2的可逆映射,这基本上意味着它对于平面物体(或远处的场景)是精确的,并且因为你的物体(可能)不是平面的近似值。
你可能想出很多方法来衡量这种信心。基本上重要的是单应性的支持(即RANSAC从您计算单应性的所有SIFT匹配中选择了多少个点)以及这些“inlier”点如何通过单应性映射。要查找分数,请使用单应性将点投影到第二个图像上,并找到原始点的重新投影累积距离。得分越低,匹配越好(请注意,您需要按点数进行标准化,否则对于较少数量的对应,您将得到更好的分数,这不是您想要的)
希望这有帮助, 亚历
答案 1 :(得分:0)
如果你想在对象之间找到信心。我认为以下步骤会有所帮助:
(因为你提到了单应矩阵,所以我认为它是平面物体)
从每个平面物体图像中抽取筛选关键点
通过匹配关键点将场景图像与对象图像进行比较。
对于某些对象图像,您无法在它们之间找到单应矩阵。但是对于其他人来说,你可以在它们之间找到单应矩阵,通过使用同质矩阵将对象图像转换为场景图像,或许与函数warppes **相关。
然后您可以使用模板匹配来查找场景中的对象,还可以获得置信度值。
我希望它能解决你的问题。