Огромное спасибо за исчерпывающий ответ. Сам на выходных еще почитал по теме, сейчас понимаю уже больше. Распишу, что и как делаю, уже с учетом вашего ответа.
1) С помощью
SURF ( класс
SurfFeatureDetector, метод
detect) определяю ключевые точки на образце и изображении.
2) Для найденных точек рассчитываю значения дескрипторов ( класс
SurfDescriptorExtractor, метод
compute).
3) Сопоставляю точки на целевом объекте и в сцене, получаю так называемые матчи (
FLANN, класс
FlannBasedMatcher, метод
match).
Тут я как раз и хотел измерять расстояние между «матчами», но только не по min, max как описал в посте, а по среднему. И, если это значение меньше какого-то пограничного значения, то это говорит о нахождении картинки1 на картинке2. Но поскольку вы подсказываете, что количество ложных срабатывай велико, пока отказываюсь от этого варианта.
4) В том примере, который я как раз и нашел (переделываю) используется как раз
findHomography.
docs.opencv.org/doc/tutorials/features2d/feature_homography/feature_homography.html
Mat H = findHomography( obj, scene, CV_RANSAC );
CV_RANSAC — как раз использую RANSAC.
Но вот ее назначения я совсем не понимаю и как из матрицы преобразований H получить точные соответствия или что-то другое, что можно использовать.