統計分析フリーソフト「R」のForest Toolsで樹頂点を検出
※このページは「https://qiita.com/nireiro_py/items/9fcb7d869b5c515f74c6」を参考にさせて頂きました。@nireiro_pyに感謝します。
※当方がインストールしたRはversion 4.1.2です。
1.WebODMで構築したDSMから樹頂点を取り出すまでの作業を紹介します。
> install.packages("ForestTools")
※Rのプラットフォームで上記を実行するとミラーサイトの場所を聞かれます。当方は日本国内のサイトを選択しました。
※一度パッケージをインストールしたら、次からは必要ありません。
2.下記の2つのライブラリーをアタッチします。
> library(ForestTools)
> library(raster)
3.WebODMで構築したDSMデータはパソコン上の自分のホルダーにコピペしておきました。
パソコン上の自分のホルダーからデータを読み込むときは下記のとおりです。
> inCHM <- raster("C:\\Users\\nobo_labo\\dsm2.tif")
※nobo_laboは自分のホルダーの名前なので、各自変更してください。
4.樹頂点の抽出に使う関数は下記の一次式です。
> lin <- function(x){x * 0.02 + 0.4}
※水上八幡神社の場合の定数項は0.02と0.4が適当でした。この値を探すのに苦労しました。
5.樹頂点の抽出は下記の命令で行います。
> ttops <- vwf(CHM = inCHM, winFun = lin, minHeight = 40)
※CHMはDSMデータ、winFunは関数、minHeightはDSMの最低地上高で、これ以下を計算から除外します。
※計算が終わるまで30分くらいかかります。
6.下記の手順でデータを取り出します。
> ttops (データフレーム)
class : SpatialPointsDataFrame
features : 3112
extent : 390594.2, 390843.6, 4284218, 4284470 (xmin, xmax, ymin, ymax)
crs : +proj=utm +zone=54 +datum=WGS84 +units=m +no_defs
variables : 3
names : height, winRadius, treeID
min values : 40.0099983215332, 1.20019996643066, 1
max values : 80.6999969482422, 2.01399993896484, 3112
> names(ttops)
[1] "height" "winRadius" "treeID"
>ttops$x[1:3]
[1] 390756.2 390756.3 390756.1
>ttops$y[1:3]
[1] 4284470 4284470 4284470
>ttops$height[1:3]
[1] 60.85 60.85 60.85
7.解析結果を図示します。
> par(mar = rep(0.5, 4))
※プロットの枠
> plot(inCHM, xlab = "", ylab = "", xaxt='n', yaxt
= 'n')
※ラスターデータ図示
> plot(ttops, col = "blue", pch = 20, cex = 0.5, add = TRUE)
※樹頂点のプロット
Rのプラットフォームでは下記のようになります。
樹頂点ではない場所にも沢山の点があることが解ります。あとでクリーニングすることにしましょう。
8.テキストデータ(.csv)を自分のホルダーに出力します。
> file_path <- "C:\\Users\\nobo_labo\\test.csv"
> write.csv(ttops, file_path)
スプレッドシートソフトで開くと下記のようになります。
これでRの作業はおわりです。
9.課題
関数linの定数項は試行錯誤で探しましたが、定数の意味の確認が必要です。