2016-09-27 2 views
5

私はLidarセンサー(Pepperl-Fuchs R2000)からデータ(距離と振幅)を取得するオブジェクトトラッキングプロジェクトに取り組んでいます。 OpenGLとC++の使用私はLinuxマシンにデータを表示しています。
enter image description here ここで、ポイントを距離に基づいてクラスターにグループ化したいと思います。 C++ですべてのクラスタを別々のコンテナに入れる方法がわかりません。 OpenCVの入力データとしてオブジェクト追跡のためにOpenGLの出力データを使用する可能性はありますか?OpenGLを使用したC++でのデータクラスタリング

+0

あなたは質問に画像を追加することができます。 – ChronoTrigger

答えて

5

OpenGLデータをOpenCV構造に変換する必要があります。 OpenCVには、データを共有するためのいくつかの組み込み関数があります(look here)。また、OpenGLポイントをOpenCV Mat、またはOpenCV cv::Point3fのベクターにコピーすることもできます。 OpenGLの行列をOpenCVに変換する必要がある場合は、OpenGLが行優先順序で行列を格納するのに対し、OpenCVは行優先順序を格納することを考慮してください。

次に、OpenCVはいくつかの(制限付き)clustering solutionsを提供します。 アプリケーションに応じて、k-meansが機能するかもしれませんが、QuickShiftやDBSCANなどの他のクラスタリング手法も検討することをお勧めします。

1

OpenCVのすべてのデータは、Map(または使用している[Point_]または[KeyPoint])の機能を使用して簡単にマップできます。2
密度に基づいて動作するので、私はDBSCANを使用することをお勧めします。K-Meansのように(ここではあらかじめ定義されたクラスタ数を考えることはできないと思うので)クラスタの数は必要ありません。

注:あなたは簡単にインターネット上でDBSCANのC++コードを見つけることができます。

関連する問題