我们知道LSH只能使用CV_8U(二进制描述符)和其他方法(如KMeansIndexParams,KDTreeIndexParams和LinearIndexParams)使用CV_32F。
void lsh_search(const Mat& data,const Mat& point, Mat& indices, Mat& dists, const int k){
start_time1 = clock();
flann::Index flannIndex(data,flann::LshIndexParams(15,2,2),cvflann::FLANN_DIST_HAMMING);
finish_time1 = clock();
flannIndex.save("lshIndex.xml");
start_time2 = clock();
flannIndex.knnSearch(point, indices, dists, k,flann::SearchParams(-1));
finish_time2 = clock();
}
我使用代码获取一个给定功能的最近1000个功能(总共50000个功能),并将结果与bruteforce的结果进行比较。我发现LSH的结果与kdTree或kmeans相比是最差的。
那么OpenCV在选择“flann :: AutotunedIndexParams”的最佳方法时是否很少使用LSH?通过更改flann :: LshIndexParams的参数,我得到的最好结果是25%。