jiku log

データサイエンスの核心を掴む : 学びと発見の記録

「Pythonで学ぶ衛星データ解析基礎」を読む ~第4章 衛星データ解析手法別演習[解析編] ③道路の抽出~

はじめに

宮﨑浩之 監修「Pythonで学ぶ衛星データ解析基礎―環境変化を定量的に把握しよう」は,Pythonを用いた衛星データ解析の基礎から実践までを網羅的に解説しており,製造業の競争力強化と持続可能な社会の実現にとって重要な,環境モニタリングやインフラ管理への応用に資する知識を提供すると考えている。本書を読むことを通じて,衛星データ解析を基礎を学ぶ。

本記事は,「第4章 衛星データ解析手法別演習[解析編]」における,道路の抽出のための分析に関する読書メモである。

4-3 プランテーション林に開発された道路を抽出

「道路の検出」の全体像

背景

人間活動の拡大と自然資源の保護が重大な課題となっている。例えば東南アジアでは,プランテーション農園による大規模栽培の拡大に伴い道路網が整備され,生態系への影響も危惧されている。

目的

道路と植物で光の反射の特性が異なることを利用して,プランテーション農園の中にある道路を検出する。

分析対象

本書において,分析の対象は,カリマンタン島(インドネシア)である。ここでは,森林の中に道路が存在している。

分析の流れ

今回の分析は,「カリマンタン島の森林の中から,道路の部分を検出する」というものである。森林において,植生がある部分はNDVIが大きくなるが,道路の部分はNDVIが小さくなるので,NDVIの画像を作成し,その値が小さいところを道路とみなせばよい。また,道路とみなせる部分の抽出には,画像処理技術を用いる。

分析の流れは以下のようになる。

  1. 分析に用いるデータを取得する(カリマンタン島のデータ)。
  2. 取得したデータから,画像の画素ごとのNDVIを計算する。その後,NDVIの値(-1~1)を0~255のグレースケールに変換する。
  3. NDVIの値が小さい,すなわちグレースケール変換後の値が小さい部分を,各種画像処理技術を用いて抽出する。
    1. バイラテラルフィルタ : エッジを残しつつ平滑化を行う手法。
    2. Canny法 : エッジの検出の代表的な手法。
    3. ラプラシアンフィルタ : 二次微分を使ったエッジを抽出するフィルタで,線に強く反応する。
道路抽出の流れ
サンプルコード

今回は,以下のサンプルコードを参照した。
github.com

「道路の検出」の詳細

データの取得

データは,Sentilen-2のデータを,STAC経由で取得した。日付の範囲と領域の範囲を指定し,その区間に含まれる画像を取得した。

その後,雲量を目視で確認し,最も雲量が少ないデータを選び,分析対象の領域で区切り分析対象データとした。

NDVIの計算・グレースケール化

NDVIは以下で定義している。なおこの定義は,第2章で現れたNDVIの定義とは符号が異なることに注意する。


 \begin{align}
\text{NDVI} = \frac{ \text{NIR} - \text{Red} }{ \text{NIR} + \text{Red} } \\ \\
\end{align}
ここで,NIRは近赤外,Redは赤色帯域である。


道路は森林とは植生が異なり,NDVIが小さい領域になっていると考えられる。NDVIの大小が画像から表現できれば良いので,-1~+1の範囲の値であるNDVIから,0~255の間の範囲の値であるグレースケールに変換する。


 \begin{align}
\text{植生指標データ} = (NDVI + 1.0) \times \frac{255}{2} \\ \\
\end{align}
上式より植生指標データの値は, NDVI=-1のとき0, NDVI=+1のとき1になることが分かる。

このようにして作成したグレースケールデータ画像は以下のようになる。

グレースケール画像
ノイズの除去 : バイラテラルフィルタ

以降は,画像処理の手法であるノイズ除去とエッジ検出を用いて道路を抽出する。

画像処理を行なうためには,OpenCVを用いる。OpenCVを使用するためには,

import cv2

の用に指定してライブラリをインポートする。

バイラテラルフィルタ(Bilateral Filter)は,画像処理においてエッジを保持しつつノイズを除去するための非線形フィルタである。
OpenCVにおける実装では,以下のようなパラメータを設定する。

  • ぼかす領域の大きさ(d) : フィルタが考慮する近傍ピクセルの範囲を指定する。
    • 値が大きいと平滑化される範囲が広がるが,計算量が増える。
    • 値が小さいと平滑化の効果が弱まり,ノイズ除去が不十分になる。
  • 色空間の標準偏差(sigmaColor) : ピクセル値の差がどの程度まで平滑化に影響を与えるかを制御する。
    • 値が小さいと,エッジがより鮮明に保持される。
  • 距離の標準偏差(sigmaSpace) : ピクセル間の距離が平滑化にどの程度影響するかを制御する。

参考 : OpenCV: Image Filtering

バイラテラルフィルタを用いてノイズを除去した結果は以下のようになる。

道路の抽出 : Canny法

ノイズを除去した後の画像に対して,エッジ抽出を用いて道路を抽出する。手法は,Canny法を用いる。

Canny法はノイズに強いエッジ抽出手法であり,画像解析や物体検出,コンピュータビジョンなどに広く利用されている。
OpenCVにおける実装では,以下のようなパラメータを設定する。

  • threshold1 (小さい値の閾値) : 勾配の大きさがこの値未満のピクセルはエッジとして除外される。
  • threshold2 (大きい値の閾値) : 勾配の大きさがこの値以上のピクセルは強エッジとして確定される。

参考 : OpenCV: Feature Detection

Canny法を用いてエッジ抽出を行なった結果は以下のようになる。

道路の抽出 : ラプラシアンフィルタ

別のエッジ抽出手法として,ラプラシアンフィルタを用いる。

ラプラシアンフィルタは2次微分ベースのフィルタである。画像の輝度変化(勾配)の2次微分を計算することで,エッジ部分(輝度が急激に変化する領域)を強調する。
OpenCVにおける実装では,以下のようなパラメータを設定する。

  • ddepth : 出力画像のデータ型を指定する。ラプラシアンフィルタの結果,負の値を出力することがあるので,8ビット符号なし整数(0~255)などで出力するように指定する。
  • scale : ラプラシアンの結果に適用する倍率。先鋭化やエッジ抽出の調整に用いる。

参考 : OpenCV: Image Filtering

ラプラシアンフィルタを用いてエッジ抽出を行なった結果は以下のようになる。

Canny法による結果と比べて,細かいエッジが抽出できている。

まとめと感想

今回は,「第4章 衛星データ解析手法別演習[解析編]」における,道路の抽出のための分析についてまとめた。

これまでの節では,画像からNDVIなどの正規化指標を計算する例を説明していたが,本節ではグレースケール化やノイズ除去,エッジ抽出といった各種画像処理の手法を,OpenCVを用いて実装していた。衛星画像のバンドには可視光以外も含まれるが,その他のバンドも画像として扱えるため,各種画像処理の手法が扱えるようになる。

今後は,衛星画像と一般的な画像において,共通的に使える手法や,どちらか一方の画像でしか使えない手法についても深堀してみたい。

本記事を最後まで読んでくださり,どうもありがとうございました。