1

大きな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); 

答えて

0

あなたは「最大」の精度のために、1に設定する必要があり、そのようなtarget_precisionとして検索パラメータを、微調整するために、flann-manualから6+ページをチェックしてください。

パラメータは、多くの場合、イプシロン(ε)、次元の呪いを打つために(TRY)するために、高次元空間で使用されている近似最近傍探索(アンズ)、のように見出されること。 FLANNは通常、私が知る限り、3つではなく128の次元で使用されていますが、あなたが経験している悪い性能を説明するかもしれません。

3次元でうまく動作するライブラリはCGALです。しかし、それは計算幾何学のライブラリであるため、FLANNよりもはるかに大きいので、NNSだけでなく多くの問題の機能を提供します。

+0

返信いただきありがとうございます。私は "ベクトルにストロークされた"私のデータがテストされるべきflann行列にコピーされるというバグを発見しました。私はウェブを介して検索し、この問題は以前に何の良い返答なしに言及された。 querry_points flann行列を正しく初期化する方法を知っていますか?現在の状態に間違った値が含まれています。私はそれに対処しようとしていますが、残念ながら成功しません。 –

+0

私はコンスタンティノムードがよくわかりません。あなたのコードには、どの変数に問題がありますか?私は年齢のためにFLANNを使用していません。マニュアルの例を確認しましたか?これらの例で自分のコードを作成したことを覚えています。 – gsamaras

+0

flann行列querry_nodesは初期化されていませんでしたが、修正しました。しかし、隣人のエラーが構成されています。私は低次元データに最適化されたksingletreeindexを使用し、精度を設定するオプションを与えません。私は可能性をより正確にcgalを試してみてくださいね。私はあなたにもcgalの経験があるのを見た。正確なポイントを取得できるかどうか知っていますか? –

関連する問題