問題タブ [point-clouds]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - x、y、z 2d配列からのopengl 3dポイントクラウドレンダリング
c++ (vs2008) で openGl を使用した 3D 点群表示の方向性が必要です。テクスチャを使用して 3D 点群表示をしようとしています。各ポイントの x、y、z を表す 3 つの 2D 配列 (それぞれ同じサイズ 1024x512) があります。私は正しい軌道に乗っていると思います
これで、バッファ内のすべての頂点が読み込まれます (私はそう思います) が、ここから先に進む方法がわかりません。または、私はここで完全に間違っています。
次に、3D ポイント クラウドとディスプレイでテクスチャとして使用するカラー データ (0 ~ 255 の値) を含む別の 2D 配列 (同じサイズ) を用意します。
kinect - PCLはpcdクラウドを作成します
これは私がこれまでに持っているものであり、そこからpcdファイルを保存したいと思います。このようなことをしなければならないことはわかっていますが、正確にはわかりません。pcl :: PointCloud :: PointPointXYZRGBA> cloud; pcl :: io:; savePCDFileASCII( "test.pcd"、cloud);
test.pcdを使用する現在のコードに何を追加する必要がありますかありがとうございます
point-clouds - 3D から 2D へのマッチング
オブジェクトの点群 (各点には色があります) と、これらのオブジェクトを示す画像があります。2D/3D で関心点を見つけて一致させたいので、画像のどの部分 (少なくとも関心点がある部分) が点群で見つかったかがわかります。
したがって、最初に興味のあるポイントを見つけ、それらの記述子を取得して一致させる必要があります。可能であれば、これは OpenCV の BRISK や ORB (特許取得済みのアルゴリズムではありません!) などの現在の高速でメモリを節約するアルゴリズムで動作するはずです。しかし、3D 用にそれらを実装する方法がわかりません。これは可能ですか?出発点となる SURF の 3D 拡張について述べた論文 (堅牢な 3 次元分類のためのハフ変換と 3D SURF) を見つけましたが、その 3D 拡張に関する情報は見つかりませんでした。それでも、問題は、そのような拡張が BRISK やその他の現在のアルゴリズムに対してどの程度実現可能かということです。
ですので、今後の進め方についてアドバイスをお願いします。
c++ - 点群で障害物のあるポイントをカリングする
3D点群画像があります(以下を参照)。
そして、理論的に他のポイントの後ろにあるすべてのポイントをカリングしたいと思います(たとえば、胸や腹部の周りのポイントによって遮られているため、人の後ろの周りのポイントは表示されません)。
この問題を解決するにはどうすればよいですか?
必要なのは正面からの邪魔にならないポイントだけなので、他の用途にも使えます。
編集:それは実際には表示目的ではありません。深度画像の特徴を抽出するために、後で表面法線を計算するために、遮るもののない頂点のみを分離しようとしています。
c++ - C++ ファイルからの書き込みデータ (点群ライブラリ)
ポイント クラウド ライブラリを使用してデプス マップを取り込み、PCD ファイルを 1 秒ごとにメモリに書き込んで、別のプログラムで取得できるようにしています。
ビジュアライザーを使用して深度マップを正しくレンダリングするプログラムがあり、実際にファイルを書き込むための1行を除いてすべて機能します。
これが私のコードです:
ファイルをcmakeしようとしたときに発生するエラーは次のとおりです。
computer-vision - PCLVisualizerが開いたままにならない
点群内の点の法線ベクトルを推定して表示するための次のコードがあります。
しかし、それを実行すると、PCLVisualizerが画面上で点滅し、プログラムが終了します。なぜ留まらないのか分かりません。CloudViewerを使用して(法線ではなく)点群を表示する場合、これは正常に機能し、画面に表示されたままになります。
c++ - 点群がどのユニットにあるかを知る方法は?
Kinect画像から作成された点群ファイルのデータセットを使用しています。軸がどの単位にあるかを知る方法はありますか?つまり、ポイントの場合、(0.003, 0.004, 0.04)
このメートル、センチメートルなどです。
pclの方法を使用してローカルパッチから表面法線を推定しようとしてsetRadiusSearch
いますが、これにより半径をメートルで指定できるため、点群の単位を知る必要があります。
c++ - 軸を中心に点群を回転させる方法は?
水平から 30 度上 (z 軸で 30 度回転) のカメラで撮影した深度画像の点群があります。カメラが 0 度にあるかのように、すべてのポイントをその位置に戻したいと思います。これは、次の回転行列で実行できると思います。
ただし、点群を変換する pcl メソッドを見ると、次のことがわかりました。
しかし、上記の 3x3 回転ではなく、なぜ 4x4 マトリックスなのでしょうか?
c++ - PCL XYZクラウドをXYに変換します(3Dから2D)
設定
タイプのPCLポイントクラウドがありPointXYZ
ます。タイプのグリッドマップに変換する必要があります。少なくとも1つのポイントがある場合はtrueである必要がありますvector<vector<bool> >
。map[x][y]
マップは、点群の特定の領域を表す必要があります(たとえば、x = [-10,10]、y=[-15,15]の点群の寸法をカバーする20x30セル。
私が今持っているもの
現在、私には2つのアプローチがあります。
- すべてのポイントをスキャンし、マップ内の対応するセルをtrueに設定します。
- ポイントを平面に投影し、Kdツリーを作成してから、マップ内のセルごとにツリーに最も近いポイントを照会し、セルに該当する場合はセルをtrueに設定します。
ここで、最初のアプローチは小さな点群に適しています。O(n)で、nは点群内の点の数です。
2番目のアプローチは大きな雲に適していると思います。最終的なクエリはO(m)のみです。ここで、mはマップのサイズです。ただし、Kdツリーの構築と平面へのクラウドの投影は、どちらも約O(n)である必要があります。
2番目のアプローチは常に悪いと思いますが、テストを実行して確認します。
質問
より良いアプローチはありますか?たぶん、OctreeまたはVoxel-Grid(2D)で何か?アプローチ1の問題は、関心領域外のポイントを不必要に見ていることです。
私がこの問題を最初に抱えることはできないようですよね?
opengl - CUDAとOpenGLを使用したアニメーションポイント半径
OpenGLとCUDAを使用してポイントクラウドを実装しようとしています。ポイントの半径は、関連するデータに基づいて、時間の経過とともにサイズが変化します。
私はOpenGLとCUDAにまったく慣れていないので、この目標を達成するのにかなり苦労しています。OpenGL、GLSL、およびCUDAの基本を学んだ後、プログラムのどの部分をどのように達成する必要があるかについて完全に混乱しています。
私の考えは次のとおりでした:
- 頂点位置でVBOを使用する
- 頂点半径のあるVBOを使用する
- 頂点が不確実なVBOを使用します。このデータに基づいて、頂点の半径はアニメーションで変化します。
- フレームごとにCUDAカーネルのすべての頂点の半径を計算します
- glDrawArraysを呼び出してすべてのポイントをレンダリングし、頂点シェーダーを使用します。これにより、配列からすべてのデータが入力として取得されます。
まず第一に...この目的のためにCUDAシェーダーとGLSLシェーダーを一緒に使用することは合理的ですか?どちらか一方を使用することについていくつか読んだので、それについてはよくわかりません。
2番目の質問は、プログラムのどの部分がCPUで実行され、どの部分がGPUで実行されるかということです。カーネルでデータを計算し、それをOpenGL表示関数に戻してレンダリングするのは理にかなっていますか?