knnsearch为大量功能花费了大量时间

时间:2014-06-27 05:40:02

标签: c++ opencv image-processing machine-learning knn

我正在使用基于FLANN的knnsearch。我的功能集包含4张大小为500 * 500的图像。我希望所有4个图像中的所有点的最近邻居(查询集与功能集相同)但是它需要花费大量时间在带有cpp的opencv中运行。有什么办法可以减少运行时间。 我设置了num_features = 500 * 500和dimensionality = 4.我想要所有4个图像中每个点的距离和最近邻居,因此dists和index矩阵应该具有与要素相同的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.

dists和index的大小为250000 * 3,avg的大小为250000 * 1.

我在这里做错了吗?我试图找到但无法详细解释opencv中的knnsearch。

0 个答案:

没有答案