将图像 A 中的二进制描述符匹配到一组图像 B*,我碰巧尝试将“火车”和“查询”图像反转为以下函数:
cv::BFMatcher matcher;
matcher.match(queryDescriptors, trainDescriptors, matches);
第一点是该函数不是对称的,即 match(trainDescriptors, queryDescriptors, matches) 不会给出相同数量的匹配。
其次,如果我使用 A 作为查询图像,使用 B* 作为训练图像(在 for 循环中),那么我总是从 A 到 B* 的图像获得相同数量的匹配(例如,如果 A -> B1 有 155 个匹配项,然后 A -> Bx 都有 155 个匹配项)。
但是如果我做相反的事情(即使用 B* 作为查询图像,使用 A 作为训练图像),那么每次匹配的数量都是不同的(这对我来说似乎更合乎逻辑)。
直觉上,我会说 A 和 Bx 之间的匹配应该与 Bx 和 A 之间的匹配相同,但显然不是这样。这是为什么?