kentaPtの日記

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

3次元点群のフォーマットであるLAS形式について

0. はじめに

 LiDAR(Light Detection and Ranging)や写真測量技術を使って取得される点群データは、建設、測量、インフラ管理、考古学、ゲーム開発など、広範な分野で活用されています。これらのデータは、各点の座標(X, Y, Z)やその他の属性情報を含み、現実の物体や環境を高精度に記録するために重要です。

 点群データを保存・共有するためのフォーマットも多岐にわたります。よく利用されるフォーマットには、LAS、LAZ、TXT、E57、PTS、PTX、XYZなどがあり、それぞれ異なる特徴と用途があります。特にLASファイルは、LiDARデータの標準フォーマットとして広く利用されており、効率的なデータ圧縮や属性情報の管理が可能です。

 本記事では、LASファイルを中心に、点群データを扱う際に知っておくべき基本的なフォーマットの特徴を紹介するとともに、LASファイルの中身を詳細に解説します。LASファイルがどのように座標値や属性データを格納しているのか、また他のフォーマットと比較してどのような利点があるのかを紹介していきます。

LAS以外の主要なフォーマットである、E57やptsについては以下の記事で紹介しています。

kentapt.hatenablog.com

kentapt.hatenablog.com

1. LASファイルについて

LASファイルとは、3次元点群を格納するための代表的なフォーマットである。また、LASファイルを圧縮したLAZファイルもよく用いられる。

 例えば、以下の図は、Cloud Compareにて、3次元点群を閲覧している時の様子を示す。

静岡県長崎県、東京都、埼玉県などのオープンデータはLAS形式でダウンロードすることができる。
以下は埼玉県より公開されている点群データをダウンロードする時の様子を示す。

例えば、埼玉県の点群ファイルは以下のURLからダウンロードすることができる。

www.geospatial.jp

以下のようにLAS形式のファイルを得ることができる。

LAS形式に関する基本情報は以下のとおりである。2章以降でその詳細について説明する。

Name 内容
ASCII/BINARY BINARY
開発者(団体) American Society for Photogrammetry and Remote Sensing (ASPRS)
Initial release May 9, 2003
Latest release July 9, 2019 (Version 1.4)
開くことのできるオープンソフトウェアの例 CloudCompare, Potree, PotreeDesktop, QGIS など
データに含まれる情報 X, Y, Z座標, Intensity(反射強度), RGBカラー, 分類コード(地面、植生など), GPSタイムスタンプ, スキャン角度など

2. LASファイルの基本的な構成について

LASファイルを構成する要素は以下のとおりである。

構成要素 必須か 説明 具体例
Header 必須 LASファイルの基本情報を格納 点数、点の範囲
Point data records (Records) 必須 LASファイルの中核となる部分で、実際のLiDARの点群データを格納 X, Y, Z 座標、Intensity、Classification
Variable Length Records (VLR) 任意 ファイル全体に関する追加の情報を格納。可変長。 空間参照系や、その他のメタ情報
Extended variable length records (EVLR) 任意 VLRと似た役割。ファイルの末尾に配置され、あとから情報の追加が可能。 -

2.1. Header

LASファイルのバージョン(1.1, 1.2...など)や点数、点の範囲などの基本的な情報を有している。以下に、LASのHeaderを読み込んだ時の例を示す。

ヘッダーの項目 内容の例 コメント
'File Signature' 'LASF' LASF (LAS File)と記載されている必要がある
'File Source ID' 0 -
'Global Encoding' 0 -
'Project ID - GUID data 1' 0 プロジェクトのGUID(グローバル一意識別子)。
'Project ID - GUID data 2' 0 -
'Project ID - GUID data 3' 0 -
'Project ID - GUID data 4' '        ' -
'Version Major' 1 LASの major バージョン (= LAS 1.2)
'Version Minor' 2 LASの manor バージョン(= LAS 1.2)
'System Identifier' 'PDAL’ どのようなシステムや機器を使って点群データが取得または処理されたかを記録する
'Generating Software' 'PDAL 2.6.2 (Releas)’ データを生成したソフトウェア
'File Creation Day of Year' 6 年初から数えた時のLASファイルが作成された日
'File Creation Year' 1980 LASファイルが作成された年
'Header Size' 227 ヘッダーのサイズ(バイト単位)
'Offset to point data' 548 ヘッダーの終わりから最初のポイントデータまでのオフセット(バイト単位)
'Number of variable length records' 4 可変長レコード(VLR)の数
'Point Data Format ID' 130 点群データの形式ID
'Point Data Record Length' 26 各点群データレコードの長さ(バイト単位)
'Number of point records' 196314863 記録された点の数
'Number of points return 1' 196314863 最初のリターン(反射光)の点の数
'Number of points return 2' 0 2番目のリターンの点の数
'Number of points return 3' 0 3番目のリターンの点の数
'Number of points return 4' 0 4番目のリターンの点の数
'Number of points return 5' 0 5番目のリターンの点の数
'X scale factor' 0.001 X座標のスケール
'Y scale factor' 0.001 Y座標のスケール
'Z scale factor' 0.001 Z座標のスケール
'X offset' -10000 X座標のオフセット
'Y offset' -30000 Y座標のオフセット
'Z offset' 0 Z座標のオフセット
'Max X' -17525.216 点群データ内の最大X座標値
'Min X' -17667.633 点群データ内の最大Y座標値
'Max Y' -36439.896 点群データ内の最大Z座標値
'Min Y' -36546.117 点群データ内の最小X座標値
'Max Z' 41.15 点群データ内の最小Y座標値
'Min Z' 31.018 点群データ内の最小Z座標値

LASファイルのバージョンが異なると、機能やサポートするデータの種類が変わります。
例えば、LAS1.3から波形データ(Waveform Data)に関連するフィールドが追加されています。
また、バージョン1.4では、後述するVLRがさらに拡張されたEVLRもサポートされ、より大きなデータにも対応します。
分類コードも255までサポートされています。これにより、さらに細かな分類が可能となり、より多様なアプリケーションでの利用が期待されます。

フォーマットの更新については、以下のLASのドキュメントに記載があります。 LAS SPECIFICATION VERSION 1.3
https://www.asprs.org/a/society/committees/standards/LAS_1_3_r11.pdf

LAS Specification 1.4 - R14
https://www.asprs.org/wp-content/uploads/2019/03/LAS_1_4_r14.pdf

2.1.1. Scaleとoffsetについて

LAS/LAZファイルにおけるscale(スケール)とoffset(オフセット)は、点群データの精度とサイズを効率的に管理するために使われる重要な概念である。ここではLiDARデータを効率的に格納し、各点のXYZ座標の数値範囲を縮小するために、スケールとオフセットを利用している。

1. Scale(スケール)

  • スケールは、点群の座標値を適切な範囲に縮小するための係数である。LASファイル内では、点の位置は整数として保存されているが、この整数は実際の座標値を表すためにスケールファクタを掛け合わせて変換される。
  • スケールの主な役割は、データサイズの削減と精度の維持である。LiDARデータは非常に高精度な情報を含むため、直接座標値を格納すると、ファイルサイズが大きくなる場合がある。しかし、スケールファクタを用いることで、元の座標値をより小さな数値で格納できる。
  • 例えば、スケールファクタが 0.01 の場合、ファイル内で格納されている数値が 500 であれば、実際の座標値は 500 * 0.01 = 5 ということになる。
  • XYZ座標は32ビット(4,294,967,296)の整数で記録される。そのため、X (Y, Z) scale factorや、X (Y, Z) offsetを用いて、もとの座標に直すことができる。

2. Offset(オフセット)

  • オフセットは、点群データ全体の基準点を定め、各点の座標値がその基準点からの相対的な位置として保存されるようにする値である。これにより、座標値が非常に大きくなる場合でも、オフセットを用いることで小さな数値として格納でき、効率性が向上する。
  • オフセットを使うことで、全ての座標値は相対的な数値で保存される。例えば、オフセットが 1000 で、格納されている座標値が 10 であれば、実際の座標は 1000 + 10 = 1010 となる。

3. スケールとオフセットの使用例

例えば、LASファイルである点のX座標がスケール 0.01、オフセット 1000 の場合、ファイル内で格納されているX座標値が 500 であれば、実際の座標は以下のように計算されます:

実際の座標値 = (格納されている値 * スケール) + オフセット

この場合、

 X = (500 * 0.01) + 1000 = 5 + 1000 = 1005

したがって、この点の実際のX座標は 1005 となります。

  • スケールとオフセットは、特に広い範囲のLiDARデータを扱う場合に重要である。例えば、都市全体のLiDARデータを扱う際、直接数値を保存するとデータサイズが大きくなる可能性があるため、スケールとオフセットを適切に設定して効率的にデータを保存する。
  • また、スケールファクタの精度設定によって、どれだけ細かいレベルで座標値を記録するかを調整できる。高精度な測定が必要な場合はスケールを小さくし、大まかなデータであればスケールを大きく設定することができる。

これらの仕組みにより、LASファイルは高精度な座標データを効率的に格納し、かつサイズを抑えつつ正確な位置情報を保持できるようになっている。

2.1.2.ソフトウェアでLASファイルを読み書きした場合の例

2.1.2.1. 点群を読み込む場合: CloudCompareやQGISを利用

CloudCompareのv2.13でLASファイルを読み込んだ時の例を示す。

Headerに含まれる以下の項目をこのウィンドウの赤丸で囲った部分から確認することができる。

  • Version
  • Point format
  • Number of points

2.2にて後述するPoint data recordsに含まれるデータのカラムに関してもこのウィンドウの赤い四角で囲った部分から確認することができる。

また、先述したoffsetの値が、ここでのShiftの値として記載されている。ここでYesとすることで、CloudCompare上にシフトした状態の点群を読み込むことができる。また左下に Preserve global shift on saveとあるように例えばシフトした状態の点群を編集し、さらにその結果を書き込む場合は、ここで一時保存されているシフトの値を加味したうえで点群が保存される。

次に、QGISでLASファイルを読み込んだ時の様子を示す。OpenStreetMapと重ね合わせて表示させている。

プロパティを見ると、同様に、ScaleとOffsetが記載されていることがわかる。

2.1.2.2. 点群を書き込む場合

CloudCompareにて、File>Saveの順にクリックすることで点群を保存することができる。

Basic Paramsを見ると、Scaleなどが指定できることがわかる。点群のXYZ座標をより詳細に保存したい場合は、この値を0.1mmなどにするとよい。一方で、点群が街全体などを示すデータで、あまり解像度も高くない場合であればこのScaleの値を0.1mなどにするとよい。

2.2. Recordについて

Recordには、3次元点群データのメインのデータが格納されている。主なものについて以下に説明する。

2.2.1. xyz座標について

LAS形式ではXYZ情報は32ビットの整数で表されており、先述したように、offsetやscaleの値を利用して、再スケーリングしている。

2.2.2. intensityについて

照射したレーザービームの反射強度を示す。

2.2.3. return numberについて

例えば、航空機LiDARでは、空中から地上にレーザービームを照射したとき、複数のレーザービームの反射(リターン)を得ることができる。

  • ファーストリターン:はじめに、地上部の物体に到達し、反射してきたもの。地面や植生の上部から返ってくることが多い。
  • セカンドリターン以降:植生からの多重の反射を受けて返ってくる。

図出展:LIDARデータとは

pro.arcgis.com

リターンごとの傾向

以下の図は、各リターンから得られた時の点群を上から見たときの図である。

  • Return1(右下)は全方面から得られている。また、水面からはうまく反射が得られず、欠落していることがわかる。
    • LiDARの波長は900 nm付近を利用しているものも多い(例:velodyne, yellow scan)。この波長は水に吸収されやすいためである。
  • Return2は植生から得られていることが多い。
  • Return3も植生から得られていが、Return2よりも、割合が低いことがわかる。

図出典: lidar return number and classification

www.usna.edu

2.2.4. classificationについて

主な分類のクラスについて

  • その点がどのクラスに属するかを示している。ASPRS基準でどの分類をどの番号を割り当てるかがあらかじめ決められている。
  • 10, 11, 13以降は特に指定されていないため、特別な解析の際はその番号を使うことも可能である
    • 例)電線や線路の検出

画像出典:ASPRSより

⚠️ TellaScanなどの他のソフトウェアとの兼ね合いもあり、未分類のクラスに関しては、0と1の両方が用いられる場合がある。

Flagについて

各分類に対して、さらに情報を与えることができ、例えば、ある点をKey-pointであると指定すると、点の間引き処理を行ったときも、その点は削除されない。また、Withheld (保留)のFlagをオンにすると、その点は解析に用いられない。

画像出典:ASPRSより

2.2.5. User Dataについて

ユーザーが独自に格納することのできるフィールドである。しかし、LASのバージョンにもよるが、user_dataは8ビット(0-255)であることが多く、自由に値を格納できないことが多いことに注意する。

2.2.6. gps_timeについて

その点が取得されたときの時間

2.2.7. red, green, blue

その点の持つ色情報。16bitで保存されていることが多い。

2.3 Variable Length Records (VLR)について

VLRとは、空間参照系や、その他のメタ情報など、ユーザーの目的に応じて、点群に対する情報を付加することができる。

例えば、樹木の解析を行い、各点に樹木のID(treeID)を割り当てたい場合、独自のVLRを定義することができる。ここではtreeIDという値を格納している。

以下の図は、プログラムにて各点に樹木のID(treeID)を割り当て、そのIDごとに異なる色で示した例である。

以下のように、CloudCompareで開くと、treeIDがExtra Fieldsに表示されていることがわかる

その他のVLRの例を示す。このデータおよびコードはMATLABの例題から得たものである

jp.mathworks.com

  • Dataの中身を一部を以下に示す
    • UTM zone 16Nなどの情報が確認できる

'COMPD_CS["NAD83 / UTM zone 16N + VERT_CS", PROJCS["NAD83 / UTM zone 16N", GEOGCS["NAD83", .... (続く)

8. 座標参照系 — QGIS Documentation ドキュメント

VLRの一覧の例

Record ID 説明
0 クラス分類ルックアップのデータ(文字列形式)
3 テキストエリアの説明データ(文字列形式)
100-354 波形パケット記述子のデータ(ビット数、圧縮タイプ、サンプル数、時間間隔、デジタイザのゲイン・オフセットなど)
2111 OGS数式変換WKTのデータ(文字列形式)
2112 OGS座標系WKTのデータ(文字列形式)
34735 GeoKeyDirectoryTagのGeoTiffキー値(バージョン、キー数、エントリなど)
34736 GeoDoubleParamsTagの数値データ(double型)
34737 GeoAsciiParamsTagのデータ(文字列形式)

2.4. Extended variable length records (EVLR)

VLRと類似している。VLRに比べて、大きなビット数を利用しており、より大きな値を格納することができる。

  • las1.3で導入された
  • 定義できるEVLRは1つのみ

画像出典:ASPRSより

3. まとめ

LASファイルは、LiDARデータの標準フォーマットとして広く利用されており、効率的なデータ圧縮や属性情報の管理が可能です。

LASファイルの基本構成要素は以下のとおりです:

  1. Header:ファイルの基本情報(点数、範囲、バージョンなど)を含みます。
  2. Point Data Records:実際の点群データ(X, Y, Z座標、Intensity、Classificationなど)が格納されています。
  3. Variable Length Records, VLR:空間参照系やメタデータなど、追加情報を格納する任意の領域です。
  4. Extended Variable Length Records, EVLR:VLRと似ていますが、より柔軟に情報を追加できます。

スケール (Scale) とオフセット (Offset)

  • スケールは、座標値を適切な範囲に縮小するための係数で、データサイズの削減と精度の維持に役立ちます。
  • オフセットは、点群データ全体の基準点を定め、各点の座標値をその基準点からの相対位置として保存します。
  • 座標値は32ビットの整数で保存され、スケールとオフセットを用いて実際の座標値に変換されます。

ポイントデータレコードの主な内容:

  • XYZ座標:スケールとオフセットを用いて実際の座標値を計算します。
  • Intensity(反射強度):レーザービームの反射強度を示します。
  • Return Number(リターン番号):レーザービームが物体に当たって反射して戻ってくる回数を示します(ファーストリターン、セカンドリターンなど)。
  • Classification(分類コード):各点が地面、植生などどのクラスに属するかを示します。
  • User Data:ユーザーが独自の情報を格納できます。」
  • RGBカラー:各点の色情報を保存します。

可変長レコード (VLR) と拡張可変長レコード (EVLR):

  • VLRは、空間参照系やその他のメタ情報など、ファイル全体に関する追加情報を格納します。
  • EVLRは、VLRと似ていますが、ファイルの末尾に配置され、より大きなデータを格納できます。

Reference

https://www.asprs.org/a/society/committees/standards/asprs_las_format_v12.pdf

en.wikipedia.org

www.neonscience.org

www.symphotony.com

www.yellowscan-lidar.com