kentaPtの日記

主に画像解析のことなどの勉強記録として投稿します。もし何かございましたら、github (https://github.com/KentaItakura)などからご連絡いただけると幸いです。

iPhone LiDARとDot3Dを利用して、3Dスキャンを行う

1. はじめに

iPhoneに搭載されたLiDARを利用して3次元測量をするためのアプリは多く存在します。この記事では、DotProduct社の提供するDot3Dの使い方について簡単にまとめたいと思います。Dot3Dは以下のAppストアのページからダウンロード可能です。

なお、本記事においては、iPhone 13Pro Maxを利用しています。

www.dotproduct3d.com

Dot3D - LiDAR 3D Scanning

Dot3D - LiDAR 3D Scanning

  • DotProduct LLC
  • 写真/ビデオ
  • 無料
apps.apple.com

また、別のiPhone LiDARのアプリである、Scaniverseや3dScannerAppの使い方については以下の記事で説明しています。
もし、他のアプリについても興味のある方は以下の記事をご覧ください。

https://note.locusblue.com/n/n1983f03944c8note.locusblue.com

https://note.locusblue.com/n/n705c705469e8note.locusblue.com

2. 使い方

2.1. New scanを選択する

赤枠で囲んだ、New scanを選択して、スキャンをはじめることができます。

2.2. 設定の確認

以下の図の、歯車のマークを選択してください。

Max. Depthにて、最大どの範囲までをスキャンするかを決めることができます。iPhone LiDARでは5mほど離れた対象までをスキャンすることができます。

また、Detect: AprilTagsを有効にすることで、AprilTagを自動的に検出することができます。

2.3. スキャンの開始

真ん中下の立方体のアイコンをクリックすることで、スキャンを開始することができます。赤はスキャンされていない箇所を示しています。また、スキャンが進むごとに、Mappint: activeの値が増えていきます。

また、最初のスキャン開始画面でkeep moving around slowlyというガイダンスが表示されます。
スキャンするときの注意点として、速く移動しすぎたり、端末の方向が急に変化するとうまく点群を生成することができません。
何度かトライしながら最適な速度や移動方法を練習することも重要です。

2.4. AprilTagの自動検出

Dot3Dの機能で、AprilTagの自動検出があります。あらかじめ、AprilTagの位置情報を取得しておくことで、後処理として、点群に正確な座標を与えることができます。AprilTagの位置情報に関しては、CSV形式であらかじめ用意しておきます。2.6にて説明します。

また、AprilTagはARの分野でも多く利用されます。以下の記事で、AprilTagを利用した簡単なデモについて仕組みを解説しています。

kentapt.hatenablog.com

speakerdeck.com

2.5. 結果の確認

スキャンを終了するときは、再び真ん中下のアイコンをタップします。これにより、以下のような3次元点群を生成することができます。

例えば、点に注釈をつける機能は以下のように利用することができます。
選択した点を長押しすると、拡大した図が表示されるので、そのマーカーの中心を選択したいときなどに便利です。長さを計測するときなども同様に点の位置を選択することができます。

2.6. ターゲットのインポート

2.4にてAprilTagが自動的に検出されると述べました。次は、それぞれのAprilTagの座標の情報をインポートします。これにより、点群の位置を補正することができます。

右側のタブからメニューを開き、Targetsを選択します。

Load Control Fileを選択します。

Open Control Fileを選択します。

ここでは、あらかじめ用意しておいたCSVファイルをインポートします。一番左の列にAprilTagのIDを入力し、その横にそれぞれXYZ座標を記載します。 以下に、今回使用したCSVファイルを示します。なお、ファイル名に日本語が含まれているとエラーになる場合があります。半角英数字にてファイルを保存することが望ましいです。
ここでは、インポートしたCSVファイルの座標値を真値として、AprilTagの中心の位置との差が最小になるように、3次元上での回転や平行移動のパラメータを決定し、3次元のヘルマート変換のようなことを行っていると思われます。

また、Dot3Dに座標の情報をインポートする際、XYの入れ替え操作が発生する場合があります。 例えば、座標を測量座標系で用意していて、Xを北南方向、Yを東西方向に対応させている場合、 XとYの列を入れ替えて、数学座標系の形にしておく必要があります。 入れ替えに関しては、単にXとYの列を交換するだけで構いません。

もとのCSVファイルのXとYの列を手動で交換する形でも構いません。または、この時にインポートするCSVファイルの列の順番を画面上で選ぶことができます。
以下の図は、XYZやYXZという順番をタップして入れ替えているときの様子です。

以下の図のように、XYZ Colの値と、ID Colの値を設定することができます。プラスとマイナスのボタン、そしてXYZ/YXZのスイッチは、Dot3Dがより多くの形式のコントロールファイルに対応できるようにするための機能です。従来のバージョンでは、コントロールファイルの形式は「ID, X, Y, Z」のみサポートしていましたが、異なる形式のコントロールファイルが利用されることも想定されます。例えば、「<何らかのデータ>, <何らかのデータ>, North, East, Z, <何らかのデータ>, ID」という形式です。

以前はこのようなファイルをDot3Dにインポートするために、手動でExcelテキストエディタを使って再フォーマットする必要がありました。しかし、プラス/マイナスのボタンとXYZ/YXZスイッチを使うことで、再フォーマットすることなく、あらゆる形式のコントロールファイルを読み込むことができるようになりました。

具体的には、以下のように設定します:

  1. CSVファイルが「X, Y, Z, ID」の形式の場合:

    • 「XYZ Col」を1に設定
    • 「ID Col」を4に設定
    • 「XYZ」モードを採用
  2. CSVファイルが上記の説明のように、「<何らかのデータ>, <何らかのデータ>, North, East, Z, <何らかのデータ>, ID」のような形式の場合:

    • 「XYZ Col」を3に設定
    • 「ID Col」を7に設定
    • 「YXZスイッチ」をオンにする(NEZ軸の順序がYXZに対応するため)

この設定により、再フォーマットなしで異なる形式のコントロールファイルを簡単に読み込むことができます。

CSVファイルの読み込みが完了すると、以下のような画面になります。赤枠のように、インポートしたファイル名が表示されます。また青枠のように単位が正しく(今回はメートル)なっていることを確認します。

インポートを行ったのち、fit control をタップしてください。 fit controlが完了すると、以下のようなポップアップが表示されます。

その後に、Optimizeを選択することで、点群の補正が完了します。 Optimizeの設定を選択すると以下のように表示されます。

Optimizeするために、少し時間がかかる場合があります。

以下のように、AprilTagの中心にIDが打たれており、うまくインポート・補正ができたことがわかります。

2.7. 点群のエキスポート

ここで取得した点群ファイルをエキスポートし、他のソフトウェアで閲覧したいと思います。右側のメニューから、Exportを選択して下さい。

拡張子を選択します。LAS、LAZだけでなく、多くのフォーマットが用意されています。私はSLACKのダイレクトメッセージで自分に送信し、PCでダウンロードできるようにしました。

例えば、PTSフォーマットに関しては以下の記事で紹介しています。

https://note.locusblue.com/n/n7ea59682bbcdnote.locusblue.com

最後にエキスポートするオプションを設定することができます。単位が私のアプリではmmになっていたので注意が必要です。例えば他のモデルや点群と重ね合わせたいときは、mで出力するほうが良いかもしれません。

また右のOptionsでは、間引きの割合を決めることができます。そのままエキスポートする場合は点群のファイルサイズが膨大で、うまくエキスポートが進まない場合もあるかもしれません。その場合は、ここの%の値を小さくするとファイルサイズが小さくなります。しかし必要とされる点群密度や精度が担保されるかは別途確認が必要です。ここでは、ランダムサンプリングを行っていると思われます。

3. ScanXへの読み込み

次に、Dot3Dで得た点群を別の点群処理ソフトウェアにインポートしてみたいと思います。ここでは、ScanXというオンライン型のソフトウェアを使いたいと思います。 ここでは、LAZ形式で保存した点群ファイルをScanXにアップロードしてみます。

scanx.jp

3.1. RGB表示

ベースマップ上での位置:

地図上でうまく合ってるように見えます。

近づいた場合:

公園で撮った時は明るくてあまりスマホの画面が見えなかったのですが、PC上で見るとよりキレイに見えると感じました。

3.2. 地表面抽出の結果

地表面が自動的に抽出され、茶色で示されています。

3.3. 座標点インポートの結果

さきほどのCSVファイルを読みこみ、可視化してみました。AprilTagで検出された位置で補正しており、うまく座標点とAprilTagの位置が一致していることがわかります。

4. QGISへの読み込み

簡単に、GISソフトであるQGISにも読み込んでみたいと思います。ドラッグアンドドロップでLASファイルやLAZファイルをインポートできます。

2023年8月現在では、AprilTagを検出したとしてもDot3D上で、EPSGコードを入力する画面がないため、LAS/LAZファイルのメタ情報にEPSGコードの情報は入っていませんでした。

そのため、QGIS上で、EPSGコードを入力する必要があります。今回はEPSGコード6677を指定しました。

メタ情報を確認してみます。

CRS: 手動で入力しました。

LASのバージョン: 1.3でした。Dot3D上では1.2となっていましたが、実際は1.3のようです。

縮尺: 0.01mmでした。うまくDot3Dで測量できていればLASでエキスポートしたときも精度は保たれていそうです。

色情報: 16bitで保存されていました。

5. まとめ

この記事では、LiDARを搭載したiPhoneにて、Dot3Dを利用し、対象をスキャンする方法について述べました。わかいやすい操作画面で、非常に使いやすかったです。また、AprilTagの自動検出が正確で、LiDAR点群の位置補正を簡単に行うことができました。