前回、ARCoreのPoint CloudをAndroidスマートフォンに保存する方法を紹介しました。
【Unity】任意のパスにARCore Point Cloudの値をcsvで書き出す - CrossRoad
今回は、Point Cloudに一致する色情報を出力する方法をまとめました。なお、以下の環境で動作を確認しています。
- Unity2017.4.4f1
- ARCore SDK 1.2.0
- Android 8.1.0
1. Point Cloudとは?
整理も兼ねて、ここから説明したいと思います。WikiPediaの説明がわかりやすいです。
点群(てんぐん)やポイントクラウド(英: point cloud)とはコンピュータで扱う点の集合のこと。多くの場合、空間は3次元であり、直交座標 (x, y, z) で表現されることが多い。
個人的には、Point Cloudはレーザによる3次元測定、モデリングと一緒に出てくることが多い印象です。
レーザによる3次元測定、モデリングの場合、対象物に射出したレーザの反射一つ一つがそのまま点の集合となります。これをPoint Cloudと呼びます。
1つ1つの点に色をつけたり、点を繋いでメッシュにすることで、Unityでも使えるような3Dモデルデータに加工することが可能です。
一方、ARCoreを使う場合、特徴点の集合をPoint Cloudとしています。特徴点の説明もWikipediaを引用します。
コーナーとは2つのエッジの交点と定義することができる。コーナーは、ある局所近傍で方向の異なる2つの際立ったエッジが存在するような点と定義することもできる。特徴点とは、際立って検出できる画像上の点のことをいう。これは、特徴点がコーナーになれるということだけでなく、例えば、強度が極大・極小の点、曲線の終点、あるいは曲率が極大である曲線上の点、といった孤立点でもあることを意味する。
特徴点とは、具体的には、この画像の水色で示されるような点のことです。
この画像からわかるように、点として検出するのは、あくまで対象物の特徴的な箇所のみです。
2. Point Cloudに色をつける方法
途中まで調べて作っていたのですが、Unityのブログに方法が書いてあったのでこちらを参照しました。
2-1. ARCoreのSDKをUnityにインポート
ここは説明を省略します。ARCoreのSDKは下記のページよりダウンロードできます。
Quickstart for Android | ARCore | Google Developers
2-2. Hello ARシーンをコピー
Assets/GoogleARCore/Examples/HelloAR/Scenes/HelloAR.sceneを開き、Save Scene asで別の名前で保存します。
以後はここで保存した別の名前のシーンを使います。
2-3. 空のGameObjectにFeature Point Colors_save.csをアタッチする
gistc88b8d0bd7cc337433e94e8de1b86243
(長いのでブログでの表示はしていません。リンクをクリックしてご確認ください)
これは参照したブログ記載のソースコードをベースにしています。ただし、そのままでは動かなかったので少し修正し、point cloud を色付きで保存する処理を追加しました。
2-4. Instant Previewまたは実機デプロイして動作を確認する
先ほど追加したFeature Point Colors.csによって、以下のように特徴点に色がついた状態になります。
また、スマートフォンには、このように特徴点のx,y,z座標に加えて、R,G,B,Aの情報が1秒おきに保存されます。
3. 保存してUnityで確認する方法
先ほど保存したcsvファイルを使います。csvファイルをUnityプロジェクトのResourcesフォルダに入れて、新しく以下のスクリプトを作ります。
gista75e00b9bc38fa22a3ce33b49b62d963
なお、CSV形式での保存方法については、こちらを参考にさせていただきました。ありがとうございます。
【Unity】CSVファイルのデータを取り込む – TJ日記
このスクリプトを適当な空GameObjectにアタッチしてシーン実行すると、このように特徴点1つずつをマテリアル付きのcubeで表現します。
Unity側の右下半分のCubeの並びが、画像とだいたい合っていることが確認できます。
4. (2020/9/12 追加) Unityプロジェクト
この記事だと動く形が作れない可能性があったので、過去のUnityプロジェクトを調整してGitHubにあげました。
以下の環境で動作することを確認しています。
- Unity2017.4.4f1 on MacOSX 10.15.6
- ARCore SDK 1.2.0
- Android 10.0
5. 終わりに
画像処理関係はあまり詳しくないので、Point Cloudも含めて色々勉強になりました。今回の方法は何かしらの演出などに使えるかもしれないですね。