int main(int argc, char** argv) { int rows = 9000; int cols = 128; int tcount = 1000; printf("Reading input data file.\n"); float* dataset = read_points("dataset.dat", rows, cols); printf("Reading test data file.\n"); float* testset = read_points("testset.dat", tcount, cols); int nn = 3; int* result = (int*) malloc(tcount*nn*sizeof(int)); float* dists = (float*) malloc(tcount*nn*sizeof(float)); struct FLANNParameters p = DEFAULT_FLANN_PARAMETERS; p.algorithm = KDTREE; p.trees = 8; p.log_level = LOG_INFO; float speedup; printf("Computing index.\n"); flann_index_t index_id = flann_build_index(dataset, rows, cols, &speedup, &p); flann_find_nearest_neighbors_index(index_id, testset, tcount, result, dists, nn, &p); write_results("results.dat",result, tcount, nn); flann_free_index(index_id, &p); free(dataset); free(testset); free(result); free(dists); return 0; }
void NearestNeighborFLANN::setData(PointCloud3D* data) { assert(data != 0); if (index_id != 0) { // clean up if previous versions exist flann_free_index(index_id, ¶meters); } dimension = 3; //we work with a 3D points... rows = data->getSize(); cols = dimension; dataMatrix = new float[rows * cols]; // convert data int matrixIndex = 0; for (int rowIndex = 0; rowIndex < rows; ++rowIndex) { dataMatrix[matrixIndex + 0] = static_cast<float> ((*data->getPointCloud())[rowIndex].getX()); dataMatrix[matrixIndex + 1] = static_cast<float> ((*data->getPointCloud())[rowIndex].getY()); dataMatrix[matrixIndex + 2] = static_cast<float> ((*data->getPointCloud())[rowIndex].getZ()); matrixIndex += 3; } // create underlying data structure index_id = flann_build_index(dataMatrix, rows, cols, &speedup, ¶meters); }
void NearestNeighborFLANN::setData(vector<vector<double> >* data) { assert(data != 0); if (index_id != 0) { // clean up if previous versions exist flann_free_index(index_id, ¶meters); } dimension = (*data)[0].size(); rows = data->size(); cols = dimension; dataMatrix = new float[rows * cols]; // convert data int matrixIndex = 0; for (int rowIndex = 0; rowIndex < rows; ++rowIndex) { for (int j = 0; j < dimension; ++j) { dataMatrix[matrixIndex + j] = static_cast<float> ( (*data)[rowIndex][j] ); } matrixIndex += dimension; } // create underlying data structure index_id = flann_build_index(dataMatrix, rows, cols, &speedup, ¶meters); }
Registration::~Registration() { if (mFlannIndex != NULL) { flann_free_index(mFlannIndex, &mSearchPara); } if (mDataSet != NULL) { delete []mDataSet; } }
int main(int argc, char** argv) { float* dataset; float* testset; int nn; int* result; float* dists; struct FLANNParameters p; float speedup; flann_index_t index_id; int rows = 9000; int cols = 128; int tcount = 1000; /* * The files dataset.dat and testset.dat can be downloaded from: * http://people.cs.ubc.ca/~mariusm/uploads/FLANN/datasets/dataset.dat * http://people.cs.ubc.ca/~mariusm/uploads/FLANN/datasets/testset.dat */ printf("Reading input data file.\n"); dataset = read_points("dataset.dat", rows, cols); printf("Reading test data file.\n"); testset = read_points("testset.dat", tcount, cols); nn = 3; result = (int*) malloc(tcount*nn*sizeof(int)); dists = (float*) malloc(tcount*nn*sizeof(float)); p = DEFAULT_FLANN_PARAMETERS; p.algorithm = FLANN_INDEX_KDTREE; p.trees = 8; p.log_level = FLANN_LOG_INFO; p.checks = 64; printf("Computing index.\n"); index_id = flann_build_index(dataset, rows, cols, &speedup, &p); flann_find_nearest_neighbors_index(index_id, testset, tcount, result, dists, nn, &p); write_results("results.dat",result, tcount, nn); flann_free_index(index_id, &p); free(dataset); free(testset); free(result); free(dists); return 0; }
NearestNeighborFLANN::~NearestNeighborFLANN() { flann_free_index(index_id, ¶meters); }