Я использую основанный на FLANN knnsearch. Мой набор функций содержит 4 изображения размером 500 * 500. Я хочу, чтобы ближайшие соседи по всем точкам на всех 4 изображениях (набор запросов совпадает с набором функций), но для запуска в opencv с cpp требуется много времени. Есть ли что-нибудь, что можно сделать, чтобы уменьшить время выполнения.
Я установил num_features = 500 * 500 и размерность = 4. Я хочу, чтобы расстояние и ближайшие соседи для каждой точки на всех 4 изображениях, чтобы в дисках и индексной матрице были те же элементы no.of, что и объекты.
Вот код
Mat features,temp[4];
//input is an array of 4 images that contain features.
int num_data = input[0].rows * input[0].cols;
int num_queries = input[0].rows * input[0].cols;
temp[0] = input[0].clone();
temp[1] = input[1].clone();
temp[2] = input[2].clone();
temp[3] = input[3].clone();
temp[0] = temp[0].reshape(0, num_data); transpose(temp[0], temp[0]);
temp[1] = temp[1].reshape(0, num_data); transpose(temp[1], temp[1]);
temp[2] = temp[2].reshape(0, num_data); transpose(temp[2], temp[2]);
temp[3] = temp[3].reshape(0, num_data); transpose(temp[3], temp[3]);vconcat(temp[0],temp[1],features);
vconcat(temp[2], features, features);
vconcat(temp[3], features, features);
Mat query = features.clone();
flann::KDTreeIndexParams indexParams(5);
flann::Index kdtree(features, indexParams);
Mat indices;
Mat dists;
int k = 3;
kdtree.knnSearch(query, indices, dists, k, flann::SearchParams(10));
Mat avg;
reduce(dists, avg, 1, CV_REDUCE_AVG);
размер функций 250000 * 4.
размер дисков и индексов 250000 * 3, а средний размер 250000 * 1.
Я что-то здесь не так делаю? Я попытался найти, но не смог получить подробное объяснение knnsearch в opencv.
Задача ещё не решена.