1. 点群データ(Point Cloud Data)とは [概要]
点群データ (Point Cloud Data)とは,3D点座標の群(Cloud)を,集合化したデータ形式である.ステレオカメラややLIDARセンサーなどから計測した3D点群を保存・処理するためのデータ表現形式の1種である.2D空間的な画像データの「3Dデータ向けの集合データ表現」と考えるとわかりやすい.
この記事では,点群のデータ形式の分類を,Point Cloud Library (PCL)の点群データ構造(各pcl::PointXYZ〜構造体)をベースに,整理して紹介する(2節).また, 各種の点群計測センサーで撮影したデータは2.5D点群(3.1節)であるが,それらを後処理で巨大点群(3.2節)に合成できる点についても,整理したい(3節).
1.1 記事の構成
- 1 概要
- 1.2 点群データの分類
- 2. 点群データの形式
- 2.1 生点群 (raw point cloud)
- 2.2 組織化点群 (Organized Point Cloud)
- 3. 点群の合成前と合成後
- 3.1 個別の計測結果:小範囲の 2.5D 点群
- 3.2 複数点群の合成後:巨大で表面も敷き詰められた3D点群
- 4. まとめ
1.2 点群データの分類
点群データでは,計測時の,元の2Dカメラ画像座標と対応付けをおこなう「組織化(Organization)」が有るか無いかで,データ形式が変わる:
- (生)点群 (2.1節)
- 組織化点群 (2.2節)
※ この記事での分類は、あくまでPCLにおける点群データの分類に沿った,説明であることには注意
また,前処理としてで法線推定した「法線ベクトル (normal vector)と曲率 (curvature)」が,各3D点に添付されいているか否かでも,点群のデータ形式が変わる:
- 法線・曲率なし点群
- 法線・曲率つき点群
2. 点群データ の形式
2.1 生点群 (raw point cloud)
生点群(raw point cloud)とは,各点の座標(x, y, z) がN個格納された,集合データである.
PCLでは「PointXYZ」にこの生点群データを格納する.
生の点群の場合は,画像表現や,組織化された点群(2.2節)のような,各点を整列して格納しておくグリッドが存在しない.点群処理を行うには,まず処理を行うための整理グリッドが欲しいことから,点群をKd-TreeやOctTreeに格納し,近似最近傍探索をおこえるように前準備することが普通である
2.2 組織化点群 (Organized Point Cloud)
組織化点群 (Organized Point Cloud)は,点群の各点に視差で透視投影される前の,カメラ画像平面上での画像配列が紐付けされている点群データである.ステレオカメラでステレオマッチングされた距離画像を3D投影したデータは,組織化点群に格納できる.また,Kinectなどのプロジェクトカメラ式デプスセンサーや,ToF形式のデプスセンサーなども,3D投影前の元の2D画像データがあるので,組織化点群になる.
ステレオセンサーにデプスセンサーやToFカメラから取得した組織化点群の場合は,RGBカメラがステレオキャリブレーション済みのことが多いゆえ,同期撮影したRGBカメラ側の画像から,各3D点のRGB値も一緒に計測できているからである.
2.2.1 利点:元の2D画像グリッドを活用した処理が可能
PCLでは,グレー画像の輝度値を添付した 「PointXYZI」と,RGB画像の色を各点に添付した「PointXYZRGB」で,輝度値 or 色情報も添付された点群データを使用する.(PCLの場合だと)対応する各センサーから,画像配列上のインデックス(i,j)が各3D点に付与された,2次元配列済みの状態で,組織化点群データを取得できる.
これにより,元の2次元画像のXY座標系も駆使した処理が可能なのがメリットである.3次元空間上での処理ではなく,2次元画像側でも走査ができるので,空間畳み込みを用いたフィルタリングや法線推定,セグメンテーションが可能になり,計算効率や処理の安定性も増す.
一方,2.1節の生点群の場合は,こうした2Dグリッド情報が付加できない.よって,KD-treeやOctreeによる3次元空間処理に頼るしかないので,組織化点群より不利ではある.
2.3 法線・曲率つき 点群データ
法線・曲率つき点群は,生点群の各点に,法線方向ベクトルおよび曲率も添付した,点群データ構造である.
PCLでは「PointXYZRGBNormal」で,法線・曲率つきのRGB点群を格納する.
各種3D点群処理では法線データを使用することが多いため,まず前処理として生点群から「法線推定」処理を適用して,法線ベクトル群を推定しておくことが多い.その推定された法線を一緒に格納したものが法線+曲率つきの点群データである
3. 点群データ の合成前と合成後
ここでは,その合成前の一回の計測における省範囲の点群の2.5Dデータ性(3.1)と、それに対して、各データを位置合わせして1つの巨大でな点群に重ね合わせた(ほぼ)3D点群の違いを,簡単にまとめておき,2者のデータ状態の違いを読者が意識できるようになるようにしたい.
3.1 個別の計測結果:小範囲の 2.5D 点群
各種の距離センサーで捉えた点群は,小範囲だけを捉えた点群である.これは,カメラからみると,対象を撮影できている正面側しか,撮影できていない,2.5次元 (2.5D)データである
1回の撮影した2.5Dデータだと,部分遮蔽したところは点群が測定できていない.また,センサーの視野角の範囲外のデータは写らない or 距離測定できないので,そもそも3D化できていない.
つまりは,もし撮影対象が「大きな物体」や,「巨大な広範囲シーン」だと,1回の撮影で得られた点群だけでは,対象物体やシーン全体を3D化することは不可能なわけである.
3.2 複数点群データの合成後:巨大で表面も敷き詰められた3D点群
しかし,点群処理では,それらを後処理でしっかり位置合わせしたり,乗り物上に積んだデプスセンサーやLIDARから,計算速度次第では「SLAM」も行うことができる.
これにより,1物体の周辺360度の点群を1つに合成することで,「表面全体を閉じた点群」を合成することが可能である.また,自動運転車や航空測距飛行機などの移動体上に設置した点群センサーでの撮影データ群だと,(IMUやジャイロの)位置情報も加えることができる.よって,街中の建物や道路の様子や,空からヘリ・飛行機やドローンで撮影した非常に広範囲のシーンの点群を,「1つの巨大なシーン点群」に位置合わせしてまとめることが可能である.
4. まとめ
この記事では,まず2節で,点群データの種類の分類を「PCLでの点群データ形式」に沿う形で整理した.
また3節では,センサーから取得した生データが2.5Dデータであることと,位置合わせなどを行うことにより「広範囲でより閉じた状態の点群」にも加工できることを整理した.
関連書籍
- 詳解 3次元点群処理 Pythonによる基礎アルゴリズムの実装, 金崎 朝子, 秋月 秀一, 千葉 直也 (2022)
- 1.4 3次元センサの紹介
- 2.1 ファイル入出力 (Open3Dの点群データの中身について)