CC_09 CloudCompareのLabel Connected Components機能
2025.02.12
- 3Dデータ
- ライブラリ
- CloudCompare
Label Connected Components(接続コンポーネントの抽出、ラベルづけ)機能は、点群を、距離を基準にしたブロックに分割し、別個の点群として生成する機能です。
周囲が映りこんだデータから対象のみを取り出したい場合など、点群の状態によってはセグメンテーションで切り取るよりも簡便に処理できます。基準値を設定し、基準に満たない点数のブロックを除外することができるので、ノイズ除去などにも応用できます。
Label Connected Componentsテスト用のデータを用意しました(CC_009.ply)。このページ下部のリンクからダウンロードできます。CloudCompareを起動後、CC_009.ply を3Dビュー上にドラッグアンドドロップしてください。
■Label Connected Componentsの使い方
DBツリーでCC_009.ply データを選択し、メインツールバーの「Label connected components」をクリック→設定ウィンドウが表示されます。
Label connected componentsボタンと設定ウィンドウ
設定項目は下記の3つです。
Octree Level:Octreeを使用した3D空間の分割レベル(1~21 デフォルト値8)。
Connected Componentsでは、3D空間を等分割し、隣り合う空間同士で点群が連続しているかいないかを判定します。空間のサイズが大きいほど、連続しているとみなされる点群が多くなります。Octreeは空間分割に使われるアルゴリズムで、最小のLevel:1が8分割です。(Octreeについては後述します)
Min. points per component:最小ポイント数 ブロック候補に存在する点の数がこの数を下回った場合は、新しい点群として生成しません。
random colors:ランダムカラー ブロックごとに異なる色を割り当てます(本来の色情報は失われます)。
今回まずはテストのためにOctree:Levelを3に設定(grid step = 332.625と表示されますが、これが空間のサイズです)、Min. points per componentはデフォルトの10のまま、random colorsにはチェックを入れずにOKをクリックします。
OctreeLevel:3でOK後、点群が分割された状態
DBツリーに「CC_009-Clod[CCs]」というフォルダと、CC#0、CC#1という2つのデータが追加されます。3Dビュー上でドラッグし角度を変えると、もとの点群が前景(石膏像)と背景の2つのブロックに分割され、別個の点群として生成されていることがわかります。これらの点群は、座標値、色情報などを元の点群から引き継いでいます。
■Octreeレベルと点群の分割
Label Connected Componentsで点群をブロック化する際の基準になる空間分割法・Octree(オクトツリー)ですが、感覚的にわかりやすくするために可視化してみます。
DBツリーの「CC_009-Clod[CCs]」のチェックを外して非表示にし、元の点群CC_009-Cloudをチェックして表示します。さらにCC_009-Cloudの先頭についている三角マークをクリックすると、下部に「Octree」が表示されます(このOctreeは、さきほどLabel Connected Components機能を使用した際に自動的に作られて元点群に追加されたものです)。Octreeにチェックを入れると、3Dビュー上にOctree構造が表示されます。
可視化されたOctree構造(Level:1=空間を8等分)
3Dデータを含む空間が8等分に分割され、各空間が緑色のキューブで囲われて表現されています。Level:1はOctreeの最小レベルで、XYZ各軸を2等分の3軸分なので、2×2×2=8等分になります。Level:2以降は、分割された空間それぞれをさらに8等分していきます(Level:2=8×8、Level:3=8×8×8 …)。Levelが上がるほど分割数は大きく、1個あたりの空間サイズは小さくなります。分割の過程で点を含む空間のみが残り、より点群の形状に近しくなっていくイメージです。
DBツリーでOctreeを選択時、Propertiesには詳細情報が表示されます。下段近くのOctree項のDisplay levelに表示されている「1」を、右端のボタンで増加させ「3」にしてみてください。ビュー上のキューブが細かくなると同時に点群データの存在しない区画はキューブが描画されなくなります。
Octree Level:3
上図はOctreeLevel:3に設定し、ドラッグで表示角度を変えて上方から見た状態です。キューブが連続していると点群が連続しているとみなされ、ブロック化の対象になりますが、石膏像を含む前景と背景は非連続になっているのが見て取れます。さきほどLabel Connected Components機能を適用した際、石膏像と背景が別々のブロックとして生成されたのはこのためです。Propertiesの下段にはキューブの一辺の大きさ=空間のサイズが、Cell sizeとして表示されています。
■応用:不要部分の除去
Label Connected Componentsで、最小点数を設定し、分離している小さめの点群を除外してのブロック化をテストします。CC_009-Cloudを選択し、メインツールバーの「Label Connected Components」をクリック→設定ウィンドウが表示されます。Octree Level を6、Min. points per componentに1000を設定して「OK」をクリックします。
Label Connected Components機能適用前後
上図左は元点群、右は機能適用後の点群です。左上の小さめの点群、中央上部の離散点群が除外され、3つのブロックが生成されています。適切なOctree Level 、点数を設定することで、離散ノイズの多い点群のクリーニングにも活用できます。
■Octreeの計算
事前にOctree構造を可視化してLevelと点群の分布状況を把握しておけば、Label Connected Componentsで点群を効率的にブロック化できます。対象としたい点群を選択し、メニューバーでEdit→Octree→Computeを選択、Compute OctreeではdefaultのままOKすると、点群にOctree構造が追加されます。
点群を選択してOctreeの計算
Octree構造・Level:6の例
上図は、可視化したOctreeのLevel:6の状態です。さきほどの応用例では、Label Connected Components機能の設定をLevel:6、最小点数1000としたので、矢印部分のキューブのまとまりは、含まれている点の数が最小点数未満であったために、ブロック化の対象から除外されました。
備考)
●Octree構造は、CloudCompareの多くの機能で、処理高速化のために用いられています。
●Octree構造の基本となる立方体(分割前)は、固定サイズが決められているわけではなく、対象点群のXYZ軸のうちの最大サイズに合わせて形成されます。
●Label Connected Components機能適用時、OctreeのLevelが高くなるほど、計算処理時間も増加しますのでご留意ください。
■関連動画
CloudCompareのLabel Connected Components機能
サンプルデータのダウンロード
・CC_009…テーブルに置いた石膏像の撮影データ(CC_009 .ply )をzip形式で圧縮したもの ファイルサイズ約500KB