我有一组超过 1000 张图片的图像。对于每个图像,我都提取 SURF 描述符。现在我将添加一个查询图像,并想尝试在图像集中找到最相似的图像。出于性能和内存的原因,我只为每个图像提取 200 个带有描述符的关键点。这或多或少是我的问题。目前我通过这样做过滤匹配:
对称匹配: 两个方向的简单暴力匹配。所以从 Image1 到 Image2 和从 Image2 到 Image1。我只保留两个方向都存在的匹配项。
List<Matches> match1 = BruteForceMatching.BFMatch(act.interestPoints, query.interestPoints);
List<Matches> match2 = BruteForceMatching.BFMatch(query.interestPoints, act.interestPoints);
List<Matches> finalMatch = FeatureMatchFilter.DoSymmetryTest(match1, match2);
float distance = 0;
for(int i = 0; i < finalMatch.size(); i++)
distance += finalMatch.get(i).distance;
act.pic.distance = distance * (float) query.interestPoints.size() / (float) finalMatch.size();
我知道还有更多过滤方法。你怎么看我试着用最终比赛的数量来衡量距离。但我不觉得我这样做是正确的。当我寻找其他方法时,它们看起来都使用图像中存在的所有提取兴趣点进行计算。有没有人有一个好的方法?还是权衡距离的好主意?
我知道没有黄金解决方案,但一些经验、想法和其他方法会非常有帮助。