kentaPtの日記

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

点群のファイル形式であるPTS形式について

1. はじめに

この記事では、3次元点群のファイル形式の1つである、pts形式について説明したいと思います。pts形式は、主にLeica製品によりエキスポートされます。

また、点群の別の形式であるE57やLASについては以下の記事で紹介しています。

kentapt.hatenablog.com

kentapt.hatenablog.com

2. ptsファイルの中身について

2.1. 各列の情報について

点群ファイルは、対象の3次元情報を表すために、xyz座標の情報を有しています。さらに、そのため、点の数だけ、xyz情報があり、それらが各行に格納されます。pts形式では、そのxyz情報の他に、その点をレーザースキャナで取得した時の反射強度、およびその点のRGB情報を持たせることができます。

 以下の図に、ptsファイルを「メモ帳」で開いた時の例を示します。一番初めに、そのファイルに含まれる点の数(1904198)があり、2行目からが、各点の情報を示します。1~3列目はxyz情報を示しています。4列目は強度情報を示しています。そして、5~7列目に、RGB情報が格納されています。ptsファイルは、ascii形式であるため、「メモ帳」などで開くことができます。

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

項目 内容
提供元 Leica
ASCII/Binary ASCII
点群全体の情報 点数
各列の持つ情報 XYZ/反射強度/RGB情報

2.2. iPhone LiDARでptsファイルをエキスポートしたときの例

ptsファイルは、主に、Leica社製のレーザースキャナで取得した点を、ソフトウェアを用いてエキスポートしたときに利用されます。しかし、近年急速に広まっているiPhoneに搭載されたLiDAR(iPhone LiDAR)でもptsファイルとして点群をエキスポートすることも可能です。

 iPhone LiDARのアプリの中で最も有名なものの1つに、3d Scanner Appが挙げられます。

3d Scanner App™

3d Scanner App™

  • Laan Labs
  • ユーティリティ
  • 無料
apps.apple.com

エキスポートする際に青枠のPTS形式を選択してください。

エキスポートすると、ptsファイルを以下のようにメモ帳で閲覧することができました。3d Scanner Appからエキスポートした場合は、強度情報は、すべて0になっています。

3. 公開されているpts形式の点群データの例

インターネット上にいくつか、pts形式の点群ファイルが無料公開されています。その例をこの章で述べます。

3.1. 旧都城市民会館

以下のリンクから、ダウンロードすることが可能です。

www.dropbox.com

こちらのデータは、旧市民会館が解体されることを受けて、それらを3Dデータとして保存するプロジェクトの中で取得されました。

www.city.miyakonojo.miyazaki.jp

こちらのデータ(高密度でないもの)はオープンソースとして公開されています。このデータを利用して、SNSなどで発信する際は、「#3DDA #旧都城市民会館」 で投稿するとよいそうです。

3.2. truevis様のページ

以下のページでは、より小規模な点群がpts形式でダウンロード可能です。

truevis.com

4. ptsファイルをMATLABで読み込んで閲覧してみよう

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関数で、点群を表示したときの様子を示します。

データについて

本記事では、旧都城市民会館の点群を利用させていただきました。

camp-fire.jp