CC_17 CloudCompareのメッシュ作成その2(Poisson)
NEW
2026.08.26
- 3Dデータ
- ライブラリ
- CloudCompare
CloudCompareでメッシュ作成の第2回は、Poisson Surface Reconstructionを使用する例をご紹介します。Poisson(ポアゾン)は前回のドロネー同様、三角メッシュを生成するための手法のひとつです。形状に沿った滑らかなメッシュが生成でき、パラメータを変えることでメッシュの粗密などを調整できます 。

今回のサンプルデータ(CC_016.ply)は、このページ下部のリンクからダウンロードできます。CloudCompareを起動後、まずCC_016.ply を3Dビュー上にドラッグアンドドロップしてください。
■法線の計算(Compute Noamals)
Poissonでメッシュを生成するにはまず、点群に法線(方向を示すベクトル)を設定する必要があります。DBツリー上でCC_016.plyを選択し、メニューバーのEdit→Normals→Computeをクリックすると「Compute normals」画面が表示されます。

Compute normals
Compute normalsでは、それぞれ座標値を持っている点群の各点に対して、仮設の面をあてはめてメッシュ化に必要な法線を計算します。仮説面の形状(Local surface model)、仮設面の大きさを決めるための近傍点(Neighbors)等の設定項目があります。(法線については回を改めてご紹介する予定です。)
デフォルトでは、Local surface modelにPlaneが設定され、Neighborsの探索範囲等に数値が表示されています。ひとまずこのままOKします。法線計算のダイアログが表示され、計算終了後に画面が閉じます。カラーありの状態では法線が見えにくいので、DBツリー上で点群を選択し、PropertiesのColorsを「None」に設定します。

法線が付与された点群
まだ点群の状態ですが、法線(Normals)が付与されたことで陰影が生まれ、凹凸形状が可視化されました。ここでPointPickingで適当な1点を選択してみると、法線情報(Nx,Ny,Nz)が追加されていることを確認できます(上図)。Poisson はこの法線情報に従ってメッシュを生成します。
■Poiisonメッシュ生成処理(Poisson Surface Reconstruction)
DBツリー上でCC_016-Cloudを選択し、メニューバーのPlugins→PoissonReconまたはツールバーのPoisson Surface Reconstructionアイコンをクリックします。


Poisson Surface Reconstruction 設定画面
Octree depth…メッシュ計算時の空間サイズ
interpolate cloud colors…点群の色を引き継ぐ
output density as SF…点群の密度の情報をスカラーフィールド(SF)に出力する
Octree(オクトツリー) depth は、点群を含む空間を分割してメッシュ生成計算を行う際の空間サイズを定めるもので、値が大きいほど密なメッシュが生成されますが、計算処理に時間を要します※1。(オクトツリー構造については、第9回 CloudCompareのLabel Connected Components機能でご紹介していますのでそちらもご参照ください。)interpolate cloud colors にチェックを入れると、メッシュに点群の色が引き継がれます。output density as SFは、点群の密度をスカラー値として出力するもので、点の密度に応じたメッシュの抽出に利用できます。各設定値を上図の通り設定し、OKしてください。Compute Normals画面が閉じ、プログレスバー付きメッセージが表示されます。計算終了後、メッシュMesh[CC_016-Cloud](level8)がDBツリーに追加されます。DBツリー上でCC_016-Cloudのチェックを外し、メッシュのみを表示させてください。

Octree depth:8で生成したメッシュ
■密度に応じたメッシュの抽出
法線情報に基づいて滑らかに生成されたメッシュは、元点群を超過した大きさになっています。メッシュは点の密度に応じたスカラー値を持っており、これを利用して一定以上の密度をもつ部分の抽出ができます。メッシュを選択し、Propertiesをスクロールして最下段近辺にあるDisplay rangesを表示させてください。

Display ranges 左端の円をスライドして表示調整
Display ranges には、現在の密度情報値がヒストグラムで表示されています。図の左右端にある円を内側へスライドすることで、範囲外のメッシュを非表示にできます。左端にある円を内側へスライドしていくにつれ、メッシュの青~緑~黄色部分(密度の低い部分)が非表示になっていきます。上図のように赤色部分だけが残るようにスライドしてください。メニューバーのEdit→Scalar fields→Filter By Valueをクリックし、 表示されたダイアログでExportを選択すると、高密度部分のみを抽出した新しいメッシュ(Mesh[CC_016-Cloud](level8).part)がDBツリーに追加されます。

高密度部分を抽出したメッシュ
スカラー情報が更新され、Display rangesには現在の密度のヒストグラムが、メッシュは現在の密度に応じたグラデーションで描画されています。
■保存と読み込み
上記の抽出メッシュを選択した状態で、保存時にSTL形式を選び「PoissonMesh」等の名前をつけて保存してください。PoissonMesh.stlを3Dビュー上にドラッグアンドドロップすると、メッシュが表示されます。点を三角形状に結ぶ際、各点の持つ法線の向きに沿うようにしてメッシュ化したことで、表面の凹凸が滑らかに繋がっているのが見て取れます。

PoissonMesh.stl 右はメッシュ一部を拡大して線描画したもの
■メッシュ3種比較
比較のために、前回作成した2種のメッシュ(Edit→Mesh、ラスタライズ)とPoissonメッシュを並べたものが下図となります。ベースとなった点群は同じですが、生成手法によって出来上がるメッシュは異なります。作成時のパラメータによっても形状は変化しますので、目的に合わせた生成方法、パラメータを選ぶことが重要になります。

editMesh(左)/rasterMesh(中央)/PoissonMesh(右)
※1 Octree depthと生成メッシュ
Poisson Mesh Reconstruction設定画面のOctree depthの値に比例して、生成されるメッシュは細かくなり生成時の処理時間も増加します。下記図①は、Octree depthの値を変えて生成したメッシュの例です(左からOctree depth9、7、5)。Octree は3D空間を8等分に分割する仕組みで、depthが1あがるたびに等分された空間をさらに8等分していきます。ひとつひとつの三角メッシュはこの空間のサイズにあわせて生成されます。図②は各メッシュの中央をズームし、ワイヤーフレームで描画したものです。Depthが大きいほど三角メッシュが細かく密に、小さいほど大きく粗くなっていることが見て取れます。

①Octree depthを変更して生成したメッシュ(左から9、7、5)

②中央部のメッシュを拡大・線描画(左から9、7、5)
■サンプルデータのダウンロード
・CC_016…路面撮影データ・軸補正済み(CC_016.ply)をzip形式で圧縮したもの ファイルサイズ約1.6MB