点群におけるLASとは?
点群データを扱うLASファイルを解きほぐす
はじめに
で、3D画像ファイルにおける点群はどういうものなのかを調べました。
その記事では、
を取り上げて説明しました。
PTSファイルについては、
引用:【Point Cloud】色付きの点群は立体になる
とあるように、「単純なテキストファイル」でありました。
しかし、LIDERスキャナーの点群データを使う際には、
引用:PC-MAPPINGでのLASファイルの取り扱いについて
とあるように、LASファイルが標準フォーマットとして利用されています。
LASファイルについて興味深い記事がありました。
引用: LASデータの利活用~点群からラスターデータを作成する
と書かれています。
LASファイルは点群を扱うのであり、3Dの点群はベクタデータであるから、それをラスターデータに変換するとはどういうことなのでしょうか?
今回は、LASファイルはデータをどのように扱っているかという仕組みに焦点を当てて、標準フォーマットとされているLASファイルを分かり易く具体的に解きほぐしてみることにしました。
LASファイルフォーマットの仕様
LASファイルフォーマットの仕様については、LAS Specification 1.4 - R15などに書かれています。
下記具体例はバージョンLAS1.2のファイルであり、バージョンLAS1.2の仕様は、LAS Specification Version 1.2に書かれています。
PC-MAPPINGでのLASファイルの取り扱いについての記事には、
「LASファイルは、1つのパブリックヘッダ部(Public Header Block)、任意の数の可変長レコード(Variable Length Records:VLRs)、計測したポイント分のポイントデータレコード(Point Data Records)、任意の数の拡張可変長レコード(Extended Variable Length Records:EVLRs)で構成されます。」
と書かれています。
また、ポイントデータレコードについて、
「ポイントデータレコードは、バージョンを経るごとにフォーマットが追加されており、LAS1.4の時点では0~10までの計11個のフォーマットが存在します。・・・フォーマットによってGPS時間やRGBなどのデータフィールドが異なるため、ファイル内ではポイントデータレコードの形式が同一である必要があります。」
という記載もあります。
この「ポイントデータレコードの形式」は、どのようなデータかを把握するに当たって重要な項目になります。
のシェープファイルの説明のところで、
「シェープタイプ毎にデータ構造が異なります。このシェープタイプを確認するには32Byte目の値を調べるしかなさそうです。」と書きましたが、シェープタイプと同様に、この「ポイントデータレコードの形式」も1ByteのPoint Data Record Formatデータで定められているだけなので、ポイントデータレコードの形式を確認するには、Point Data Record Formatデータを調べるしかなさそうです。
そのようなデータ構造を以下に具体的に説明します。
LASファイルの点群の具体例
Leafmap/Open3Dを使って掛川城の大規模点群データ(5GB)をPythonで可視化してみよう!や、
iPhoneでも使えるようになったLiDARの標準ファイル形式「LAS」ってどんなデータなの?を、PDAL/Laspyを使って調べてみるの記事に、掛川城の点群データを用いたいくつかの処理が記載されています。
それら処理に興味がある方は参考にされると良いと思います。
その掛川城の点群データ20190308掛川城.lasは、ポイントデータレコードの形式が2の、rgb色データを含む形式になっているので、これを具体例として使わせてもらいました。
LASファイル20190308掛川城.lasは、のPTSファイルを表示する際に用いた、点群データのフリービューアソフトであるCloudCompareで開けばすぐに表示できます。表示例を【図1】に示します。
この20190308掛川城.lasファイルは、5,001,518,281Byteのサイズで、
227Byteのパブリックヘッダ部と、
各26Byteで計192,366,079個のポイントデータからなる5,001,518,054Byteのポイントデータレコード部
で構成されています。
パブリックヘッダ部のNumber of Variable Length Records値は0であるので、可変長レコード部はありません。
227Byteのパブリックヘッダ部のすぐ後からポイントデータレコード部が続きます。
パブリックヘッダ部
この20190308掛川城.lasファイルは、バージョンLAS1.2のファイルになっているので、パブリックヘッダ部は以下の227Byteのデータになっています。
項目名 | サイズ | 値 |
---|---|---|
File Signature | 4 Byte | LASF |
File Source ID | 2 Byte | 0 |
Global Encoding | 2 Byte | 0 |
Project ID - GUID Data 1 | 4 Byte | 0 |
Project ID - GUID Data 2 | 2 Byte | 0 |
Project ID - GUID Data 3 | 2 Byte | 0 |
Project ID - GUID Data 4 | 8 Byte | 0 |
Version Major | 1 Byte | 1 |
Version Minor | 1 Byte | 2 |
System Identifier | 32 Byte | 32ByteのID |
Generating Software | 32 Byte | 32ByteのSoftware名 |
File Creation Day of Year | 2 Byte | 0 |
File Creation Year | 2 Byte | 0 |
Header Size | 2 Byte | 227 |
Offset to Point Data | 4 Byte | 227(0xE3) |
Number of Variable Length Records | 4 Byte | 0 |
Point Data Record Format | 1 Byte | 2 |
Point Data Record Length | 2 Byte | 26 |
Legacy Number of Point Records | 4 Byte | 192,366,079 |
Legacy Number of Point by Return | 20 Byte | Return1:192,366,079 |
Return2:1,140,850,736 | ||
Return3:67,111,168 | ||
Return4:2,596,204,288 | ||
Return5:1,964,434,249 | ||
X scale factor | 8 Byte | 0.00000007131602618438667 |
Y scale factor | 8 Byte | 0.00000008309306580718317 |
Z scale factor | 8 Byte | 0.000000022329229780036834 |
X Offset | 8 Byte | -44528.753 |
Y Offset | 8 Byte | -135852.29 |
Z Offset | 8 Byte | 25.648 |
Max X | 8 Byte | -44375.603 |
Min X | 8 Byte | -44528.753 |
Max Y | 8 Byte | -135673.849 |
Min Y | 8 Byte | -135852.29 |
Max Z | 8 Byte | 73.5996558027345 |
Min Z | 8 Byte | 25.648 |
ポイントデータレコード部
この20190308掛川城.lasファイルは、パブリックヘッダ部のPoint Data Record Format値が2であるので、ポイントデータレコード形式2の以下の計26Byteのデータ構成になっています。
最初に現れるポイントのポイントデータレコードを以下に示します。
項目名 | サイズ | 値 |
---|---|---|
X | 4 Byte | 531,578,298 |
scale、offset変換後-44,490.84295 | ||
Y | 4 Byte | 855,844,897 |
scale、offset変換後-135,781.1752 | ||
Z | 4 Byte | 1,295,921,591 |
scale、offset変換後54.58493098 | ||
Intensity | 2 Byte | 513 |
Return Number | 3 bits (bits 0, 1, 2) | 0 |
Number of Returns (given pulse) | 3 bits (bits 3, 4, 5) | 0 |
Scan Direction Flag | 1 bit (bit 6) | 0 |
Edge of Flight Line | 1 bit (bit 7) | 0 |
Classification | 1 Byte | 1 :Unclassified |
Scan Angle Rank (-90 to +90) – Left side | 1 Byte | 0 |
User Data | 1 Byte | 0 |
Point Source ID | 2 Byte | 29 |
Red | 2 Byte | 35,445 |
Green | 2 Byte | 31,365 |
Blue | 2 Byte | 32,640 |
具体例の解説
LASファイルは、パブリックヘッダ部でX scale factor、Y scale factor、Z scale factor、X Offset、Y Offset、Z Offsetを定め、それらのデータを用いて各ポイントデータレコードのX、Y、Z値を変換してXYZ値を得る規格になっています。
変換後のX=X × X scale factor + X Offset
変換後のY=Y × Y scale factor + Y Offset
変換後のZ=Z × Z scale factor + Z Offset
例えば最初のポイントでは、
変換後のX=-44,490.84295
変換後のY=-135,781.1752
変換後のZ=54.58493098
になっていました。
これらのXYZ値は何を表しているかを調べてみます。
掛川城は静岡県ですので平面直角座標系の区分は8であって、その原点座標値は
東経138度30分0秒
北緯36度0分0秒
で八ヶ岳の東側になっています。
ウィキペディアによれば、掛川城の位置は
東経138度0分53.04秒
北緯34度46分31.5秒
ですので、
原点から緯度では南側に大きく離れ、経度では西側に少し離れています。
で用いた、平面直角座標への換算を使ってXY座標値を求めると【図2】に示すように
X=-135743.8449 m
Y=-44415.5463 m
になっていました。
で記載した、国土地理院の定義を再録すると、
「平面直角座標系は、現在全国を19の座標系に区分しています。平面直角座標系は地点の座標値が次の条件に従ってガウス・クリューゲルの等角投影法によって表示されるように設けられています。
X=0.000メートル Y=0.000メートル」
引用:GIS(地理情報システム)
と定義しています。
掛川城はその原点から緯度では南側に大きく離れ、経度では西側に少し離れているのだから、Xは負の大きい値、Yは負の小さい値であるはずですので、【図2】のXY値は正しいように思われます。
ところが、具体例のXY値は逆転しています。
で取り上げたシェープファイルサンプルで「XとYの値が逆になっています」と書いていた問題と同じで、ファイル作成時に逆転されたのではないかと思います。
逆転の問題はありますが、XY値は平面直角座標系の値で単位はメートルであることが分かりました。
z値は同様に単位はメートルで天守閣の高いところはMax Zにより73.6メートルなのでしょう。
前述のCloudCompareで開いた直後の画像を【図3】に示します。
天守閣あたりにマウスを置いてその位置座標を左下に示しています。
3D(-44483.1;-135768;72.151)と表示されています。
この画像は掛川城を上から見た画像になっていて、横がX軸、縦がY軸になっています。
上が北になっており、通常見慣れた地図のように観察できます。
このように配置するために、XYを逆転させているのであろうと想像しています。
パブリックヘッダ部のLegacy Number of Point by Returnは、LiDARがレーザービームを照射したときの反射(リターン)パルス数で、1番目から5番目までのそれぞれの個数が格納されています。
植生や地面などをこのReturnデータを利用して判定するのですが、1番目(1stReturn)の個数がポイント総数と一致しているので、1番目(1stReturn)だけが使われていると思われます。
それら5個の数値がまちまちである理由は分かりませんでした。
ポイントデータレコードのRed、Green、Blueの色データは16bitになっています。
このファイルの色データが16bitの分解能で設定されているかは不明ですが、最初のポイントの
Red:35,445
Green:31,365
Blue:32,640
のいずれも255で割り切れるので、8Bit Colorデータに255を掛けて16bitデータにしていると思われます。
Max X、Min X、Max Y、Min Y、Max Z、Min ZでXYZ座標の最大値と最小値が格納されているので、データのXYZ座標範囲が特定できます。
これらの値を使って、所望の2D画像に変換できるでしょう。
おわりに
バージョンLAS1.2では
ポイントデータレコード形式2
バージョンLAS1.3では
ポイントデータレコード形式5
バージョンLAS1.4では
ポイントデータレコード形式7、8、10
の場合に格納されます。
このポイントデータレコード形式を確認するには、パブリックヘッダ部のPoint Data Record Formatを調べるしかなさそうです。
RGB色データは16bitになっているので分解能は十分ですが、今回のサンプルは一定値が掛けられているようです。
LASファイルでは、平面直角座標系や測地座標系などの地理情報は格納されていないので、XY座標値は任意に設定されているようです。
適当なサンプルを入手できれば調べてみたいと思っています。