5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

FOSS4GAdvent Calendar 2024

Day 19

PDALを用いた3次元点群データの着色方法

Posted at

はじめに

この記事は、FOSS4G Advent Calendar 2024の19日目の記事です。

昨今、色々な自治体の3次元点群データがオープンデータとして公開され始めています。公開された3次元点群データで遊んでいると、RGBのカラー情報が含まれてないものもあり、オルソ画像を用いて着色できないかなと思ったので、試してみました。
この記事では、3次元点群データを変換・処理するライブラリであるPDALを用いて、着色を行っていきます。

使用するデータ

元の点群データ.png

  • オルソ画像
    上の点群データと一緒に公開されていたオルソ画像を使用しました。

オルソ画像.png

着色方法

基本的には、PDALのExercisesページの通り行えば問題ありません。

1. パイプラインの定義

PDALでは、複雑な操作を行うときにJSON形式でパイプラインを定義し、実行できます。ここでは、着色処理を行うパイプラインを定義していきます。

実際に使用したパイプラインは以下の通りです。

{
    "pipeline": [
        "./data/point_cloud/09MD0512_epsg6677.las",
        {
            "type": "filters.colorization",
            "raster": "./data/ortho/09MD0512_ortho_segment_building.tif"
        },
        {
            "type": "writers.las",
            "minor_version": "2",
            "dataformat_id": "3",
            "filename":"./data/point_cloud/09MD0512_epsg6677_segment_building.las"
        }
    ]
}

パイプラインの解説

3行目:

"./data/point_cloud/09MD0512_epsg6677.las"

着色したい3次元点群データのパスを指定しています。

4行目~7行目:

        {
            "type": "filters.colorization",
            "raster": "../data/ortho/09MD0512_ortho.tif"
        },

この部分では、点群データへの着色を行う処理を記載しています。
tpye: 実施する処理を指定するところです。今回は点群データの着色を行うためにfilters.colorizationを指定しています。
raster: 着色処理に使用する画像のパスを指定するところです。

8行目~13行目:

        {
            "type": "writers.las",
            "minor_version": "2",
            "dataformat_id": "3",
            "filename":"../data/point_cloud/09MD0512_epsg6677_color_test.las"
        }

この部分では、着色した点群データを出力する処理を記載しています。
type: 処理した点群データをLAS形式などにて出力するwriters.lasを指定しています。
minor_version: LASのバージョンを指定するところです。今回は多くのソフトウェアで使用できる1.2にしました。
dataformat_id: Point Data Format IDを指定するところです。今回は時間と色情報の両方をサポートしている3にしました。
filename: 出力先のパスを指定するところです。

2. パイプラインの実行

先ほど定義したパイプラインをcolorize_pipeline.jsonとして保存しています。
以下のコマンドを実行することで、パイプラインで定義した処理を実行できます。

$ pdal pipeline ./colorize_pipeline.json

実行した結果、以下の画像のようになりました。オルソ画像の色を用いて3次元点群データが着色されていることが分かります。

カラー化した点群データ.png

応用編

ここまではオルソ画像を用いて着色していましたが、当然他の画像を用いて着色もできます。
オルソ画像をセグメンテーション(領域分割)した結果を用いて着色することで、簡易的に3次元点群データをセグメンテーションすることができるかなと思いました。
そこで、オルソ画像からGrounding DINOSAM 2.1(Segment Anything Model 2.1)という2つのAIモデルを用いて、建物を抽出してみました。具体的には、segment-geospatialというライブラリを用いて行っています。このライブラリ自体の説明に関しては、公式ドキュメントFOSS4G 2023 Japan@FUKUIで発表した資料こちらの記事などをご覧ください。
text promptにeach buildingと指定してセグメンテーションを行った結果、以下の画像のようになりました。

セグメンテーション結果.png

先ほど紹介した着色処理を行うと以下のようになり、建物部分が赤色に着色され簡易的ではありますが、3次元点群データに対してセグメンテーションを行ったようになります。

セグメンテーション結果でカラー化した点群データ.png

おわりに

PDALを用いた3次元点群データの着色方法について紹介しました。PDALを用いると、3次元点群データについて様々な処理が行えるなと改めて実感しました。まだまだ知らない処理があるので、これからも遊んでいきたいと思います。

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?