Метод использует алгоритм классификации k-ближайших соседей для изучения сопоставления между дескрипторами в одном изображении и вектором целочисленных индексов, указывающих их положение. Из исходный код класса KNearestNeighborMatch, вы можете увидеть:
/// <summary>
/// Creates a nearest neighbor algorithm with the feature points as
/// inputs and their respective indices a the corresponding output.
/// </summary>
///
protected virtual IMulticlassScoreClassifier<T> CreateNeighbors(T[] features)
{
int[] outputs = Vector.Range(0, features.Length);
// Create a k-Nearest Neighbor classifier to classify points
// in the second image to nearest points in the first image
return new KNearestNeighbors<T>(K, Distance).Learn(features, outputs);
}
Смысл построения этого классификатора в том, что теперь вы можете передать ему любой дескриптор, даже из тех, которых не было в исходном изображении, и он выдаст вам индекс того дескриптора в исходном изображении, который ближе всего к нему. Таким образом, на практике вы можете использовать этот классификатор для получения наилучших совпадений между характерными точками двух разных изображений.
Что касается наблюдения о количестве точек, возвращаемых функцией, это объяснено в строках 144–154:
// We should build the classifiers with the highest number
// of training points. Thus, if we have more points in the
// second image than in the first, we'll have to swap them
if (points2.Length > points1.Length)
{
var aux = points1;
points1 = points2;
points2 = aux;
swap = true;
}
Как видите, метод будет использовать в качестве «якоря» изображение с наибольшим количеством дескрипторов SURF. Это необходимо, чтобы ни одна характерная точка на изображении с меньшим количеством дескрипторов не осталась неклассифицированной.
Отвечая на первоначальный вопрос о том, как вычислить меру совместимости между двумя изображениями, можно рассмотреть общее количество совпадений точек, сумму лучших результатов между двумя изображениями, минимальный (худший) результат, лучший результат или их комбинация (возможно, следуя чему-то вроде расстоянию Хаусдорфа).
person
Cesar
schedule
09.07.2017