大きな3Dポイントデータセットで近隣ノードの正確な数を見つけようとしています。目標は、データセットの各ポイントが、指定された半径を持つ領域内のすべての可能なネイバーを取得することです。 FLANNは、より低次元のデータがブルートフォース検索と比較しながら正確な近隣を検索できることを保証します。隣人はさらなる計算には不可欠なので、正確な数が必要です。私は半径を少し増やしてテストしましたが、これは問題ではないようです。誰もがFLANNまたは他のC + +ライブラリで正確な近隣を計算する方法を知っていますか?FLANNで半径の正確な最近傍を計算する際にエラーが発生しました
コード:
// All nodes to be tested for inclusion in support domain.
flann::Matrix<double> querry_nodes = flann::Matrix<double>(&nodes_pos[0].x, nodes_pos.size(), 3);
// Set default search parameters
flann::SearchParams search_parameters = flann::SearchParams();
search_parameters.checks = -1;
search_parameters.sorted = false;
search_parameters.use_heap = flann::FLANN_True;
flann::KDTreeSingleIndexParams index_parameters = flann::KDTreeSingleIndexParams();
flann::KDTreeSingleIndex<flann::L2_3D<double> > index(querry_nodes, index_parameters);
index.buildIndex();
//FLANN uses L2 for radius search.
double l2_radius = (this->support_layer_*grid.spacing)*(this->support_layer_*grid.spacing);
double extension = l2_radius/10.;
l2_radius+= extension;
index.radiusSearch(querry_nodes, indices, dists, l2_radius, search_parameters);
返信いただきありがとうございます。私は "ベクトルにストロークされた"私のデータがテストされるべきflann行列にコピーされるというバグを発見しました。私はウェブを介して検索し、この問題は以前に何の良い返答なしに言及された。 querry_points flann行列を正しく初期化する方法を知っていますか?現在の状態に間違った値が含まれています。私はそれに対処しようとしていますが、残念ながら成功しません。 –
私はコンスタンティノムードがよくわかりません。あなたのコードには、どの変数に問題がありますか?私は年齢のためにFLANNを使用していません。マニュアルの例を確認しましたか?これらの例で自分のコードを作成したことを覚えています。 – gsamaras
flann行列querry_nodesは初期化されていませんでしたが、修正しました。しかし、隣人のエラーが構成されています。私は低次元データに最適化されたksingletreeindexを使用し、精度を設定するオプションを与えません。私は可能性をより正確にcgalを試してみてくださいね。私はあなたにもcgalの経験があるのを見た。正確なポイントを取得できるかどうか知っていますか? –