空間3Dスキャンの課題と解決アプローチ

Pocket

目的
近年、3Dスキャナーが普及し、安価なスキャナーも現れて3Dデータスキャンが容易にできるようになってきた。 3Dスキャナーでスキャンしたデータは、点群データ(PointCloud)として取得できる。その際、小さな物体をスキャンするレベルのデータ量は 少ないが、空間(オフィスフロアなど)をスキャンした際のデータ量は膨大な量となる。データ量が膨大となると、スキャン処理や スキャン後のデータ参照時に支障がある。
今回、あまりデータ精度を求めない点と、より低スペックのH/Wでも動作することを目的とし、以下の観点でプロトタイプを作成し、検証を行った。
データ量の軽量化
スキャン処理スピードの追求
研究内容
システム構成
H/W
PC
CPU:Intel Core i3-7100U 2.40GHz
メモリ:8.00GB
3Dスキャナー
Intel RealSense D435i
S/W
OS:Windows10
言語:Python 3.7.6
点群ライブラリ:Open3D 0.8.0
機能概要
3Dスキャナーからデータ取得
3Dスキャナーから1フレームスキャンして取得し、点群データとして内部保持する
<カメラ画像>
Image01.png
<点群データ表示>
Image02.png
仮想グリッドの生成と各グリッドに含まれる点群の抽出
仮想のグリッド(1m×1m×1mの立方体を1辺20分割)を生成し、スキャンした点群データの各点が、どのグリッドに含まれるかを判定し、カウントする
<仮想グリッド(重心点)とスキャンした点群データの合成表示>
Image03.png
有効グリッドの判定
グリッドに含まれる点群の数など、有効とする閾値等を決め、各グリッドが有効かどうかを判定する
<有効となったグリッド(重心)の表示>
Image04.png
次フレーム(スキャナから取得した次のデータ)との位置合わせ
3Dスキャナーより、次フレームの点群データを取得し、前フレームとの位置合わせを行う
現在、点群データの位置合わせアルゴリズムは以下の方式で行っている
RANSAC(Random Sample Consensus)
RANSACは、最近傍点の組からランダムに点の組をサンプルし、最小二乗法に当てはめることを繰り返す
RANSACは、外れ値が含まれないように運動推定に使う対応点をサンプルすることができる
ICP(Iterative Closest Point Algorithm)
マーカレスな位置合わせの代表的な手法の1つで、ICPアルゴリズムでは、2つの点群間の最近傍点を対応点として求め、その対応関係を用いて運動を推定する処理を繰り返して行い、推定した運動をより正しい値に近づける
<前フレームの点群と次フレームの点群の位置合わせ結果の表示(黄色が前フレーム、青が次フレーム)>
Image05.png
有効グリッドからワイヤーフレーム生成
前フレームのデータと次フレームのデータをマージし、有効グリッド(重心)の情報を基に、ワイヤーフレームデータを作成する
<マージした有効グリッドを基にワイヤーフレーム表示>
Image06.png
課題に対する対策
データ量の軽量化
スキャンしたデータ形状をキューブ状で表し(Minecraft風)、座標値としてはキューブの重心座標のみ保持することで、大幅なデータ軽量化が図れる
スキャンスピードの追求
上記データ軽量化ともつながるが、データ量が少なくなることにより処理スピードが向上する
位置合わせアルゴリズムにて、よりシンプルかつ精度の高い位置合わせを行うロジックを適用する
結果
プロトタイプを作成し(継続中)、一連の流れの機能は実装することができた。しかしながら、課題も見えてきており、特に処理速度に関しては満足するパフォーマンスは得られていない。
下記観点についての結果は以下のとおり
データ量の軽量化
データ量を減らすという目的は、キューブ型で形状を表現するアプローチにより大幅にデータ量が減ることとなるため達成できている
スキャンスピードの追求
処理速度については、位置合わせアルゴリズムのロジックをシンプルにすることにより、ある程度処理コストを下げることができたが、十分な性能は出せていない
考察
プロトタイプ作成にて見えてきた課題を以下に挙げる。
処理速度の向上
以下の2点が処理速度向上のポイントとなるため、今後の課題として検討を行う
①位置合わせアルゴリズムの高速化
位置合わせアルゴリズムは、計算量が多いため、処理コストがかかる
対策
→点群データを減らすことにより、計算量が減り、処理コストが下がる
→より高速かつ精度の高い位置合わせアルゴリズムを適用する
②仮想グリッド(1m×1m×1mの立方体を1辺20分割)の各グリッドに含まれる点群の抽出およびカウント
現状の仮想グリッドでは8000個のグリッドがあるため、その8000個に対してスキャンした点群が含まれるかどうかを判定しているため、処理コストがかかる
対策
→仮想グリッド個数の削減
→ループ処理の改善による処理コスト削減
参考
http://www.mm.media.kyoto-u.ac.jp/old/research/thesis/2011/b/nakai/nakai.pdf

Pocket