2016-04-17 19 views
0

さて、私はPCLpointcloud2に読み込んだOBJファイルを1つ持っています。今私はそれをK-dTreeにフィードしたいと思います。 PCLPointCloud2を入力として使用していない私はそれが私のOBJファイルの表面にある場合、任意の一般的なポイントを照会したいと思います。 私は彼らの文書を理解するのが難しいと思っています。それでどうすればいいですか? さらに、わかりやすく解釈可能な良いリファレンスを教えてください。そして "PointT" BTWは何ですか?私たちによって定義されたカスタムビルドタイプですか?詳しく教えてください。ポイントクラウドライブラリのloadOBJfileで使用されるPCLPointCloud2を使用してKdTreeを実装する方法は?

+0

読み込んでいるOBJファイルには、オブジェクトの表面にあるすべての点、またはポイントクラウドライブラリが補間したいと思う頂点だけが含まれていますか? –

+0

可能であれば、ポイントを補間する必要があります。それはできますか? –

答えて

0

pcl_mesh_sampling(PCLコードディレクトリtools/mesh_sampling.cpp)のコードを見てください。それは比較的簡単です。 PLYまたはOBJからモデルをロードし、各三角形について、三角形からランダムな点をサンプリングします。最終的な点群は次に点を比較的均一にするためにボクセルグリッドのサンプルを受ける。あるいは、objファイルでpcl_mesh_samplingプログラムを実行するだけで出力PCDを取得し、PCDファイルを独自のコードにロードする前にpcl_viewerで視覚化することができます。

あなたは、最終的なポイントクラウドをしたら、あなたはhttp://pointclouds.org/documentation/tutorials/kdtree_search.php

PointTに従ってKD-ツリーを構築し、使用することができ、テンプレート引数です。 pointXYZRGBNormal(x、y、z、normal_x、normal_y、normal_z、curvature、r、g、およびzを含む)のようなより複雑なポイントまで、さまざまなポイントタイプを扱うことができます。およびbチャネル)。各アルゴリズムは、使用するポイントタイプにテンプレート化されています。おそらく、OBJファイルでPointXYZを使用した方が簡単なので、すべてのテンプレート引数にpcl :: PointXYZを使用してください。テンプレートの詳細については、http://www.tutorialspoint.com/cplusplus/cpp_templates.htmhttp://pointclouds.org/documentation/tutorials/adding_custom_ptype.phpを参照してください。

アップデート(最新のコメントへの返信)この回答はコメントのために長すぎるので、ここで追加

私はあなたが何を得ているかを見ていると思います。だから、ポイント・クラウドからポイントをサンプルするときには、オブジェクト・サーフェスのKDツリーを構築し、そのポイントの近くにどのポイントがあるかを追跡します(おそらく、ポイントがサンプリングされたフェースに隣接するすべての十分な?1つの顔が不十分です)。次に、クエリポイントが与えられたら、KDツリーの最も近いポイントを見つけて、クエリポイントがKDツリーのそのポイントに関連付けられている近くの顔の完全なリストの「外側」または内側にあるかどうかをチェックします。おそらくそれは内部のポイントです。しかし、私はこれが本当であることを保証することはできません。それは現時点でその質問に対する私の考えです。しかし、メッシュベースのアプローチが本当に必要かどうかは不思議です。ところで、メッシュを凸部品に分割すると、各凸部品を処理する際に優れた保証が得られます。

+0

もう1つ、kdツリーにクエリを実行してポイントのセットを取得すると、テストポイントのために、これらの取得したポイントを調べるだけで、オブジェクトの内側または外側にあるかどうかをチェックする必要があります。 –

+0

明確にするために、特定のクエリポイントがオブジェクトの内部にあるのか外部にあるのかを確認するという追加の要件があります。これは、表面上の近くの点を見つけることに加えて、右ですか?別の質問があります。なぜオブジェクトをポイントクラウドに変換していて、クエリポイントを各ファセットと比較するだけではないのですか? –

+0

はい、これはまさに私の必要条件です。しかし、私のクエリポイントは、キーボードからのユーザー入力によって絶えず変化し、クエリポイントの新しい位置ごとにチェックしなければならないファセットの数は膨大になります。そのため、私は一度に頂点のサブセットを取得する必要があります。 –

関連する問題