
点群のファイル形式であるPTS形式について
1. はじめに
こんにちは。ローカスブルー株式会社の提供する、スキャン・エックスやdeep3の開発を行っている板倉です。スキャン・エックスでは、las, laz, e57, txt, pts, ptx, xyzといった一般的によく使われるフォーマットを持つ点群をアップロードすることができます。
この記事では、3次元点群のファイル形式の1つである、pts形式について説明したいと思います。pts形式は、主にLeica製品によりエキスポートされます。
2. ptsファイルの中身について
2.1. 各列の情報について
すべての点群ファイルは対象の三次元情報を表すために、各点のxyz情報をもっています。pts形式では、そのxyz情報の他に、その点をレーザースキャナで取得した時の反射強度、およびその点のRGB情報を持たせることができます。
以下の図に、ptsファイルを「メモ帳」で開いた時の例を示します。一番初めに、そのファイルに含まれる点の数(1904198)があり、2行目からが、各点の情報を示します。1~3列目はxyz情報を示しています。4列目は強度情報を示しています。そして、5~7列目に、RGB情報が格納されています。ptsファイルは、ASCII形式であるため、「メモ帳」などで開くことができます。

ptsファイルの内容を以下の表にまとめます。

2.2. iPhone LiDARでptsファイルをエキスポートしたときの例
ptsファイルは、主に、Leica社製のレーザースキャナで取得した点を、ソフトウェアを用いてエキスポートしたときに利用されます。しかし、近年急速に広まっているiPhoneに搭載されたLiDAR(iPhone LiDAR)でもptsファイルとして点群をエキスポートすることも可能です。
iPhone LiDARのアプリの中で最も有名なものの1つに、3d Scanner Appが挙げられます。

以前の投稿では、このアプリで取得した点群を、スキャン・エックスにアップロードする方法を紹介しました。
エキスポートする際に、赤枠のLAS Geo-Referenced形式ではなく、青枠のPTS形式を選択してください。

エキスポートすると、ptsファイルをPC上で閲覧することができました。列の並びはさきほどと同様ですが、3d Scanner Appからエキスポートした場合は、強度情報は、すべて0になっています。

3. 公開されているpts形式の点群データの例
インターネット上にいくつか、pts形式の点群ファイルが無料公開されています。その例をこの章で述べます。
3.1. 旧都城市民会館
以下のリンクから、ダウンロードすることが可能です。
こちらのデータは、旧市民会館が解体されることを受けて、それらを3Dデータとして保存するプロジェクトの中で取得されました。
こちらのデータ(高密度でないもの)はオープンソースとして公開されています。このデータを利用して、SNSなどで発信する際は、「#3DDA #旧都城市民会館 」 で投稿するとよいそうです。
3.2. truevis様のページ
以下のページでは、より小規模な点群がpts形式でダウンロード可能です。
4. ptsファイルをスキャン・エックスにアップロードしてみよう
3.1で述べた、旧都城市民会館の点群ファイルをスキャン・エックスにアップロードしてみました。特別な設定は必要ありません。今回は、素早く閲覧・共有するため、「スキップ」を利用して、アップロードしました。以下のように、ptsファイルをスキャン・エックスにてきれいに表示することができました。閲覧のみならず、分類処理や、メッシュ化など、色々な機能が利用可能です。ぜひお試しください。

5. まとめ
この記事では、点群のファイル形式である、ptsフォーマットについて説明しました。各列が、xyz, 強度, RGBになっており、シンプルな構造を有していました。また、4章でお見せしたように、スキャン・エックスでもpts形式のファイルをアップロードすることができます。ぜひお試しください。なお、ソフトウェアの使い方によっては、列数が増えたりと、本記事で紹介するフォーマットと若干異なる形式のファイルが生成される場合もございますのでご注意ください。
データについて
本記事では、旧都城市民会館の点群を利用させていただきました。
その他. ptsファイルをプログラミング言語にて読み込んで閲覧してみよう
3.1で述べた、旧都城市民会館の点群ファイルをプログラミングにて読み込み、閲覧したいと思います。言語はMATLABを利用します。ASCII形式なので、readmatrix関数で簡単に読み込むことができます。pointCloud関数で、point cloud変数にして、pcshow関数で表示できます。
clear;clc;close all
%% 読み込み
xyzirgb = readmatrix("旧都城市民会館_屋外.pts","FileType","text");
%% point cloud変数を作成
pt = pointCloud(xyzirgb(:,1:3),"Color",xyzirgb(:,5:7)/255,'Intensity',xyzirgb(:,4));
%% RGB表示
figure;pcshow(pt);title('RGB表示')
%% intensity表示
figure; pcshow(pt.Location,pt.Intensity);title('intensity表示');hold on
colorbar
以下の動画は、pcshow関数で、点群を表示したときの様子を示します。きれいに可視化できていることがわかります。
