質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.82%

tsukuba画像から3角メッシュを作成したいです。

受付中

回答 0

投稿

  • 評価
  • クリップ 0
  • VIEW 906

mypace

score 45

tsukuba画像から、デプス画像を作成し、PCL(PointCloudLibrary)にて点群データ(下画像)を表示しました。
イメージ説明
点群データから3角メッシュを作成し、stlファイル作成を行いたいのですが、
以下コードのgp3.reconstruct(triangles); にて処理がずっと続く状態になり、
以降の処理が実行されません。
GreedyProjectionTriangulationの設定変更でtrianglesが作成できるようになるでしょうか?
また、加えたほうがいい処理や、triangles作成方法などがございましたらご教授いただきたく思います。

//3角メッシュ作成
void ImageProc::MashMake(pcl::PointCloud<pcl::PointXYZ> &cloud) {

    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_ptr(new pcl::PointCloud<pcl::PointXYZ>(cloud));
    //--- 3角メッシュ作成 ---//
    pcl::NormalEstimation<pcl::PointXYZ, pcl::Normal> n;        //各点でのローカルサーフェスの法線と曲率推定
    //pcl::NormalEstimationOMP<pcl::PointXYZ, pcl::Normal> n;        //各点でのローカルサーフェスの法線と曲率推定
    pcl::PointCloud<pcl::Normal>::Ptr normals(new pcl::PointCloud<pcl::Normal>);        //法線情報格納変数
    pcl::search::KdTree<pcl::PointXYZ>::Ptr tree(new pcl::search::KdTree<pcl::PointXYZ>);        //探索木変数
    tree->setInputCloud(cloud_ptr);
    n.setInputCloud(cloud_ptr);        //法線計算を行う点群指定
    //n.setRadiusSearch(10.00);
    n.setSearchMethod(tree);        //検索方法指定
    n.setKSearch(20);        //
    n.compute(*normals);        //法線情報の出力計算

        //--- stl facet 設定値抽出 ---//
    float x_normal = normals->points[0].normal[0];    //法線面ベクトル x値
    float y_normal = normals->points[0].normal[1];    //法線面ベクトル y値
    float z_normal = normals->points[0].normal[2];    //法線面ベクトル z値
    //--- stl 座標抽出 ---//
    //float point_capa = cloud.points.capacity.size;
    //  << 法線面計算に使用する3点の頂点座標を取得したい。>>  //

    float x_point = cloud.points[0].x;
    float y_point = cloud.points[0].y;
    float z_point = cloud.points[0].z;
    //--- stl 法線作成時の座標を取得 ---//


    //Make Normaltype PointCloud.
    pcl::PointCloud<pcl::PointNormal>::Ptr cloud_with_normals(new pcl::PointCloud<pcl::PointNormal>);
    pcl::concatenateFields(*cloud_ptr, *normals, *cloud_with_normals);        //2つのデータセットを結合
    //Create search tree & Iniializing Object.
    pcl::search::KdTree<pcl::PointNormal>::Ptr tree2(new pcl::search::KdTree<pcl::PointNormal>);
    tree2->setInputCloud(cloud_with_normals);
    pcl::GreedyProjectionTriangulation<pcl::PointNormal> gp3;        //initialize    三角形屁の分割
    pcl::PolygonMesh triangles;
    //Setting parameter.  // Set the maximum distance between connected points (maximum edge length)
    gp3.setSearchRadius(1.000);
    // Set typical values for the parameters
    gp3.setMu(500.0);        //異なる点密度適応のための探索半径を求める
    gp3.setMaximumNearestNeighbors(10);    //        
    gp3.setMaximumSurfaceAngle(M_PI / 4); // 45 degrees
    gp3.setMinimumAngle(M_PI / 18); // 10 degrees
    gp3.setMaximumAngle(2 * M_PI / 3); // 120 degrees
    gp3.setNormalConsistency(false);
    //Measure Triangle. Get result
    gp3.setInputCloud(cloud_with_normals);
    gp3.setSearchMethod(tree2);
    gp3.reconstruct(triangles);
    // Additional vertex information
    std::vector<int> parts = gp3.getPartIDs();
    std::vector<int> states = gp3.getPointStates();
    //メッシュを表示する
    pcl::io::saveVTKFile("MeshTest.vtk", triangles);

    //--- PLDファイル作成 ---//
    pcl::io::savePCDFileASCII("PDC.pcd", cloud);
    pcl::io::savePolygonFileSTL("MeshTest.stl", triangles, false);

}
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.82%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る